diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0f8304009278..59b60dacef00 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -40,9 +40,15 @@ # PRLabel: %Batch /sdk/batch/ @xingwu1 @matthchr @bgklein @deyaaeldeen +# PRLabel: %Communication +/sdk/communication/ @RezaJooyandeh @DominikMe @0rland0Wats0n @ankitarorabit @Azure/azure-sdk-communication-code-reviewers + # PRLabel: %Cosmos /sdk/cosmosdb/ @southpolesteve @zfoster +# PRLabel: %Digital Twins +/sdk/digitaltwins/ @zolvarga + # PRLabel: %Event Grid /sdk/eventgrid/ @ramya-rao-a @ellismg @@ -75,9 +81,15 @@ # PRLabel: %Cognitive - Form Recognizer /sdk/formrecognizer/ @jeremymeng @willmtemple +# PRLabel: %Cognitive - Metrics Advisor +/sdk/metricsadvisor/ @jeremymeng @KarishmaGhiya + # PRLabel: %Search /sdk/search/ @xirzec @sarangan12 +/sdk/applicationinsights/applicationinsights-query/ @divya-jay @geneh @alongafni +/sdk/operationalinsights/loganalytics/ @divya-jay @geneh @alongafni + /sdk/cognitiveservices/cognitiveservices-qnamaker-runtime/ @bingisbestest @nerajput1607 /sdk/cognitiveservices/cognitiveservices-qnamaker/ @bingisbestest @nerajput1607 @@ -88,8 +100,7 @@ /sdk/**/review/*api.md @bterlson @xirzec # Management Plane -/**/*Management*.ts @qiaozha -/**/arm-*/ @qiaozha +/sdk/**/arm-*/ @qiaozha # PRLabel: %Monitor /sdk/monitor/ @markwolff @xirzec @applicationinsights-js-owners diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 0b425bc4d9bb..238d910dfa82 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -2,8 +2,13 @@ dependencies: '@rush-temp/abort-controller': 'file:projects/abort-controller.tgz' '@rush-temp/ai-anomaly-detector': 'file:projects/ai-anomaly-detector.tgz' '@rush-temp/ai-form-recognizer': 'file:projects/ai-form-recognizer.tgz' + '@rush-temp/ai-metrics-advisor': 'file:projects/ai-metrics-advisor.tgz' '@rush-temp/ai-text-analytics': 'file:projects/ai-text-analytics.tgz' '@rush-temp/app-configuration': 'file:projects/app-configuration.tgz' + '@rush-temp/communication-administration': 'file:projects/communication-administration.tgz' + '@rush-temp/communication-chat': 'file:projects/communication-chat.tgz' + '@rush-temp/communication-common': 'file:projects/communication-common.tgz' + '@rush-temp/communication-sms': 'file:projects/communication-sms.tgz' '@rush-temp/core-amqp': 'file:projects/core-amqp.tgz' '@rush-temp/core-arm': 'file:projects/core-arm.tgz' '@rush-temp/core-asynciterator-polyfill': 'file:projects/core-asynciterator-polyfill.tgz' @@ -62,11 +67,11 @@ packages: async-lock: 1.2.4 buffer: 5.6.0 debug: 3.2.6 - events: 3.1.0 + events: 3.2.0 is-buffer: 2.0.4 jssha: 2.4.2 process: 0.11.10 - rhea: 1.0.23 + rhea: 1.0.24 rhea-promise: 0.1.15 stream-browserify: 2.0.2 tslib: 1.13.0 @@ -75,7 +80,19 @@ packages: dev: false resolution: integrity: sha512-RVG1Ad3Afv9gwFFmpeCXQAm+Sa0L8KEZRJJAAZEGoYDb6EoO1iQDVmoBz720h8mdrGpi0D60xNU/KhriIwuZfQ== - /@azure/core-amqp/1.1.4: + /@azure/communication-signaling/1.0.0-beta.1: + dependencies: + '@azure/core-http': 1.1.8 + '@azure/logger': 1.0.0 + '@opentelemetry/api': 0.6.1 + events: 3.2.0 + tslib: 1.13.0 + dev: false + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-xxlGwbbTkEZAline8wrP75FLaOsT23nMukzIg5X/Cs6cQSQ/JKj7Uxq5Idxp9GgAYT+g+PAj+BJ929/jaselBQ== + /@azure/core-amqp/1.1.5: dependencies: '@azure/abort-controller': 1.0.1 '@azure/core-auth': 1.1.3 @@ -84,21 +101,21 @@ packages: '@types/is-buffer': 2.0.0 async-lock: 1.2.4 buffer: 5.6.0 - events: 3.1.0 + events: 3.2.0 is-buffer: 2.0.4 - jssha: 3.1.0 + jssha: 3.1.2 process: 0.11.10 - rhea: 1.0.23 + rhea: 1.0.24 rhea-promise: 1.0.0 stream-browserify: 3.0.0 - tslib: 2.0.0 + tslib: 2.0.1 url: 0.11.0 util: 0.12.3 dev: false engines: node: '>=8.0.0' resolution: - integrity: sha512-1kPDQMOYcmVRMoe9wAx4tqcM5MlkgCWeIq5gfu8u1dK9UWbVy3mDP9OQJOTZJxccOF1AKaJ7yGQhM+uNrSmwog== + integrity: sha512-8l7xMoyH0/emc1Y1p9I6jVggIBGVgTeKR2KUHWZAlXpBhagglabb6pZLQtCaCATasd8dSoCqwOOxfe/DVSE+kQ== /@azure/core-asynciterator-polyfill/1.0.0: dev: false resolution: @@ -108,13 +125,13 @@ packages: '@azure/abort-controller': 1.0.1 '@azure/core-tracing': 1.0.0-preview.8 '@opentelemetry/api': 0.6.1 - tslib: 2.0.0 + tslib: 2.0.1 dev: false engines: node: '>=8.0.0' resolution: integrity: sha512-A4xigW0YZZpkj1zK7dKuzbBpGwnhEcRk6WWuIshdHC32raR3EQ1j6VA9XZqE+RFsUgH6OAmIK5BWIz+mZjnd6Q== - /@azure/core-http/1.1.7: + /@azure/core-http/1.1.8: dependencies: '@azure/abort-controller': 1.0.1 '@azure/core-auth': 1.1.3 @@ -127,15 +144,15 @@ packages: node-fetch: 2.6.0 process: 0.11.10 tough-cookie: 4.0.0 - tslib: 2.0.0 + tslib: 2.0.1 tunnel: 0.0.6 - uuid: 8.2.0 + uuid: 8.3.0 xml2js: 0.4.23 dev: false engines: node: '>=8.0.0' resolution: - integrity: sha512-UmYMY22Zczg/hCtYuM/0KoV2kVc6juj4mrb5uYgBmmxQ9NIIZrpjgCdVSlYQNClpyrvaIMnecRFMqrZywzhiJA== + integrity: sha512-hJ9ZblU99sY2dTD6U5EqZ5zjd0QmwwvSp8RYp2zS9s5mhsNobLQFI09bIE6yo891bOySCEepNCE5tL15dLYhIA== /@azure/core-tracing/1.0.0-preview.8: dependencies: '@opencensus/web-types': 0.0.7 @@ -148,7 +165,7 @@ packages: dependencies: '@opencensus/web-types': 0.0.7 '@opentelemetry/api': 0.10.2 - tslib: 2.0.0 + tslib: 2.0.1 dev: false engines: node: '>=8.0.0' @@ -171,7 +188,7 @@ packages: /@azure/event-hubs/5.2.2: dependencies: '@azure/abort-controller': 1.0.1 - '@azure/core-amqp': 1.1.4 + '@azure/core-amqp': 1.1.5 '@azure/core-asynciterator-polyfill': 1.0.0 '@azure/core-tracing': 1.0.0-preview.8 '@azure/logger': 1.0.0 @@ -179,23 +196,23 @@ packages: buffer: 5.6.0 process: 0.11.10 rhea-promise: 1.0.0 - tslib: 2.0.0 - uuid: 8.2.0 + tslib: 2.0.1 + uuid: 8.3.0 dev: false resolution: integrity: sha512-F/1jaTC9NxgNjMkO7SAs9Q9BndJ16AtRwQu0l21FNyRCN8kWl4Noiblsbsjtv+BPYa+ARrocR5POMlJ5eveR9w== /@azure/identity/1.1.0: dependencies: - '@azure/core-http': 1.1.7 + '@azure/core-http': 1.1.8 '@azure/core-tracing': 1.0.0-preview.9 '@azure/logger': 1.0.0 '@opentelemetry/api': 0.10.2 - events: 3.1.0 + events: 3.2.0 jws: 4.0.0 - msal: 1.3.2 + msal: 1.4.0 qs: 6.9.4 - tslib: 2.0.0 - uuid: 8.2.0 + tslib: 2.0.1 + uuid: 8.3.0 dev: false engines: node: '>=8.0.0' @@ -240,29 +257,29 @@ packages: dev: false resolution: integrity: sha512-aFHRw/IHhg3I9ZJW+Va4L+sCirFHMVIu6B7lFdL5mGLfG3xC5vDIdd957LRXFgy2OiKFRUC0QaKknd0YCsQIqA== - /@azure/msal-common/1.2.0: + /@azure/msal-common/1.4.0: dependencies: debug: 4.1.1 dev: false engines: node: '>=0.8.0' resolution: - integrity: sha512-5MjxcUoalIxGo29MBHCdwMo6HCsCBt25HDkg+Du7x6nG7Y3NAUb9jM8oibLTth9iIRDaWYVvLfxnpXTKwBGs+A== - /@azure/msal-node/1.0.0-alpha.5: + integrity: sha512-Z0zZc0nDkym/usNugB0BYDGyX5ymwlRXJJT0xfpE921H8/lHDzBfrO/NVw0lljH3Ex5CVE+PpdAGahQQ4zWzKQ== + /@azure/msal-node/1.0.0-alpha.8: dependencies: - '@azure/msal-common': 1.2.0 + '@azure/msal-common': 1.4.0 axios: 0.19.2 debug: 4.1.1 jsonwebtoken: 8.5.1 dev: false resolution: - integrity: sha512-DkoEmnGy+PF5UZbViuLrO8qJVKRBftIojEP3xf8ck6q/vjOY18NUGXxrcKkRXfhRmTe4P2mRGCFuiil8+12IbA== + integrity: sha512-iUPcvTPXTntKMPJ0UgKmLRYpv/buFMgpo6RRvXEN0gkz48hix8WQl6g2/9Y1z0bnjvk01rIeJzZgv3VvtKydvQ== /@azure/schema-registry/1.0.0-beta.1: dependencies: - '@azure/core-http': 1.1.7 + '@azure/core-http': 1.1.8 '@azure/logger': 1.0.0 '@opentelemetry/api': 0.10.2 - tslib: 2.0.0 + tslib: 2.0.1 dev: false resolution: integrity: sha512-bt8VBep8RYjm5om41tvip9ZD72tHexZz+4pp8pPP16/i2nibjFWzxQv4EMdD9UK7sfSLx0Slu9Xyqx7LQkKzKQ== @@ -272,21 +289,21 @@ packages: dev: false resolution: integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - /@babel/core/7.10.4: + /@babel/core/7.11.4: dependencies: '@babel/code-frame': 7.10.4 - '@babel/generator': 7.10.4 - '@babel/helper-module-transforms': 7.10.4 + '@babel/generator': 7.11.4 + '@babel/helper-module-transforms': 7.11.0 '@babel/helpers': 7.10.4 - '@babel/parser': 7.10.4 + '@babel/parser': 7.11.4 '@babel/template': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/traverse': 7.11.0 + '@babel/types': 7.11.0 convert-source-map: 1.7.0 debug: 4.1.1 gensync: 1.0.0-beta.1 json5: 2.1.3 - lodash: 4.17.19 + lodash: 4.17.20 resolve: 1.17.0 semver: 5.7.1 source-map: 0.5.7 @@ -294,82 +311,81 @@ packages: engines: node: '>=6.9.0' resolution: - integrity: sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA== - /@babel/generator/7.10.4: + integrity: sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg== + /@babel/generator/7.11.4: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.11.0 jsesc: 2.5.2 - lodash: 4.17.19 source-map: 0.5.7 dev: false resolution: - integrity: sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng== + integrity: sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g== /@babel/helper-function-name/7.10.4: dependencies: '@babel/helper-get-function-arity': 7.10.4 '@babel/template': 7.10.4 - '@babel/types': 7.10.4 + '@babel/types': 7.11.0 dev: false resolution: integrity: sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== /@babel/helper-get-function-arity/7.10.4: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.11.0 dev: false resolution: integrity: sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - /@babel/helper-member-expression-to-functions/7.10.4: + /@babel/helper-member-expression-to-functions/7.11.0: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.11.0 dev: false resolution: - integrity: sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A== + integrity: sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== /@babel/helper-module-imports/7.10.4: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.11.0 dev: false resolution: integrity: sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== - /@babel/helper-module-transforms/7.10.4: + /@babel/helper-module-transforms/7.11.0: dependencies: '@babel/helper-module-imports': 7.10.4 '@babel/helper-replace-supers': 7.10.4 '@babel/helper-simple-access': 7.10.4 - '@babel/helper-split-export-declaration': 7.10.4 + '@babel/helper-split-export-declaration': 7.11.0 '@babel/template': 7.10.4 - '@babel/types': 7.10.4 - lodash: 4.17.19 + '@babel/types': 7.11.0 + lodash: 4.17.20 dev: false resolution: - integrity: sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q== + integrity: sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== /@babel/helper-optimise-call-expression/7.10.4: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.11.0 dev: false resolution: integrity: sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== /@babel/helper-replace-supers/7.10.4: dependencies: - '@babel/helper-member-expression-to-functions': 7.10.4 + '@babel/helper-member-expression-to-functions': 7.11.0 '@babel/helper-optimise-call-expression': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/traverse': 7.11.0 + '@babel/types': 7.11.0 dev: false resolution: integrity: sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== /@babel/helper-simple-access/7.10.4: dependencies: '@babel/template': 7.10.4 - '@babel/types': 7.10.4 + '@babel/types': 7.11.0 dev: false resolution: integrity: sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== - /@babel/helper-split-export-declaration/7.10.4: + /@babel/helper-split-export-declaration/7.11.0: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.11.0 dev: false resolution: - integrity: sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== + integrity: sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== /@babel/helper-validator-identifier/7.10.4: dev: false resolution: @@ -377,8 +393,8 @@ packages: /@babel/helpers/7.10.4: dependencies: '@babel/template': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/traverse': 7.11.0 + '@babel/types': 7.11.0 dev: false resolution: integrity: sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== @@ -390,50 +406,43 @@ packages: dev: false resolution: integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - /@babel/parser/7.10.4: + /@babel/parser/7.11.4: dev: false engines: node: '>=6.0.0' hasBin: true resolution: - integrity: sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA== - /@babel/runtime-corejs3/7.10.4: - dependencies: - core-js-pure: 3.6.5 - regenerator-runtime: 0.13.5 - dev: false - resolution: - integrity: sha512-BFlgP2SoLO9HJX9WBwN67gHWMBhDX/eDz64Jajd6mR/UAUzqrNMm99d4qHnVaKscAElZoFiPv+JpR/Siud5lXw== + integrity: sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA== /@babel/template/7.10.4: dependencies: '@babel/code-frame': 7.10.4 - '@babel/parser': 7.10.4 - '@babel/types': 7.10.4 + '@babel/parser': 7.11.4 + '@babel/types': 7.11.0 dev: false resolution: integrity: sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - /@babel/traverse/7.10.4: + /@babel/traverse/7.11.0: dependencies: '@babel/code-frame': 7.10.4 - '@babel/generator': 7.10.4 + '@babel/generator': 7.11.4 '@babel/helper-function-name': 7.10.4 - '@babel/helper-split-export-declaration': 7.10.4 - '@babel/parser': 7.10.4 - '@babel/types': 7.10.4 + '@babel/helper-split-export-declaration': 7.11.0 + '@babel/parser': 7.11.4 + '@babel/types': 7.11.0 debug: 4.1.1 globals: 11.12.0 - lodash: 4.17.19 + lodash: 4.17.20 dev: false resolution: - integrity: sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q== - /@babel/types/7.10.4: + integrity: sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== + /@babel/types/7.11.0: dependencies: '@babel/helper-validator-identifier': 7.10.4 - lodash: 4.17.19 + lodash: 4.17.20 to-fast-properties: 2.0.0 dev: false resolution: - integrity: sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg== + integrity: sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== /@bahmutov/data-driven/1.0.0: dependencies: check-more-types: 2.24.0 @@ -453,6 +462,19 @@ packages: node: '>=8' resolution: integrity: sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + /@microsoft/api-documenter/7.8.56: + dependencies: + '@microsoft/api-extractor-model': 7.9.7 + '@microsoft/tsdoc': 0.12.19 + '@rushstack/node-core-library': 3.33.6 + '@rushstack/ts-command-line': 4.6.10 + colors: 1.2.5 + js-yaml: 3.13.1 + resolve: 1.17.0 + dev: false + hasBin: true + resolution: + integrity: sha512-nf2hRScOib5O6kAi+gbnixWdmrpcpNxaiyzGh3P+hts6BpW1F2dgRSFpLT6cMZlCNjw6NrHA58XaLqc36QUltg== /@microsoft/api-extractor-model/7.7.10: dependencies: '@microsoft/tsdoc': 0.12.19 @@ -460,6 +482,13 @@ packages: dev: false resolution: integrity: sha512-gMFDXwUgoQYz9TgatyNPALDdZN4xBC3Un3fGwlzME+vM13PoJ26pGuqI7kv/OlK9+q2sgrEdxWns8D3UnLf2TA== + /@microsoft/api-extractor-model/7.9.7: + dependencies: + '@microsoft/tsdoc': 0.12.19 + '@rushstack/node-core-library': 3.33.6 + dev: false + resolution: + integrity: sha512-9ztrVtUYsnpUC6S+0PR72h7CGvzAX6ljdo6FOzq+jVte743Nb9TMdV97fnJO/n8XRSGUOAKsApgED0GgAek4jw== /@microsoft/api-extractor/7.7.11: dependencies: '@microsoft/api-extractor-model': 7.7.10 @@ -467,7 +496,7 @@ packages: '@rushstack/node-core-library': 3.19.6 '@rushstack/ts-command-line': 4.3.13 colors: 1.2.5 - lodash: 4.17.19 + lodash: 4.17.20 resolve: 1.8.1 source-map: 0.6.1 typescript: 3.7.5 @@ -594,10 +623,10 @@ packages: rollup: ^1.20.0 || ^2.0.0 resolution: integrity: sha512-Gcp9E8y68Kx+Jo8zy/ZpiiAkb0W01cSqnxOz6h9bPR7MU3gaoTEdRf7xXYplwli1SBFEswXX588ESj+50Brfxw== - /@rollup/plugin-node-resolve/8.1.0_rollup@1.32.1: + /@rollup/plugin-node-resolve/8.4.0_rollup@1.32.1: dependencies: '@rollup/pluginutils': 3.1.0_rollup@1.32.1 - '@types/resolve': 0.0.8 + '@types/resolve': 1.17.1 builtin-modules: 3.1.0 deep-freeze: 0.0.1 deepmerge: 4.2.2 @@ -610,7 +639,7 @@ packages: peerDependencies: rollup: ^1.20.0||^2.0.0 resolution: - integrity: sha512-ovq7ZM3JJYUUmEjjO+H8tnUdmQmdQudJB7xruX8LFZ1W2q8jXdPUS6SsIYip8ByOApu4RR7729Am9WhCeCMiHA== + integrity: sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ== /@rollup/plugin-replace/2.3.3_rollup@1.32.1: dependencies: '@rollup/pluginutils': 3.1.0_rollup@1.32.1 @@ -646,6 +675,20 @@ packages: dev: false resolution: integrity: sha512-1+FoymIdr9W9k0D8fdZBBPwi5YcMwh/RyESuL5bY29rLICFxSLOPK+ImVZ1OcWj9GEMsvDx5pNpJ311mHQk+MA== + /@rushstack/node-core-library/3.33.6: + dependencies: + '@types/node': 10.17.13 + colors: 1.2.5 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.17.0 + semver: 7.3.2 + timsort: 0.3.0 + z-schema: 3.18.4 + dev: false + resolution: + integrity: sha512-930AP4Zj14Z4ulQ6ty2v3DM+D31zpLslAJuHB5E1qh/0+8JLkA0cf+wd2QiXjdIBpG/UdrHbReh5e9/e920YJw== /@rushstack/ts-command-line/4.3.13: dependencies: '@types/argparse': 1.0.33 @@ -654,33 +697,42 @@ packages: dev: false resolution: integrity: sha512-BUBbjYu67NJGQkpHu8aYm7kDoMFizL1qx78+72XE3mX/vDdXYJzw/FWS7TPcMJmY4kNlYs979v2B0Q0qa2wRiw== - /@sinonjs/commons/1.8.0: + /@rushstack/ts-command-line/4.6.10: + dependencies: + '@types/argparse': 1.0.38 + argparse: 1.0.10 + colors: 1.2.5 + string-argv: 0.3.1 + dev: false + resolution: + integrity: sha512-WhB/+yGvfmdsMFhEeVaJ9lBwPANFdsoKPsEkzSOVj60qG4aLWABeEl5rOdEwbbnx83RaNN2oQW8TX3enD+vdmw== + /@sinonjs/commons/1.8.1: dependencies: type-detect: 4.0.8 dev: false resolution: - integrity: sha512-wEj54PfsZ5jGSwMX68G8ZXFawcSglQSXqCftWX3ec8MDUzQdHgcKvw97awHbY0efQEL5iKUOAmmVtoYgmrSG4Q== + integrity: sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== /@sinonjs/fake-timers/6.0.1: dependencies: - '@sinonjs/commons': 1.8.0 + '@sinonjs/commons': 1.8.1 dev: false resolution: integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== /@sinonjs/formatio/5.0.1: dependencies: - '@sinonjs/commons': 1.8.0 - '@sinonjs/samsam': 5.0.3 + '@sinonjs/commons': 1.8.1 + '@sinonjs/samsam': 5.1.0 dev: false resolution: integrity: sha512-KaiQ5pBf1MpS09MuA0kp6KBQt2JUOQycqVG1NZXvzeaXe5LGFqAKueIS0bw4w0P9r7KuBSVdUk5QjXsUdu2CxQ== - /@sinonjs/samsam/5.0.3: + /@sinonjs/samsam/5.1.0: dependencies: - '@sinonjs/commons': 1.8.0 + '@sinonjs/commons': 1.8.1 lodash.get: 4.4.2 type-detect: 4.0.8 dev: false resolution: - integrity: sha512-QucHkc2uMJ0pFGjJUDP3F9dq5dx8QIaqISl9QgwLOh6P9yv877uONPGXh/OH/0zmM3tW1JjuJltAZV2l7zU+uQ== + integrity: sha512-42nyaQOVunX5Pm6GRJobmzbS7iLI+fhERITnETXzzwDZh+TtDr/Au3yAvXVjFmZ4wEUaE4Y3NFZfKv0bV0cbtg== /@sinonjs/text-encoding/0.7.1: dev: false resolution: @@ -689,6 +741,10 @@ packages: dev: false resolution: integrity: sha512-VQgHxyPMTj3hIlq9SY1mctqx+Jj8kpQfoLvDlVSDNOyuYs8JYfkuY3OW/4+dO657yPmNhHpePRx0/Tje5ImNVQ== + /@types/argparse/1.0.38: + dev: false + resolution: + integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== /@types/async-lock/1.1.2: dev: false resolution: @@ -700,29 +756,29 @@ packages: /@types/body-parser/1.19.0: dependencies: '@types/connect': 3.4.33 - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== /@types/chai-as-promised/7.1.3: dependencies: - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 dev: false resolution: integrity: sha512-FQnh1ohPXJELpKhzjuDkPLR2BZCAqed+a6xV4MI/T3XzHfd2FlarfUGUdZYgqYe8oxkYn0fchHEeHfHqdZ96sg== /@types/chai-string/1.4.2: dependencies: - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 dev: false resolution: integrity: sha512-ld/1hV5qcPRGuwlPdvRfvM3Ka/iofOk2pH4VkasK4b1JJP1LjNmWWn0LsISf6RRzyhVOvs93rb9tM09e+UuF8Q== - /@types/chai/4.2.11: + /@types/chai/4.2.12: dev: false resolution: - integrity: sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw== + integrity: sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ== /@types/chalk/2.2.0: dependencies: - chalk: 4.1.0 + chalk: 3.0.0 deprecated: 'This is a stub types definition for chalk (https://github.com/chalk/chalk). chalk provides its own type definitions, so you don''t need @types/chalk installed!' dev: false resolution: @@ -733,7 +789,7 @@ packages: integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== /@types/connect/3.4.33: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A== @@ -760,20 +816,20 @@ packages: dev: false resolution: integrity: sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== - /@types/express-serve-static-core/4.17.8: + /@types/express-serve-static-core/4.17.9: dependencies: - '@types/node': 8.10.61 - '@types/qs': 6.9.3 + '@types/node': 8.10.62 + '@types/qs': 6.9.4 '@types/range-parser': 1.2.3 dev: false resolution: - integrity: sha512-1SJZ+R3Q/7mLkOD9ewCBDYD2k0WyZQtWYqF/2VvoNN2/uhI49J9CDN4OAm+wGMA0DbArA4ef27xl4+JwMtGggw== + integrity: sha512-DG0BYg6yO+ePW+XoDENYz8zhNGC3jDDEpComMYn7WJc4mY1Us8Rw9ax2YhJXxpyk2SF47PQAoQ0YyVT1a0bEkA== /@types/express/4.17.7: dependencies: '@types/body-parser': 1.19.0 - '@types/express-serve-static-core': 4.17.8 - '@types/qs': 6.9.3 - '@types/serve-static': 1.13.4 + '@types/express-serve-static-core': 4.17.9 + '@types/qs': 6.9.4 + '@types/serve-static': 1.13.5 dev: false resolution: integrity: sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ== @@ -783,20 +839,20 @@ packages: integrity: sha512-mky/O83TXmGY39P1H9YbUpjV6l6voRYlufqfFCvel8l1phuy8HRjdWc1rrPuN53ITBJlbyMSV6z3niOySO5pgQ== /@types/fs-extra/8.1.1: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w== /@types/glob/7.1.3: dependencies: '@types/minimatch': 3.0.3 - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== /@types/is-buffer/2.0.0: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-0f7N/e3BAz32qDYvgB4d2cqv1DqUwvGxHkXsrucICn8la1Vb6Yl6Eg8mPScGwUiqHJeE7diXlzaK+QMA9m4Gxw== @@ -818,24 +874,28 @@ packages: integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4= /@types/jws/3.2.2: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-S0ohSSX8ioT65zu8KbG99xKyFV3InIjbM3c8roYqWy4+5HpYPyUHLYykfhM6MEI5B/3s7KSZPGFyCzCrZ2TOZA== + /@types/jwt-decode/2.2.1: + dev: false + resolution: + integrity: sha512-aWw2YTtAdT7CskFyxEX2K21/zSDStuf/ikI3yBqmwpwJF0pS+/IX5DWv+1UFffZIbruP6cnT9/LAJV1gFwAT1A== /@types/long/4.0.1: dev: false resolution: integrity: sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== /@types/md5/2.2.0: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-JN8OVL/wiDlCWTPzplsgMPu0uE9Q6blwp68rYsfk2G8aokRUQ8XD9MEhZwihfAiQvoyE+m31m6i3GFXwYWomKQ== - /@types/mime/2.0.2: + /@types/mime/2.0.3: dev: false resolution: - integrity: sha512-4kPlzbljFcsttWEq6aBW0OZe6BDajAmyvr2xknBG92tejQnvdGtT9+kXSZ580DqpxY9qG2xeQVF9Dq0ymUTo5Q== + integrity: sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== /@types/minimatch/3.0.3: dev: false resolution: @@ -850,13 +910,13 @@ packages: integrity: sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w== /@types/mock-fs/4.10.0: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-FQ5alSzmHMmliqcL36JqIA4Yyn9jyJKvRSGV3mvPh108VFatX7naJDzSG4fnFQNZFq9dIx0Dzoe6ddflMB2Xkg== /@types/mock-require/2.0.0: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-nOgjoE5bBiDeiA+z41i95makyHUSMWQMOPocP+J67Pqx/68HAXaeWN1NFtrAYYV6LrISIZZ8vKHm/a50k0f6Sg== @@ -866,7 +926,7 @@ packages: integrity: sha512-DPxmjiDwubsNmguG5X4fEJ+XCyzWM3GXWsqQlvUcjJKa91IOoJUy51meDr0GkzK64qqNcq85ymLlyjoct9tInw== /@types/node-fetch/2.5.7: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 form-data: 3.0.0 dev: false resolution: @@ -875,10 +935,14 @@ packages: dev: false resolution: integrity: sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg== - /@types/node/8.10.61: + /@types/node/10.17.28: + dev: false + resolution: + integrity: sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ== + /@types/node/8.10.62: dev: false resolution: - integrity: sha512-l+zSbvT8TPRaCxL1l9cwHCb0tSqGAGcjPJFItGGYat5oCTiq1uQQKYg5m7AF1mgnEBzFXGLJ2LRmNjtreRX76Q== + integrity: sha512-76fupxOYVxk36kb7O/6KtrAPZ9jnSK3+qisAX4tQMEuGNdlvl7ycwatlHqjoE6jHfVtXFM3pCrCixZOidc5cuw== /@types/prettier/2.0.2: dev: false resolution: @@ -887,10 +951,10 @@ packages: dev: false resolution: integrity: sha1-bqrDJHpMXO/JRILl2Hw3MLNfUFM= - /@types/qs/6.9.3: + /@types/qs/6.9.4: dev: false resolution: - integrity: sha512-7s9EQWupR1fTc2pSMtXRQ9w9gLOcrJn+h7HOXw4evxyvVqMi4f+q7d2tnFe3ng3SNHjtK+0EzGMGFUQX4/AQRA== + integrity: sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ== /@types/query-string/6.2.0: dev: false resolution: @@ -899,29 +963,50 @@ packages: dev: false resolution: integrity: sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== - /@types/resolve/0.0.8: + /@types/resolve/1.17.1: dependencies: '@types/node': 10.17.13 dev: false resolution: - integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + /@types/rollup-plugin-node-builtins/2.1.1: + dependencies: + '@types/node': 10.17.28 + rollup: 0.63.5 + dev: false + resolution: + integrity: sha512-1LlOG2TMdv2fP+OVkqUk1mdGwEPfWBLv9BlGu8dkaSiJtMMkCY0C4FAa70m2+BipmtTYs5N9JAef2aCzatNp0w== + /@types/rollup-plugin-node-globals/1.4.0: + dependencies: + '@types/node': 10.17.28 + rollup: 0.63.5 + dev: false + resolution: + integrity: sha512-C/M+PCe+Up1nrdo8PTa2tGr6ppOVLWkKni2haYU55kWDBybwMupptV9MeghQLzu262aKsuWdzMjsfduSZt6A2w== + /@types/rollup-plugin-sourcemaps/0.4.2: + dependencies: + '@types/node': 10.17.28 + rollup: 0.63.5 + dev: false + resolution: + integrity: sha512-dqF1rMFy4O8yNlQYwYPos5Cfav0f6M7PLH8B33gsslQ0zA9MX1jMGokwNuJ3Z3EXAzsKF/xAWNHpFmELcgYJww== /@types/semaphore/1.1.0: dev: false resolution: integrity: sha512-YD+lyrPhrsJdSOaxmA9K1lzsCoN0J29IsQGMKd67SbkPDXxJPdwdqpok1sytD19NEozUaFpjIsKOWnJDOYO/GA== - /@types/serve-static/1.13.4: + /@types/serve-static/1.13.5: dependencies: - '@types/express-serve-static-core': 4.17.8 - '@types/mime': 2.0.2 + '@types/express-serve-static-core': 4.17.9 + '@types/mime': 2.0.3 dev: false resolution: - integrity: sha512-jTDt0o/YbpNwZbQmE/+2e+lfjJEJJR0I3OFaKQKPWkASkCoW3i6fsUnqudSMcNAfbtmADGu8f4MV4q+GqULmug== - /@types/sinon/9.0.4: + integrity: sha512-6M64P58N+OXjU432WoLLBQxbA0LRGBCRm7aAGQJ+SMC1IMl0dgRVi9EFfoDcS2a7Xogygk/eGN94CfwU9UF7UQ== + /@types/sinon/9.0.5: dependencies: '@types/sinonjs__fake-timers': 6.0.1 dev: false resolution: - integrity: sha512-sJmb32asJZY6Z2u09bl0G2wglSxDlROlAejCjsnor+LzBMz17gu8IU7vKC/vWDnv9zEq2wqADHVXFjf4eE8Gdw== + integrity: sha512-4CnkGdM/5/FXDGqL32JQ1ttVrGvhOoesLLF7VnTh4KdjK5N5VQOtxaylFqqTjnHx55MnD9O02Nbk5c1ELC8wlQ== /@types/sinonjs__fake-timers/6.0.1: dev: false resolution: @@ -932,33 +1017,33 @@ packages: integrity: sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A== /@types/tunnel/0.0.0: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-FGDp0iBRiBdPjOgjJmn1NH0KDLN+Z8fRmo+9J7XGBhubq1DPrGrbmG4UTlGzrpbCpesMqD0sWkzi27EYkOMHyg== /@types/tunnel/0.0.1: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-AOqu6bQu5MSWwYvehMXLukFHnupHrpZ8nvgae5Ggie9UwzDR1CCwoXgSSWNZJuyOlCdfdsWMA5F2LlmvyoTv8A== - /@types/underscore/1.10.5: + /@types/underscore/1.10.22: dev: false resolution: - integrity: sha512-4pI77A5w5QjFFMlEDkcMYN/B3cWACYV++J2wYT15+WcB/om3YJVejzi6i++e/13J7G4rDGNX4HR6QVq9h8fOVQ== - /@types/uuid/8.0.0: + integrity: sha512-fiJulOOmc747q+mZwBtLyBu6yBX2uI4biuQ1Y3JvcU7YjmdOEOracUXTiET/PAWI2hhoUH1t4HbwJj42YEnbkg== + /@types/uuid/8.3.0: dev: false resolution: - integrity: sha512-xSQfNcvOiE5f9dyd4Kzxbof1aTrLobL278pGLKOZI6esGfZ7ts9Ka16CzIN6Y8hFHE1C7jIBZokULhK1bOgjRw== + integrity: sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== /@types/ws/7.2.6: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-Q07IrQUSNpr+cXU4E4LtkSIBPie5GLZyyMC1QtQYRLWz701+XcoVygGUZgvLqElq1nU4ICldMYPnexlBsg3dqQ== /@types/xml2js/0.4.5: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false resolution: integrity: sha512-yohU3zMn0fkhlape1nxXG2bLEGZRc1FeqF80RoHaYXJN7uibaauXfhzhOJr1Xh36sn+/tx21QAOf07b/xYVk1w== @@ -974,18 +1059,18 @@ packages: integrity: sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== /@types/yauzl/2.9.1: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 dev: false optional: true resolution: integrity: sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA== - /@typescript-eslint/eslint-plugin-tslint/2.34.0_f8f62cb1f34b48259c049dd0f60912e9: + /@typescript-eslint/eslint-plugin-tslint/2.34.0_8ecfbc9f33e253d01ca741854a1cb01c: dependencies: - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.7 eslint: 6.8.0 - lodash: 4.17.19 - tslint: 5.20.1_typescript@3.9.6 - typescript: 3.9.6 + lodash: 4.17.20 + tslint: 5.20.1_typescript@3.9.7 + typescript: 3.9.7 dev: false engines: node: ^8.10.0 || ^10.13.0 || >=11.10.1 @@ -995,15 +1080,15 @@ packages: typescript: '*' resolution: integrity: sha512-sCPCbFm1qRTzloeMUlHEKfgQH/2u9bUcW7tX5wjzRw1LWzsr+iNXS8I+2or9ep8mlqqE0Vy6hsMm4vVF82M2jw== - /@typescript-eslint/eslint-plugin/2.34.0_3787943315ebc5ea524d5c102dc9e452: + /@typescript-eslint/eslint-plugin/2.34.0_5004700905763c91177aaa7d1d0d56ac: dependencies: - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.6 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.7 + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 eslint: 6.8.0 functional-red-black-tree: 1.0.1 regexpp: 3.1.0 - tsutils: 3.17.1_typescript@3.9.6 - typescript: 3.9.6 + tsutils: 3.17.1_typescript@3.9.7 + typescript: 3.9.7 dev: false engines: node: ^8.10.0 || ^10.13.0 || >=11.10.1 @@ -1016,14 +1101,14 @@ packages: optional: true resolution: integrity: sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== - /@typescript-eslint/experimental-utils/2.34.0_eslint@6.8.0+typescript@3.9.6: + /@typescript-eslint/experimental-utils/2.34.0_eslint@6.8.0+typescript@3.9.7: dependencies: '@types/json-schema': 7.0.5 - '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.6 + '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.7 eslint: 6.8.0 eslint-scope: 5.1.0 eslint-utils: 2.1.0 - typescript: 3.9.6 + typescript: 3.9.7 dev: false engines: node: ^8.10.0 || ^10.13.0 || >=11.10.1 @@ -1032,14 +1117,14 @@ packages: typescript: '*' resolution: integrity: sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== - /@typescript-eslint/parser/2.34.0_eslint@6.8.0+typescript@3.9.6: + /@typescript-eslint/parser/2.34.0_eslint@6.8.0+typescript@3.9.7: dependencies: '@types/eslint-visitor-keys': 1.0.0 - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.6 - '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.6 + '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.7 + '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.7 eslint: 6.8.0 eslint-visitor-keys: 1.3.0 - typescript: 3.9.6 + typescript: 3.9.7 dev: false engines: node: ^8.10.0 || ^10.13.0 || >=11.10.1 @@ -1051,16 +1136,16 @@ packages: optional: true resolution: integrity: sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== - /@typescript-eslint/typescript-estree/2.34.0_typescript@3.9.6: + /@typescript-eslint/typescript-estree/2.34.0_typescript@3.9.7: dependencies: debug: 4.1.1 eslint-visitor-keys: 1.3.0 glob: 7.1.6 is-glob: 4.0.1 - lodash: 4.17.19 + lodash: 4.17.20 semver: 7.3.2 - tsutils: 3.17.1_typescript@3.9.6 - typescript: 3.9.6 + tsutils: 3.17.1_typescript@3.9.7 + typescript: 3.9.7 dev: false engines: node: ^8.10.0 || ^10.13.0 || >=11.10.1 @@ -1083,6 +1168,12 @@ packages: node: '>=6.5' resolution: integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + /abstract-leveldown/0.12.4: + dependencies: + xtend: 3.0.0 + dev: false + resolution: + integrity: sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA= /accepts/1.3.7: dependencies: mime-types: 2.1.27 @@ -1092,24 +1183,37 @@ packages: node: '>= 0.6' resolution: integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - /acorn-jsx/5.2.0_acorn@7.3.1: + /acorn-jsx/5.2.0_acorn@7.4.0: dependencies: - acorn: 7.3.1 + acorn: 7.4.0 dev: false peerDependencies: acorn: ^6.0.0 || ^7.0.0 resolution: integrity: sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== - /acorn/7.3.1: + /acorn-walk/7.2.0: + dev: false + engines: + node: '>=0.4.0' + resolution: + integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + /acorn/5.7.4: + dev: false + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + /acorn/7.4.0: dev: false engines: node: '>=0.4.0' hasBin: true resolution: - integrity: sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== + integrity: sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== /adal-node/0.1.28: dependencies: - '@types/node': 8.10.61 + '@types/node': 8.10.62 async: 3.2.0 date-utils: 1.2.21 jws: 3.2.2 @@ -1157,7 +1261,7 @@ packages: node: '>= 6.0.0' resolution: integrity: sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg== - /ajv/6.12.3: + /ajv/6.12.4: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -1165,7 +1269,7 @@ packages: uri-js: 4.2.2 dev: false resolution: - integrity: sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + integrity: sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== /amdefine/1.0.1: dev: false engines: @@ -1266,6 +1370,7 @@ packages: integrity: sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== /aproba/1.2.0: dev: false + optional: true resolution: integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== /archy/1.0.0: @@ -1277,6 +1382,7 @@ packages: delegates: 1.0.0 readable-stream: 2.3.7 dev: false + optional: true resolution: integrity: sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== /arg/4.1.0: @@ -1358,6 +1464,15 @@ packages: dev: false resolution: integrity: sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + /asn1.js/5.4.1: + dependencies: + bn.js: 4.11.9 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: false + resolution: + integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== /asn1/0.2.4: dependencies: safer-buffer: 2.1.2 @@ -1377,16 +1492,27 @@ packages: dev: false resolution: integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + /assert/2.0.0: + dependencies: + es6-object-assign: 1.1.0 + is-nan: 1.3.0 + object-is: 1.1.2 + util: 0.12.3 + dev: false + resolution: + integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== /assertion-error/1.1.0: dev: false resolution: integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - /ast-types/0.13.3: + /ast-types/0.14.1: + dependencies: + tslib: 2.0.1 dev: false engines: node: '>=4' resolution: - integrity: sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== + integrity: sha512-pfSiukbt23P1qMhNnsozLzhMLBs7EEeXqPyvPmnuZM+RMfwfqwDbSVKYflgGuVI7/VehR4oMks0igzdNAg4VeQ== /astral-regex/1.0.0: dev: false engines: @@ -1444,10 +1570,10 @@ packages: dev: false resolution: integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - /aws4/1.10.0: + /aws4/1.10.1: dev: false resolution: - integrity: sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + integrity: sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== /axios/0.19.2: dependencies: follow-redirects: 1.5.10 @@ -1537,14 +1663,20 @@ packages: node: '>=8' resolution: integrity: sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== - /bl/4.0.2: + /bl/0.8.2: + dependencies: + readable-stream: 1.0.34 + dev: false + resolution: + integrity: sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4= + /bl/4.0.3: dependencies: buffer: 5.6.0 inherits: 2.0.4 readable-stream: 3.6.0 dev: false resolution: - integrity: sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== + integrity: sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== /blob/0.0.5: dev: false resolution: @@ -1553,6 +1685,14 @@ packages: dev: false resolution: integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + /bn.js/4.11.9: + dev: false + resolution: + integrity: sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + /bn.js/5.1.3: + dev: false + resolution: + integrity: sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== /body-parser/1.19.0: dependencies: bytes: 3.1.0 @@ -1585,14 +1725,87 @@ packages: node: '>=8' resolution: integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + /brorand/1.1.0: + dev: false + resolution: + integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + /browser-resolve/1.11.3: + dependencies: + resolve: 1.1.7 + dev: false + resolution: + integrity: sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== /browser-stdout/1.3.1: dev: false resolution: integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + /browserify-aes/1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + /browserify-cipher/1.0.1: + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: false + resolution: + integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + /browserify-des/1.0.2: + dependencies: + cipher-base: 1.0.4 + des.js: 1.0.1 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + /browserify-fs/1.0.0: + dependencies: + level-filesystem: 1.2.0 + level-js: 2.2.4 + levelup: 0.18.6 + dev: false + resolution: + integrity: sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8= /browserify-mime/1.2.9: dev: false resolution: integrity: sha1-rrGvKN5sDXpqLOQK22j/GEIq8x8= + /browserify-rsa/4.0.1: + dependencies: + bn.js: 4.11.9 + randombytes: 2.1.0 + dev: false + resolution: + integrity: sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + /browserify-sign/4.2.1: + dependencies: + bn.js: 5.1.3 + browserify-rsa: 4.0.1 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.3 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + /browserify-zlib/0.2.0: + dependencies: + pako: 1.0.11 + dev: false + resolution: + integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== /buffer-crc32/0.2.13: dev: false resolution: @@ -1601,10 +1814,18 @@ packages: dev: false resolution: integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + /buffer-es6/4.9.3: + dev: false + resolution: + integrity: sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ= /buffer-from/1.1.1: dev: false resolution: integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + /buffer-xor/1.0.3: + dev: false + resolution: + integrity: sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= /buffer/5.6.0: dependencies: base64-js: 1.3.1 @@ -1624,6 +1845,10 @@ packages: node: '>=6' resolution: integrity: sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + /builtin-status-codes/3.0.0: + dev: false + resolution: + integrity: sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= /bytes/3.1.0: dev: false engines: @@ -1643,7 +1868,7 @@ packages: rimraf: 3.0.2 test-exclude: 6.0.0 v8-to-istanbul: 5.0.1 - yargs: 15.4.0 + yargs: 15.4.1 yargs-parser: 18.1.3 dev: false engines: @@ -1761,7 +1986,7 @@ packages: /chalk/3.0.0: dependencies: ansi-styles: 4.2.1 - supports-color: 7.1.0 + supports-color: 7.2.0 dev: false engines: node: '>=8' @@ -1770,7 +1995,7 @@ packages: /chalk/4.1.0: dependencies: ansi-styles: 4.2.1 - supports-color: 7.1.0 + supports-color: 7.2.0 dev: false engines: node: '>=10' @@ -1810,7 +2035,7 @@ packages: fsevents: 2.1.3 resolution: integrity: sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - /chokidar/3.4.0: + /chokidar/3.4.2: dependencies: anymatch: 3.1.1 braces: 3.0.2 @@ -1825,7 +2050,7 @@ packages: optionalDependencies: fsevents: 2.1.3 resolution: - integrity: sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + integrity: sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== /chownr/1.1.4: dev: false resolution: @@ -1834,6 +2059,13 @@ packages: dev: false resolution: integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + /cipher-base/1.0.4: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== /cli-cursor/3.1.0: dependencies: restore-cursor: 3.1.0 @@ -1868,6 +2100,10 @@ packages: dev: false resolution: integrity: sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE= + /clone/0.1.19: + dev: false + resolution: + integrity: sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU= /clone/1.0.4: dev: false engines: @@ -1885,6 +2121,7 @@ packages: dev: false engines: node: '>=0.10.0' + optional: true resolution: integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= /color-convert/1.9.3: @@ -1926,6 +2163,15 @@ packages: node: '>=0.1.90' resolution: integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + /combine-source-map/0.8.0: + dependencies: + convert-source-map: 1.1.3 + inline-source-map: 0.6.2 + lodash.memoize: 3.0.4 + source-map: 0.5.7 + dev: false + resolution: + integrity: sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= /combined-stream/1.0.8: dependencies: delayed-stream: 1.0.0 @@ -1968,6 +2214,17 @@ packages: dev: false resolution: integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /concat-stream/1.6.2: + dependencies: + buffer-from: 1.1.1 + inherits: 2.0.4 + readable-stream: 2.3.7 + typedarray: 0.0.6 + dev: false + engines: + '0': node >= 0.8 + resolution: + integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== /connect/3.7.0: dependencies: debug: 2.6.9 @@ -1979,10 +2236,19 @@ packages: node: '>= 0.10.0' resolution: integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + /console-browserify/1.2.0: + dev: false + resolution: + integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== /console-control-strings/1.1.0: dev: false + optional: true resolution: integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + /constants-browserify/1.0.0: + dev: false + resolution: + integrity: sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= /contains-path/0.1.0: dev: false engines: @@ -2003,6 +2269,10 @@ packages: node: '>= 0.6' resolution: integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + /convert-source-map/1.1.3: + dev: false + resolution: + integrity: sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= /convert-source-map/1.7.0: dependencies: safe-buffer: 5.1.2 @@ -2025,11 +2295,6 @@ packages: node: '>= 0.6' resolution: integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - /core-js-pure/3.6.5: - dev: false - requiresBuild: true - resolution: - integrity: sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== /core-js/2.6.11: deprecated: 'core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.' dev: false @@ -2057,6 +2322,34 @@ packages: node: '>=6' resolution: integrity: sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA== + /create-ecdh/4.0.4: + dependencies: + bn.js: 4.11.9 + elliptic: 6.5.3 + dev: false + resolution: + integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + /create-hash/1.2.0: + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: false + resolution: + integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + /create-hmac/1.1.7: + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: false + resolution: + integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== /cross-env/7.0.2: dependencies: cross-spawn: 7.0.3 @@ -2101,6 +2394,22 @@ packages: dev: false resolution: integrity: sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + /crypto-browserify/3.12.0: + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.1 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.1 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: false + resolution: + integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== /currently-unhandled/0.4.1: dependencies: array-find-index: 1.0.2 @@ -2189,14 +2498,6 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - /decamelize/3.2.0: - dependencies: - xregexp: 4.3.0 - dev: false - engines: - node: '>=6' - resolution: - integrity: sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw== /decode-uri-component/0.2.0: dev: false engines: @@ -2209,6 +2510,7 @@ packages: dev: false engines: node: '>=8' + optional: true resolution: integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== /deep-eql/3.0.1: @@ -2223,6 +2525,7 @@ packages: dev: false engines: node: '>=4.0.0' + optional: true resolution: integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== /deep-freeze/0.0.1: @@ -2247,6 +2550,18 @@ packages: node: '>=4' resolution: integrity: sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= + /defaults/1.0.3: + dependencies: + clone: 1.0.4 + dev: false + resolution: + integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + /deferred-leveldown/0.2.0: + dependencies: + abstract-leveldown: 0.12.4 + dev: false + resolution: + integrity: sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ= /define-properties/1.1.3: dependencies: object-keys: 1.1.1 @@ -2257,18 +2572,18 @@ packages: integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== /degenerator/1.0.4: dependencies: - ast-types: 0.13.3 + ast-types: 0.14.1 escodegen: 1.14.3 esprima: 3.1.3 dev: false resolution: integrity: sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= - /delay/4.3.0: + /delay/4.4.0: dev: false engines: node: '>=6' resolution: - integrity: sha512-Lwaf3zVFDMBop1yDuFZ19F9WyGcZcGacsbdlZtWjQmM50tOcMntm1njF/Nb/Vjij3KaSvCF+sEYGKrrjObu2NA== + integrity: sha512-txgOrJu3OdtOfTiEOT2e76dJVfG/1dz2NZ4F0Pyt4UGZJryssMRp5vdM5wQoLwSOBNdrJv3F9PAhp/heqd7vrA== /delayed-stream/1.0.0: dev: false engines: @@ -2277,6 +2592,7 @@ packages: integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk= /delegates/1.0.0: dev: false + optional: true resolution: integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= /depd/1.1.2: @@ -2285,6 +2601,13 @@ packages: node: '>= 0.6' resolution: integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + /des.js/1.0.1: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + resolution: + integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== /destroy/1.0.4: dev: false resolution: @@ -2294,6 +2617,7 @@ packages: engines: node: '>=0.10' hasBin: true + optional: true resolution: integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= /di/0.0.1: @@ -2312,6 +2636,14 @@ packages: node: '>=0.3.1' resolution: integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + /diffie-hellman/5.0.3: + dependencies: + bn.js: 4.11.9 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: false + resolution: + integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== /disparity/3.0.0: dependencies: ansi-styles: 4.2.1 @@ -2352,6 +2684,12 @@ packages: dev: false resolution: integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + /domain-browser/4.17.0: + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-Hj9LbFLqt4MBK/rq24/Bk3nhcPlaKfTCFs8XENVqNQray7WtKbo/GYMGDAVW62O83lgRjxvD5UCmtQsN9B/YxA== /dotenv/8.2.0: dev: false engines: @@ -2361,7 +2699,7 @@ packages: /downlevel-dts/0.4.0: dependencies: shelljs: 0.8.4 - typescript: 3.9.6 + typescript: 3.9.7 dev: false hasBin: true resolution: @@ -2393,6 +2731,18 @@ packages: dev: false resolution: integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + /elliptic/6.5.3: + dependencies: + bn.js: 4.11.9 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + resolution: + integrity: sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== /emoji-regex/7.0.3: dev: false resolution: @@ -2456,6 +2806,13 @@ packages: dev: false resolution: integrity: sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + /errno/0.1.7: + dependencies: + prr: 1.0.1 + dev: false + hasBin: true + resolution: + integrity: sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== /error-ex/1.3.2: dependencies: is-arrayish: 0.2.1 @@ -2469,7 +2826,7 @@ packages: has: 1.0.3 has-symbols: 1.0.1 is-callable: 1.2.0 - is-regex: 1.1.0 + is-regex: 1.1.1 object-inspect: 1.8.0 object-keys: 1.1.1 object.assign: 4.1.0 @@ -2651,6 +3008,14 @@ packages: eslint: '>=5.16.0' resolution: integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + /eslint-plugin-prefer-arrow/1.2.2_eslint@6.8.0: + dependencies: + eslint: 6.8.0 + dev: false + peerDependencies: + eslint: '>=2.0.0' + resolution: + integrity: sha512-C8YMhL+r8RMeMdYAw/rQtE6xNdMulj+zGWud/qIGnlmomiPRaLDGLMeskZ3alN6uMBojmooRimtdrXebLN4svQ== /eslint-plugin-prettier/3.1.4_eslint@6.8.0+prettier@1.19.1: dependencies: eslint: 6.8.0 @@ -2704,7 +3069,7 @@ packages: /eslint/6.8.0: dependencies: '@babel/code-frame': 7.10.4 - ajv: 6.12.3 + ajv: 6.12.4 chalk: 2.4.2 cross-spawn: 6.0.5 debug: 4.1.1 @@ -2722,12 +3087,12 @@ packages: ignore: 4.0.6 import-fresh: 3.2.1 imurmurhash: 0.1.4 - inquirer: 7.3.0 + inquirer: 7.3.3 is-glob: 4.0.1 js-yaml: 3.14.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.3.0 - lodash: 4.17.19 + lodash: 4.17.20 minimatch: 3.0.4 mkdirp: 0.5.5 natural-compare: 1.4.0 @@ -2736,7 +3101,7 @@ packages: regexpp: 2.0.1 semver: 6.3.0 strip-ansi: 5.2.0 - strip-json-comments: 3.1.0 + strip-json-comments: 3.1.1 table: 5.4.6 text-table: 0.2.0 v8-compile-cache: 2.1.1 @@ -2754,8 +3119,8 @@ packages: integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== /espree/6.2.1: dependencies: - acorn: 7.3.1 - acorn-jsx: 5.2.0_acorn@7.3.1 + acorn: 7.4.0 + acorn-jsx: 5.2.0_acorn@7.4.0 eslint-visitor-keys: 1.3.0 dev: false engines: @@ -2785,7 +3150,7 @@ packages: integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== /esquery/1.3.1: dependencies: - estraverse: 5.1.0 + estraverse: 5.2.0 dev: false engines: node: '>=0.10' @@ -2811,12 +3176,16 @@ packages: node: '>=4.0' resolution: integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - /estraverse/5.1.0: + /estraverse/5.2.0: dev: false engines: node: '>=4.0' resolution: - integrity: sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + /estree-walker/0.5.2: + dev: false + resolution: + integrity: sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== /estree-walker/0.6.1: dev: false resolution: @@ -2843,16 +3212,23 @@ packages: node: '>=6' resolution: integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - /eventemitter3/4.0.4: + /eventemitter3/4.0.7: dev: false resolution: - integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - /events/3.1.0: + integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + /events/3.2.0: dev: false engines: node: '>=0.8.x' resolution: - integrity: sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + integrity: sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + /evp_bytestokey/1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== /execa/1.0.0: dependencies: cross-spawn: 6.0.5 @@ -2870,12 +3246,12 @@ packages: /execa/3.4.0: dependencies: cross-spawn: 7.0.3 - get-stream: 5.1.0 + get-stream: 5.2.0 human-signals: 1.1.1 is-stream: 2.0.0 merge-stream: 2.0.0 npm-run-path: 4.0.1 - onetime: 5.1.0 + onetime: 5.1.2 p-finally: 2.0.1 signal-exit: 3.0.3 strip-final-newline: 2.0.0 @@ -2888,6 +3264,7 @@ packages: dev: false engines: node: '>=6' + optional: true resolution: integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== /expand-tilde/2.0.2: @@ -2952,7 +3329,7 @@ packages: /extract-zip/2.0.1: dependencies: debug: 4.1.1 - get-stream: 5.1.0 + get-stream: 5.2.0 yauzl: 2.10.0 dev: false engines: @@ -3005,7 +3382,7 @@ packages: dev: false resolution: integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - /fetch-mock/9.10.3_node-fetch@2.6.0: + /fetch-mock/9.10.7_node-fetch@2.6.0: dependencies: babel-runtime: 6.26.0 core-js: 3.6.5 @@ -3026,7 +3403,7 @@ packages: node-fetch: optional: true resolution: - integrity: sha512-vvTW3vu+6sgDuOpInd8VtaaYlt56Un/zrEvBmT8JppDXj2ZY3PQgIAoxqdSAFR5o/10jJ1yFBhXLQ/Dce/p+jg== + integrity: sha512-YkiMHSL8CQ0vlWYpqGvlaZjViFk0Kar9jonPjSvaWoztkeHH6DENqUzBIsffzjVKhwchPI74SZRLRpIsEyNcZQ== /figures/3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -3126,6 +3503,7 @@ packages: /flat/4.1.0: dependencies: is-buffer: 2.0.4 + deprecated: 'Fixed a prototype pollution security issue in 4.1.0, please upgrade to ^4.1.1 or ^5.0.1.' dev: false hasBin: true resolution: @@ -3138,12 +3516,12 @@ packages: dev: false resolution: integrity: sha512-+8GbtQBwEqutP0v3uajDDoN64K2ehmHd0cjlghhxh0WpcfPzAIjPA03e1VvHlxL02FVGR0A6lwXsNQKn3H1RNQ== - /follow-redirects/1.12.1: + /follow-redirects/1.13.0: dev: false engines: node: '>=4.0' resolution: - integrity: sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== + integrity: sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== /follow-redirects/1.5.10: dependencies: debug: 3.1.0 @@ -3279,6 +3657,12 @@ packages: dev: false resolution: integrity: sha512-uKuNsaU0WVaK/vmvj23wW1bicOFfyqSsAIH71bRZx8kA4Xj+YCHin7CJKJJjkIsmxYaPFLk9ljmjEyB7xF7WvQ== + /fwd-stream/1.0.4: + dependencies: + readable-stream: 1.0.34 + dev: false + resolution: + integrity: sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo= /gauge/2.7.4: dependencies: aproba: 1.2.0 @@ -3290,6 +3674,7 @@ packages: strip-ansi: 3.0.1 wide-align: 1.1.3 dev: false + optional: true resolution: integrity: sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= /gaxios/2.3.4: @@ -3353,14 +3738,14 @@ packages: node: '>=6' resolution: integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - /get-stream/5.1.0: + /get-stream/5.2.0: dependencies: pump: 3.0.0 dev: false engines: node: '>=8' resolution: - integrity: sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== /get-uri/2.0.4: dependencies: data-uri-to-buffer: 1.2.0 @@ -3380,6 +3765,7 @@ packages: integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= /github-from-package/0.0.0: dev: false + optional: true resolution: integrity: sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= /glob-parent/5.1.1: @@ -3528,7 +3914,7 @@ packages: /handlebars/4.7.6: dependencies: minimist: 1.2.5 - neo-async: 2.6.1 + neo-async: 2.6.2 source-map: 0.6.1 wordwrap: 1.0.0 dev: false @@ -3536,7 +3922,7 @@ packages: node: '>=0.4.7' hasBin: true optionalDependencies: - uglify-js: 3.10.0 + uglify-js: 3.10.2 resolution: integrity: sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== /har-schema/2.0.0: @@ -3545,15 +3931,16 @@ packages: node: '>=4' resolution: integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - /har-validator/5.1.3: + /har-validator/5.1.5: dependencies: - ajv: 6.12.3 + ajv: 6.12.4 har-schema: 2.0.0 + deprecated: this library is no longer supported dev: false engines: node: '>=6' resolution: - integrity: sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== /has-ansi/2.0.0: dependencies: ansi-regex: 2.1.1 @@ -3620,6 +4007,7 @@ packages: integrity: sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== /has-unicode/2.0.1: dev: false + optional: true resolution: integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= /has/1.0.3: @@ -3640,6 +4028,13 @@ packages: node: '>=4' resolution: integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + /hash.js/1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + resolution: + integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== /hasha/3.0.0: dependencies: is-stream: 1.1.0 @@ -3653,10 +4048,18 @@ packages: hasBin: true resolution: integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - /highlight.js/9.18.1: + /highlight.js/9.18.3: + dev: false + resolution: + integrity: sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ== + /hmac-drbg/1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 dev: false resolution: - integrity: sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg== + integrity: sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= /homedir-polyfill/1.0.3: dependencies: parse-passwd: 1.0.0 @@ -3708,8 +4111,8 @@ packages: integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== /http-proxy/1.18.1: dependencies: - eventemitter3: 4.0.4 - follow-redirects: 1.12.1 + eventemitter3: 4.0.7 + follow-redirects: 1.13.0 requires-port: 1.0.0 dev: false engines: @@ -3727,6 +4130,10 @@ packages: npm: '>=1.3.7' resolution: integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + /https-browserify/1.0.0: + dev: false + resolution: + integrity: sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= /https-proxy-agent/3.0.1: dependencies: agent-base: 4.3.0 @@ -3768,6 +4175,10 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + /idb-wrapper/1.7.2: + dev: false + resolution: + integrity: sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg== /ieee754/1.1.13: dev: false resolution: @@ -3793,6 +4204,12 @@ packages: node: '>=6' resolution: integrity: sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + /import-lazy/4.0.0: + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== /imurmurhash/0.1.4: dev: false engines: @@ -3834,7 +4251,13 @@ packages: dev: false resolution: integrity: sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - /inquirer/7.3.0: + /inline-source-map/0.6.2: + dependencies: + source-map: 0.5.7 + dev: false + resolution: + integrity: sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= + /inquirer/7.3.3: dependencies: ansi-escapes: 4.3.1 chalk: 4.1.0 @@ -3842,10 +4265,10 @@ packages: cli-width: 3.0.0 external-editor: 3.1.0 figures: 3.2.0 - lodash: 4.17.19 + lodash: 4.17.20 mute-stream: 0.0.8 run-async: 2.4.1 - rxjs: 6.6.0 + rxjs: 6.6.2 string-width: 4.2.0 strip-ansi: 6.0.0 through: 2.3.8 @@ -3853,7 +4276,7 @@ packages: engines: node: '>=8.0.0' resolution: - integrity: sha512-K+LZp6L/6eE5swqIcVXrxl21aGDU4S50gKH0/d96OMQnSBCyGyZl/oZhbkVmdp5sBoINHd4xZvFSARh2dk6DWA== + integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== /interpret/1.4.0: dev: false engines: @@ -3917,12 +4340,13 @@ packages: node: '>= 0.4' resolution: integrity: sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - /is-docker/2.0.0: + /is-docker/2.1.1: dev: false engines: node: '>=8' + hasBin: true resolution: - integrity: sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== + integrity: sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== /is-extglob/2.1.1: dev: false engines: @@ -3941,6 +4365,7 @@ packages: dev: false engines: node: '>=0.10.0' + optional: true resolution: integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs= /is-fullwidth-code-point/2.0.0: @@ -3981,26 +4406,38 @@ packages: dev: false resolution: integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + /is-nan/1.3.0: + dependencies: + define-properties: 1.1.3 + dev: false + engines: + node: '>= 0.4' + resolution: + integrity: sha512-z7bbREymOqt2CCaZVly8aC4ML3Xhfi0ekuOnjO2L8vKdl+CttdVoGZQhd4adMFAsxQ5VeRVwORs4tU8RH+HFtQ== /is-number/7.0.0: dev: false engines: node: '>=0.12.0' resolution: integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + /is-object/0.1.2: + dev: false + resolution: + integrity: sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc= /is-reference/1.2.1: dependencies: '@types/estree': 0.0.45 dev: false resolution: integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - /is-regex/1.1.0: + /is-regex/1.1.1: dependencies: has-symbols: 1.0.1 dev: false engines: node: '>= 0.4' resolution: - integrity: sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + integrity: sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== /is-stream/1.1.0: dev: false engines: @@ -4064,12 +4501,16 @@ packages: integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== /is-wsl/2.2.0: dependencies: - is-docker: 2.0.0 + is-docker: 2.1.1 dev: false engines: node: '>=8' resolution: integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + /is/0.2.7: + dev: false + resolution: + integrity: sha1-OzSixI81mXLzUEKEkZOucmS2NWI= /isarray/0.0.1: dev: false resolution: @@ -4088,6 +4529,10 @@ packages: node: '>= 8.0.0' resolution: integrity: sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg== + /isbuffer/0.0.0: + dev: false + resolution: + integrity: sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s= /isexe/2.0.0: dev: false resolution: @@ -4118,11 +4563,11 @@ packages: integrity: sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== /istanbul-lib-instrument/3.3.0: dependencies: - '@babel/generator': 7.10.4 - '@babel/parser': 7.10.4 + '@babel/generator': 7.11.4 + '@babel/parser': 7.11.4 '@babel/template': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/traverse': 7.11.0 + '@babel/types': 7.11.0 istanbul-lib-coverage: 2.0.5 semver: 6.3.0 dev: false @@ -4132,7 +4577,7 @@ packages: integrity: sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== /istanbul-lib-instrument/4.0.3: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.11.4 '@istanbuljs/schema': 0.1.2 istanbul-lib-coverage: 3.0.0 semver: 6.3.0 @@ -4155,7 +4600,7 @@ packages: dependencies: istanbul-lib-coverage: 3.0.0 make-dir: 3.1.0 - supports-color: 7.1.0 + supports-color: 7.2.0 dev: false engines: node: '>=8' @@ -4372,13 +4817,14 @@ packages: resolution: integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= /jssha/2.4.2: + deprecated: jsSHA versions < 3.0.0 will no longer receive feature updates dev: false resolution: integrity: sha512-/jsi/9C0S70zfkT/4UlKQa5E1xKurDnXcQizcww9JSR/Fv+uIbWM2btG+bFcL3iNoK9jIGS0ls9HWLr1iw0kFg== - /jssha/3.1.0: + /jssha/3.1.2: dev: false resolution: - integrity: sha512-tPCmr8xSLd8ug6N51k0rbF1tAQWZz1i/uCVHpCH9dl+Te+wM/T375R3lTexP3bk1HPmQ+NlJHQPYLmYuyk6slA== + integrity: sha512-6fEObA9he4vcCpz+dt9b5DjqhqvSsz9XMfNPU6/IyKHDQpCHsYayPRkWmAZG61lZC9XVJcjsQNAiUUd0NpskeQ== /just-extend/4.1.0: dev: false resolution: @@ -4413,6 +4859,10 @@ packages: dev: false resolution: integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + /jwt-decode/2.2.0: + dev: false + resolution: + integrity: sha1-fYa9VmefWM5qhHBKZX3TkruoGnk= /karma-chai/0.1.0_chai@4.2.0+karma@5.1.1: dependencies: chai: 4.2.0 @@ -4429,7 +4879,7 @@ packages: dev: false resolution: integrity: sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== - /karma-coverage/2.0.2: + /karma-coverage/2.0.3: dependencies: istanbul-lib-coverage: 3.0.0 istanbul-lib-instrument: 4.0.3 @@ -4441,7 +4891,7 @@ packages: engines: node: '>=10.0.0' resolution: - integrity: sha512-zge5qiGEIKDdzWciQwP4p0LSac4k/L6VfrBsERMUn5mpDvxhv1sPVOrSlpzpi70T7NhuEy4bgnpAKIYuumIMCw== + integrity: sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g== /karma-edge-launcher/0.4.2_karma@5.1.1: dependencies: edge-launcher: 1.2.2 @@ -4466,7 +4916,7 @@ packages: /karma-ie-launcher/1.0.0_karma@5.1.1: dependencies: karma: 5.1.1 - lodash: 4.17.19 + lodash: 4.17.20 dev: false peerDependencies: karma: '>=0.9' @@ -4527,7 +4977,7 @@ packages: integrity: sha1-l/O3cAZSVPm0ck8tm+SjouG69vw= /karma-rollup-preprocessor/7.0.5_rollup@1.32.1: dependencies: - chokidar: 3.4.0 + chokidar: 3.4.2 debounce: 1.2.0 rollup: 1.32.1 dev: false @@ -4537,17 +4987,76 @@ packages: rollup: '>= 1.0.0' resolution: integrity: sha512-VhZI81l8LZBvBrSf4xaojsbur7bcycsSlxXkYaTOjV6DQwx1gtAM0CQVdue7LuIbXB1AohYIg0S5at+dqDtMxQ== - /karma-sourcemap-loader/0.3.7: + /karma-source-map-support/1.4.0: + dependencies: + source-map-support: 0.5.19 + dev: false + resolution: + integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A== + /karma-sourcemap-loader/0.3.8: dependencies: graceful-fs: 4.2.4 dev: false resolution: - integrity: sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg= + integrity: sha512-zorxyAakYZuBcHRJE+vbrK2o2JXLFWK8VVjiT/6P+ltLBUGUvqTEkUiQ119MGdOrK7mrmxXHZF1/pfT6GgIZ6g== + /karma-typescript/5.0.3_karma@5.1.1+typescript@3.9.7: + dependencies: + acorn: 7.4.0 + acorn-walk: 7.2.0 + assert: 2.0.0 + async: 3.2.0 + browser-resolve: 1.11.3 + browserify-zlib: 0.2.0 + buffer: 5.6.0 + combine-source-map: 0.8.0 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + convert-source-map: 1.7.0 + crypto-browserify: 3.12.0 + diff: 4.0.2 + domain-browser: 4.17.0 + events: 3.2.0 + glob: 7.1.6 + https-browserify: 1.0.0 + istanbul-lib-coverage: 3.0.0 + istanbul-lib-instrument: 4.0.3 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.0 + istanbul-reports: 3.0.2 + json-stringify-safe: 5.0.1 + karma: 5.1.1 + lodash: 4.17.20 + log4js: 6.3.0 + minimatch: 3.0.4 + os-browserify: 0.3.0 + pad: 3.2.0 + path-browserify: 1.0.1 + process: 0.11.10 + punycode: 2.1.1 + querystring-es3: 0.2.1 + readable-stream: 3.6.0 + source-map: 0.7.3 + stream-browserify: 2.0.2 + stream-http: 3.1.1 + string_decoder: 1.3.0 + timers-browserify: 2.0.11 + tmp: 0.1.0 + tty-browserify: 0.0.1 + typescript: 3.9.7 + url: 0.11.0 + util: 0.12.3 + vm-browserify: 1.1.2 + dev: false + peerDependencies: + karma: 1 || 2 || 3 || 4 || 5 + typescript: 1 || 2 || 3 + resolution: + integrity: sha512-Irs767Oc5BCMPLbZ+VdJmIxLL+1fB3L9dye8oQHDfHXFuYBx+uir5FDLzNNXFgDRUMYxEFT1T1eucAcb56v+0A== /karma/5.1.1: dependencies: body-parser: 1.19.0 braces: 3.0.2 - chokidar: 3.4.0 + chokidar: 3.4.2 colors: 1.4.0 connect: 3.7.0 di: 0.0.1 @@ -4557,7 +5066,7 @@ packages: graceful-fs: 4.2.4 http-proxy: 1.18.1 isbinaryfile: 4.0.6 - lodash: 4.17.19 + lodash: 4.17.20 log4js: 6.3.0 mime: 2.4.6 minimatch: 3.0.4 @@ -4568,7 +5077,7 @@ packages: source-map: 0.6.1 tmp: 0.2.1 ua-parser-js: 0.7.21 - yargs: 15.4.0 + yargs: 15.4.1 dev: false engines: node: '>= 10' @@ -4580,6 +5089,7 @@ packages: nan: 2.14.1 prebuild-install: 5.3.3 dev: false + optional: true requiresBuild: true resolution: integrity: sha512-ueulhshHSGoryfRXaIvTj0BV1yB0KddBGhGoqCxSN9LR1Ks1GKuuCdVhF+2/YOs5fMl6MlTI9On1a4DHDXoTow== @@ -4589,6 +5099,82 @@ packages: node: '> 0.8' resolution: integrity: sha1-eZllXoZGwX8In90YfRUNMyTVRRM= + /level-blobs/0.1.7: + dependencies: + level-peek: 1.0.6 + once: 1.4.0 + readable-stream: 1.1.14 + dev: false + resolution: + integrity: sha1-mrm5e7mfHtv594o0M+Ie1WOGva8= + /level-filesystem/1.2.0: + dependencies: + concat-stream: 1.6.2 + errno: 0.1.7 + fwd-stream: 1.0.4 + level-blobs: 0.1.7 + level-peek: 1.0.6 + level-sublevel: 5.2.3 + octal: 1.0.0 + once: 1.4.0 + xtend: 2.2.0 + dev: false + resolution: + integrity: sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M= + /level-fix-range/1.0.2: + dev: false + resolution: + integrity: sha1-vxW5Fa422EcMgh6IPd95zRZCCCg= + /level-fix-range/2.0.0: + dependencies: + clone: 0.1.19 + dev: false + resolution: + integrity: sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug= + /level-hooks/4.5.0: + dependencies: + string-range: 1.2.2 + dev: false + resolution: + integrity: sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM= + /level-js/2.2.4: + dependencies: + abstract-leveldown: 0.12.4 + idb-wrapper: 1.7.2 + isbuffer: 0.0.0 + ltgt: 2.2.1 + typedarray-to-buffer: 1.0.4 + xtend: 2.1.2 + dev: false + resolution: + integrity: sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc= + /level-peek/1.0.6: + dependencies: + level-fix-range: 1.0.2 + dev: false + resolution: + integrity: sha1-vsUccqgu5GTTNkNMfIdsP8vM538= + /level-sublevel/5.2.3: + dependencies: + level-fix-range: 2.0.0 + level-hooks: 4.5.0 + string-range: 1.2.2 + xtend: 2.0.6 + dev: false + resolution: + integrity: sha1-dEwSxy0ucr543eO5tc2E1iGRQTo= + /levelup/0.18.6: + dependencies: + bl: 0.8.2 + deferred-leveldown: 0.2.0 + errno: 0.1.7 + prr: 0.0.0 + readable-stream: 1.0.34 + semver: 2.3.2 + xtend: 3.0.0 + dev: false + resolution: + integrity: sha1-5qAcsIlhbI7MApHCqb0/DETj5es= /levn/0.3.0: dependencies: prelude-ls: 1.1.2 @@ -4752,6 +5338,10 @@ packages: dev: false resolution: integrity: sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= + /lodash.memoize/3.0.4: + dev: false + resolution: + integrity: sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= /lodash.once/4.1.1: dev: false resolution: @@ -4785,10 +5375,10 @@ packages: dev: false resolution: integrity: sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU= - /lodash/4.17.19: + /lodash/4.17.20: dev: false resolution: - integrity: sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== /log-symbols/2.2.0: dependencies: chalk: 2.4.2 @@ -4843,16 +5433,26 @@ packages: dev: false resolution: integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - /lunr/2.3.8: + /ltgt/2.2.1: + dev: false + resolution: + integrity: sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= + /lunr/2.3.9: dev: false resolution: - integrity: sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg== - /macos-release/2.4.0: + integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + /macos-release/2.4.1: dev: false engines: node: '>=6' resolution: - integrity: sha512-ko6deozZYiAkqa/0gmcsz+p4jSy3gY7/ZsCEokPaYd8k+6/aXGkiTgr61+Owup7Sf+xjqW8u2ElhoM9SEcEfuA== + integrity: sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg== + /magic-string/0.22.5: + dependencies: + vlq: 0.2.3 + dev: false + resolution: + integrity: sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== /magic-string/0.25.7: dependencies: sourcemap-codec: 1.4.8 @@ -4913,14 +5513,22 @@ packages: dev: false resolution: integrity: sha1-6b296UogpawYsENA/Fdk1bCdkB0= - /md5/2.2.1: + /md5.js/1.3.5: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + /md5/2.3.0: dependencies: charenc: 0.0.2 crypt: 0.0.2 is-buffer: 1.1.6 dev: false resolution: - integrity: sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= + integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== /media-typer/0.3.0: dev: false engines: @@ -4970,6 +5578,14 @@ packages: node: '>= 0.6' resolution: integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + /miller-rabin/4.0.1: + dependencies: + bn.js: 4.11.9 + brorand: 1.1.0 + dev: false + hasBin: true + resolution: + integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== /mime-db/1.44.0: dev: false engines: @@ -5008,6 +5624,7 @@ packages: dev: false engines: node: '>=8' + optional: true resolution: integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== /min-document/2.19.0: @@ -5016,6 +5633,14 @@ packages: dev: false resolution: integrity: sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + /minimalistic-assert/1.0.1: + dev: false + resolution: + integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + /minimalistic-crypto-utils/1.0.1: + dev: false + resolution: + integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= /minimatch/3.0.4: dependencies: brace-expansion: 1.1.11 @@ -5052,7 +5677,7 @@ packages: /mocha-junit-reporter/1.23.3_mocha@7.2.0: dependencies: debug: 2.6.9 - md5: 2.2.1 + md5: 2.3.0 mkdirp: 0.5.5 mocha: 7.2.0 strip-ansi: 4.0.0 @@ -5094,10 +5719,10 @@ packages: hasBin: true resolution: integrity: sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - /mock-fs/4.12.0: + /mock-fs/4.13.0: dev: false resolution: - integrity: sha512-/P/HtrlvBxY4o/PzXY9cCNBrdylDNxg7gnrv2sMNxj+UJ2m8jSpl0/A6fuJeNAWr99ZvGWH8XCbE0vmnM5KupQ== + integrity: sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== /mock-require/3.0.3: dependencies: get-caller-file: 1.0.3 @@ -5123,14 +5748,14 @@ packages: dev: false resolution: integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - /msal/1.3.2: + /msal/1.4.0: dependencies: tslib: 1.13.0 dev: false engines: node: '>=0.8.0' resolution: - integrity: sha512-vhcpM/ELL+UI7i4HzCegcbSfPMLqf3kp8mAT840bK1ZaDcb7Z1mOJik1jg202V0yfnh/bBPxZhQP6xFgD9g5eA== + integrity: sha512-NTxMFQh6t5g2QWMlvZTWTxL1bmcqiCv0cs2lxTHhUbWEuxWCfvaVRZfjxN8i+T0VltVVGaVIdML8QEoBnlbaSw== /multipipe/0.1.2: dependencies: duplexer2: 0.0.2 @@ -5143,17 +5768,19 @@ packages: integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== /nan/2.14.1: dev: false + optional: true resolution: integrity: sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== - /nanoid/3.1.10: + /nanoid/3.1.12: dev: false engines: node: ^10 || ^12 || >=13.7 hasBin: true resolution: - integrity: sha512-iZFMXKeXWkxzlfmMfM91gw7YhN2sdJtixY+eZh9V6QWJWTOiurhpKhBMgr82pfzgSqglQgqYSCowEYsz8D++6w== + integrity: sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== /napi-build-utils/1.0.2: dev: false + optional: true resolution: integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== /natural-compare/1.4.0: @@ -5166,10 +5793,10 @@ packages: node: '>= 0.6' resolution: integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - /neo-async/2.6.1: + /neo-async/2.6.2: dev: false resolution: - integrity: sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== /nested-error-stacks/2.1.0: dev: false resolution: @@ -5186,7 +5813,7 @@ packages: integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== /nise/4.0.4: dependencies: - '@sinonjs/commons': 1.8.0 + '@sinonjs/commons': 1.8.1 '@sinonjs/fake-timers': 6.0.1 '@sinonjs/text-encoding': 0.7.1 just-extend: 4.1.0 @@ -5198,19 +5825,20 @@ packages: dependencies: debug: 4.1.1 json-stringify-safe: 5.0.1 - lodash: 4.17.19 + lodash: 4.17.20 propagate: 2.0.1 dev: false engines: node: '>= 10.13' resolution: integrity: sha512-QNb/j8kbFnKCiyqi9C5DD0jH/FubFGj5rt9NQFONXwQm3IPB0CULECg/eS3AU1KgZb/6SwUa4/DTRKhVxkGABw== - /node-abi/2.18.0: + /node-abi/2.19.1: dependencies: semver: 5.7.1 dev: false + optional: true resolution: - integrity: sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw== + integrity: sha512-HbtmIuByq44yhAzK7b9j/FelKlHYISKQn0mtvcBrU5QBkhoCMp5bu8Hv5AI34DcKfOAcJBcOEMwLlwO62FFu9A== /node-abort-controller/1.1.0: dev: false resolution: @@ -5230,6 +5858,7 @@ packages: integrity: sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== /noop-logger/0.1.1: dev: false + optional: true resolution: integrity: sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= /nopt/3.0.6: @@ -5302,12 +5931,14 @@ packages: gauge: 2.7.4 set-blocking: 2.0.0 dev: false + optional: true resolution: integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== /number-is-nan/1.0.1: dev: false engines: node: '>=0.10.0' + optional: true resolution: integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= /nyc/14.1.1: @@ -5367,6 +5998,28 @@ packages: dev: false resolution: integrity: sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + /object-is/1.1.2: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + dev: false + engines: + node: '>= 0.4' + resolution: + integrity: sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + /object-keys/0.2.0: + dependencies: + foreach: 2.0.5 + indexof: 0.0.1 + is: 0.2.7 + deprecated: Please update to the latest object-keys + dev: false + resolution: + integrity: sha1-zd7AKZiwkb5CvxA1rjLknxy26mc= + /object-keys/0.4.0: + dev: false + resolution: + integrity: sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= /object-keys/1.1.1: dev: false engines: @@ -5404,6 +6057,10 @@ packages: node: '>= 0.4' resolution: integrity: sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + /octal/1.0.0: + dev: false + resolution: + integrity: sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws= /on-finished/2.3.0: dependencies: ee-first: 1.1.1 @@ -5418,23 +6075,23 @@ packages: dev: false resolution: integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - /onetime/5.1.0: + /onetime/5.1.2: dependencies: mimic-fn: 2.1.0 dev: false engines: node: '>=6' resolution: - integrity: sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - /open/7.0.4: + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + /open/7.2.1: dependencies: - is-docker: 2.0.0 + is-docker: 2.1.1 is-wsl: 2.2.0 dev: false engines: node: '>=8' resolution: - integrity: sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ== + integrity: sha512-xbYCJib4spUdmcs0g/2mK1nKo/jO2T7INClWd/beL7PFkXRWgr8B23ssDHX/USPn2M2IjDR5UdpYs6I67SnTSA== /optionator/0.8.3: dependencies: deep-is: 0.1.3 @@ -5448,6 +6105,10 @@ packages: node: '>= 0.8.0' resolution: integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + /os-browserify/0.3.0: + dev: false + resolution: + integrity: sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= /os-homedir/1.0.2: dev: false engines: @@ -5456,8 +6117,8 @@ packages: integrity: sha1-/7xJiDNuDoM94MFox+8VISGqf7M= /os-name/3.1.0: dependencies: - macos-release: 2.4.0 - windows-release: 3.3.1 + macos-release: 2.4.1 + windows-release: 3.3.3 dev: false engines: node: '>=6' @@ -5567,6 +6228,18 @@ packages: node: '>=6' resolution: integrity: sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA== + /pad/3.2.0: + dependencies: + wcwidth: 1.0.1 + dev: false + engines: + node: '>= 4.0.0' + resolution: + integrity: sha512-2u0TrjcGbOjBTJpyewEl4hBO3OeX5wWue7eIFPzQTg6wFSvoaHcBTTUY5m+n0hd04gmTCPuY0kCpVIVuw5etwg== + /pako/1.0.11: + dev: false + resolution: + integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== /parent-module/1.0.1: dependencies: callsites: 3.1.0 @@ -5575,6 +6248,16 @@ packages: node: '>=6' resolution: integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + /parse-asn1/5.1.6: + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.1 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== /parse-json/2.2.0: dependencies: error-ex: 1.3.2 @@ -5712,6 +6395,18 @@ packages: dev: false resolution: integrity: sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + /pbkdf2/3.1.1: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: false + engines: + node: '>=0.12' + resolution: + integrity: sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== /pend/1.2.0: dev: false resolution: @@ -5795,7 +6490,7 @@ packages: minimist: 1.2.5 mkdirp: 0.5.5 napi-build-utils: 1.0.2 - node-abi: 2.18.0 + node-abi: 2.19.1 noop-logger: 0.1.1 npmlog: 4.1.2 pump: 3.0.0 @@ -5808,6 +6503,7 @@ packages: engines: node: '>=6' hasBin: true + optional: true resolution: integrity: sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g== /prelude-ls/1.1.2: @@ -5835,6 +6531,10 @@ packages: dev: false resolution: integrity: sha1-LuTyPCVgkT4IwHzlzN1t498sWvg= + /process-es6/0.11.6: + dev: false + resolution: + integrity: sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g= /process-nextick-args/1.0.7: dev: false resolution: @@ -5895,6 +6595,14 @@ packages: dev: false resolution: integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + /prr/0.0.0: + dev: false + resolution: + integrity: sha1-GoS4WQgyVQFBGFPQCB7j+obikmo= + /prr/1.0.1: + dev: false + resolution: + integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY= /pseudomap/1.0.2: dev: false resolution: @@ -5903,6 +6611,17 @@ packages: dev: false resolution: integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + /public-encrypt/4.0.3: + dependencies: + bn.js: 4.11.9 + browserify-rsa: 4.0.1 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== /pump/3.0.0: dependencies: end-of-stream: 1.4.4 @@ -5980,6 +6699,12 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + /querystring-es3/0.2.1: + dev: false + engines: + node: '>=0.4.x' + resolution: + integrity: sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= /querystring/0.2.0: dev: false engines: @@ -5998,6 +6723,19 @@ packages: dev: false resolution: integrity: sha512-pVzZdDpWwWqEVVLshWUHjNwuVP7SfcmPraYuqocJp1yo2U1R7P+5QAfDhdItkuoGqIBnBYrtPp7rEPqDn9HlZA== + /randombytes/2.1.0: + dependencies: + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + /randomfill/1.0.4: + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== /range-parser/1.2.1: dev: false engines: @@ -6034,6 +6772,7 @@ packages: strip-json-comments: 2.0.1 dev: false hasBin: true + optional: true resolution: integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== /read-pkg-up/1.0.1: @@ -6093,6 +6832,15 @@ packages: node: '>=4' resolution: integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + /readable-stream/1.0.34: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: false + resolution: + integrity: sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= /readable-stream/1.1.14: dependencies: core-util-is: 1.0.2 @@ -6172,10 +6920,10 @@ packages: dev: false resolution: integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - /regenerator-runtime/0.13.5: + /regenerator-runtime/0.13.7: dev: false resolution: - integrity: sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + integrity: sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== /regexpp/2.0.1: dev: false engines: @@ -6229,13 +6977,13 @@ packages: /request/2.88.2: dependencies: aws-sign2: 0.7.0 - aws4: 1.10.0 + aws4: 1.10.1 caseless: 0.12.0 combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 form-data: 2.3.3 - har-validator: 5.1.3 + har-validator: 5.1.5 http-signature: 1.2.0 is-typedarray: 1.0.0 isstream: 0.1.2 @@ -6313,7 +7061,7 @@ packages: integrity: sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== /restore-cursor/3.1.0: dependencies: - onetime: 5.1.0 + onetime: 5.1.2 signal-exit: 3.0.3 dev: false engines: @@ -6327,7 +7075,7 @@ packages: /rhea-promise/0.1.15: dependencies: debug: 3.2.6 - rhea: 1.0.23 + rhea: 1.0.24 tslib: 1.13.0 dev: false resolution: @@ -6335,17 +7083,17 @@ packages: /rhea-promise/1.0.0: dependencies: debug: 3.2.6 - rhea: 1.0.23 + rhea: 1.0.24 tslib: 1.13.0 dev: false resolution: integrity: sha512-odAjpbB/IpFFBenPDwPkTWMQldt+DUlMBH9yI48Ct5OgTeDuuQcBnlhB+YCc6g2z8+URiP2ejms88joEanNCaw== - /rhea/1.0.23: + /rhea/1.0.24: dependencies: debug: 3.2.6 dev: false resolution: - integrity: sha512-c6xocb+x3uqcC30WDbbIQzeLuc0KNellSNWIzjUDC1WzlM/BwWnsVukDIP89+aqJ0MYAwly/B+ozGwdrF+EBrw== + integrity: sha512-PEl62U2EhxCO5wMUZ2/bCBcXAVKN9AdMSNQOrp3+R5b77TEaOSiy16MQ0sIOmzj/iqsgIAgPs1mt3FYfu1vIXA== /rimraf/2.6.3: dependencies: glob: 7.1.6 @@ -6367,10 +7115,37 @@ packages: hasBin: true resolution: integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + /ripemd160/2.0.2: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: false + resolution: + integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== /rollup-plugin-local-resolve/1.0.7: dev: false resolution: integrity: sha1-xIZwFxbBWt0hJ1ZcLqoQESMyCIc= + /rollup-plugin-node-builtins/2.1.2: + dependencies: + browserify-fs: 1.0.0 + buffer-es6: 4.9.3 + crypto-browserify: 3.12.0 + process-es6: 0.11.6 + dev: false + resolution: + integrity: sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k= + /rollup-plugin-node-globals/1.4.0: + dependencies: + acorn: 5.7.4 + buffer-es6: 4.9.3 + estree-walker: 0.5.2 + magic-string: 0.22.5 + process-es6: 0.11.6 + rollup-pluginutils: 2.8.2 + dev: false + resolution: + integrity: sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g== /rollup-plugin-shim/1.0.0: dev: false resolution: @@ -6407,20 +7182,20 @@ packages: jest-worker: 24.9.0 rollup: 1.32.1 serialize-javascript: 2.1.2 - uglify-js: 3.10.0 + uglify-js: 3.10.2 dev: false peerDependencies: rollup: '>=0.66.0 <2' resolution: integrity: sha512-ddgqkH02klveu34TF0JqygPwZnsbhHVI6t8+hGTcYHngPkQb5MIHI0XiztXIN/d6V9j+efwHAqEL7LspSxQXGw== - /rollup-plugin-visualizer/4.0.4_rollup@1.32.1: + /rollup-plugin-visualizer/4.1.1_rollup@1.32.1: dependencies: - nanoid: 3.1.10 - open: 7.0.4 + nanoid: 3.1.12 + open: 7.2.1 pupa: 2.0.1 rollup: 1.32.1 source-map: 0.7.3 - yargs: 15.4.0 + yargs: 15.4.1 dev: false engines: node: '>=10' @@ -6428,18 +7203,26 @@ packages: peerDependencies: rollup: '>=1.20.0' resolution: - integrity: sha512-odkyLiVxCEXh4AWFSl75+pbIapzhEZkOVww8pKUgraOHicSH67MYMnAOHWQVK/BYeD1cCiF/0kk8/XNX2+LM9A== + integrity: sha512-aQBukhj8T+1BcOjD/5xB3+mZSSzHIVT+WpQDDEVpmPCkILVX0J7NPOuKEvKIXU+iZLvF7B5/wJA4+wxuH7FNew== /rollup-pluginutils/2.8.2: dependencies: estree-walker: 0.6.1 dev: false resolution: integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + /rollup/0.63.5: + dependencies: + '@types/estree': 0.0.39 + '@types/node': 10.17.28 + dev: false + hasBin: true + resolution: + integrity: sha512-dFf8LpUNzIj3oE0vCvobX6rqOzHzLBoblyFp+3znPbjiSmSvOoK2kMKx+Fv9jYduG1rvcCfCveSgEaQHjWRF6g== /rollup/1.32.1: dependencies: '@types/estree': 0.0.45 - '@types/node': 8.10.61 - acorn: 7.3.1 + '@types/node': 8.10.62 + acorn: 7.4.0 dev: false hasBin: true resolution: @@ -6450,14 +7233,14 @@ packages: node: '>=0.12.0' resolution: integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - /rxjs/6.6.0: + /rxjs/6.6.2: dependencies: tslib: 1.13.0 dev: false engines: npm: '>=2.0.0' resolution: - integrity: sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg== + integrity: sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== /safe-buffer/5.1.2: dev: false resolution: @@ -6484,6 +7267,11 @@ packages: node: '>=0.8.0' resolution: integrity: sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== + /semver/2.3.2: + dev: false + hasBin: true + resolution: + integrity: sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI= /semver/5.3.0: dev: false hasBin: true @@ -6545,10 +7333,22 @@ packages: dev: false resolution: integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + /setimmediate/1.0.5: + dev: false + resolution: + integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= /setprototypeof/1.1.1: dev: false resolution: integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + /sha.js/2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + hasBin: true + resolution: + integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== /shebang-command/1.2.0: dependencies: shebang-regex: 1.0.0 @@ -6607,30 +7407,32 @@ packages: dev: false resolution: integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - /simple-concat/1.0.0: + /simple-concat/1.0.1: dev: false + optional: true resolution: - integrity: sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= + integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== /simple-get/3.1.0: dependencies: decompress-response: 4.2.1 once: 1.4.0 - simple-concat: 1.0.0 + simple-concat: 1.0.1 dev: false + optional: true resolution: integrity: sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== - /sinon/9.0.2: + /sinon/9.0.3: dependencies: - '@sinonjs/commons': 1.8.0 + '@sinonjs/commons': 1.8.1 '@sinonjs/fake-timers': 6.0.1 '@sinonjs/formatio': 5.0.1 - '@sinonjs/samsam': 5.0.3 + '@sinonjs/samsam': 5.1.0 diff: 4.0.2 nise: 4.0.4 - supports-color: 7.1.0 + supports-color: 7.2.0 dev: false resolution: - integrity: sha512-0uF8Q/QHkizNUmbK3LRFqx5cpTttEVXudywY9Uwzy8bTfZUhljZ7ARzSxnRHWYWtVTeh4Cw+tTb3iU21FQVO9A== + integrity: sha512-IKo9MIM111+smz9JGwLmw5U1075n1YXeAq8YeSFlndCLhAL5KGn6bLgu7b/4AYHTV/LcEMcRm2wU2YiL55/6Pg== /slice-ansi/2.1.0: dependencies: ansi-styles: 3.2.1 @@ -6902,6 +7704,15 @@ packages: dev: false resolution: integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + /stream-http/3.1.1: + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + xtend: 4.0.2 + dev: false + resolution: + integrity: sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg== /streamroller/2.2.4: dependencies: date-format: 2.1.0 @@ -6918,6 +7729,16 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + /string-argv/0.3.1: + dev: false + engines: + node: '>=0.6.19' + resolution: + integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + /string-range/1.2.2: + dev: false + resolution: + integrity: sha1-qJPtNH5yKZvIO++78qaSqNI51d0= /string-width/1.0.2: dependencies: code-point-at: 1.1.0 @@ -6926,6 +7747,7 @@ packages: dev: false engines: node: '>=0.10.0' + optional: true resolution: integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= /string-width/2.1.1: @@ -7069,12 +7891,12 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo= - /strip-json-comments/3.1.0: + /strip-json-comments/3.1.1: dev: false engines: node: '>=8' resolution: - integrity: sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== /supports-color/2.0.0: dev: false engines: @@ -7113,18 +7935,18 @@ packages: node: '>=6' resolution: integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - /supports-color/7.1.0: + /supports-color/7.2.0: dependencies: has-flag: 4.0.0 dev: false engines: node: '>=8' resolution: - integrity: sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== /table/5.4.6: dependencies: - ajv: 6.12.3 - lodash: 4.17.19 + ajv: 6.12.4 + lodash: 4.17.20 slice-ansi: 2.1.0 string-width: 3.1.0 dev: false @@ -7143,7 +7965,7 @@ packages: integrity: sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg== /tar-stream/2.1.3: dependencies: - bl: 4.0.2 + bl: 4.0.3 end-of-stream: 1.4.4 fs-constants: 1.0.0 inherits: 2.0.4 @@ -7210,6 +8032,14 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= + /timers-browserify/2.0.11: + dependencies: + setimmediate: 1.0.5 + dev: false + engines: + node: '>=0.6.0' + resolution: + integrity: sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== /timsort/0.3.0: dev: false resolution: @@ -7222,6 +8052,14 @@ packages: node: '>=0.6.0' resolution: integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + /tmp/0.1.0: + dependencies: + rimraf: 2.7.1 + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== /tmp/0.2.1: dependencies: rimraf: 3.0.2 @@ -7315,13 +8153,13 @@ packages: hasBin: true resolution: integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== - /ts-node/8.10.2_typescript@3.9.6: + /ts-node/8.10.2_typescript@3.9.7: dependencies: arg: 4.1.3 diff: 4.0.2 make-error: 1.3.6 source-map-support: 0.5.19 - typescript: 3.9.6 + typescript: 3.9.7 yn: 3.1.1 dev: false engines: @@ -7344,10 +8182,10 @@ packages: dev: false resolution: integrity: sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - /tslib/2.0.0: + /tslib/2.0.1: dev: false resolution: - integrity: sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== + integrity: sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== /tslint-config-prettier/1.18.0: dev: false engines: @@ -7355,7 +8193,7 @@ packages: hasBin: true resolution: integrity: sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== - /tslint/5.20.1_typescript@3.9.6: + /tslint/5.20.1_typescript@3.9.7: dependencies: '@babel/code-frame': 7.10.4 builtin-modules: 1.1.1 @@ -7369,8 +8207,8 @@ packages: resolve: 1.17.0 semver: 5.7.1 tslib: 1.13.0 - tsutils: 2.29.0_typescript@3.9.6 - typescript: 3.9.6 + tsutils: 2.29.0_typescript@3.9.7 + typescript: 3.9.7 dev: false engines: node: '>=4.8.0' @@ -7379,19 +8217,19 @@ packages: typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' resolution: integrity: sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - /tsutils/2.29.0_typescript@3.9.6: + /tsutils/2.29.0_typescript@3.9.7: dependencies: tslib: 1.13.0 - typescript: 3.9.6 + typescript: 3.9.7 dev: false peerDependencies: typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev' resolution: integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - /tsutils/3.17.1_typescript@3.9.6: + /tsutils/3.17.1_typescript@3.9.7: dependencies: tslib: 1.13.0 - typescript: 3.9.6 + typescript: 3.9.7 dev: false engines: node: '>= 6' @@ -7399,6 +8237,10 @@ packages: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' resolution: integrity: sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + /tty-browserify/0.0.1: + dev: false + resolution: + integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== /tunnel-agent/0.6.0: dependencies: safe-buffer: 5.2.1 @@ -7450,11 +8292,19 @@ packages: node: '>= 0.6' resolution: integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + /typedarray-to-buffer/1.0.4: + dev: false + resolution: + integrity: sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw= + /typedarray/0.0.6: + dev: false + resolution: + integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= /typedoc-default-themes/0.6.3: dependencies: backbone: 1.4.0 jquery: 3.5.1 - lunr: 2.3.8 + lunr: 2.3.9 underscore: 1.10.2 dev: false engines: @@ -7466,8 +8316,8 @@ packages: '@types/minimatch': 3.0.3 fs-extra: 8.1.0 handlebars: 4.7.6 - highlight.js: 9.18.1 - lodash: 4.17.19 + highlight.js: 9.18.3 + lodash: 4.17.20 marked: 0.8.2 minimatch: 3.0.4 progress: 2.0.3 @@ -7487,24 +8337,24 @@ packages: hasBin: true resolution: integrity: sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== - /typescript/3.9.6: + /typescript/3.9.7: dev: false engines: node: '>=4.2.0' hasBin: true resolution: - integrity: sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw== + integrity: sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== /ua-parser-js/0.7.21: dev: false resolution: integrity: sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== - /uglify-js/3.10.0: + /uglify-js/3.10.2: dev: false engines: node: '>=0.8.0' hasBin: true resolution: - integrity: sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== + integrity: sha512-GXCYNwqoo0MbLARghYjxVBxDCnU0tLqN7IPLdHHbibCb1NI5zBkU2EPcy/GaVxc0BtTjqyGXJCINe6JMR2Dpow== /unbzip2-stream/1.4.3: dependencies: buffer: 5.6.0 @@ -7592,11 +8442,11 @@ packages: hasBin: true resolution: integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - /uuid/8.2.0: + /uuid/8.3.0: dev: false hasBin: true resolution: - integrity: sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q== + integrity: sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== /v8-compile-cache/2.1.1: dev: false resolution: @@ -7663,12 +8513,26 @@ packages: node: '>= 0.9' resolution: integrity: sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4= + /vlq/0.2.3: + dev: false + resolution: + integrity: sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== + /vm-browserify/1.1.2: + dev: false + resolution: + integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== /void-elements/2.0.1: dev: false engines: node: '>=0.10.0' resolution: integrity: sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + /wcwidth/1.0.1: + dependencies: + defaults: 1.0.3 + dev: false + resolution: + integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= /webidl-conversions/4.0.2: dev: false resolution: @@ -7687,6 +8551,7 @@ packages: integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= /which-pm-runs/1.0.0: dev: false + optional: true resolution: integrity: sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= /which-typed-array/1.1.2: @@ -7724,14 +8589,14 @@ packages: dev: false resolution: integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - /windows-release/3.3.1: + /windows-release/3.3.3: dependencies: execa: 1.0.0 dev: false engines: node: '>=6' resolution: - integrity: sha512-Pngk/RDCaI/DkuHPlGTdIkDiTAnAkyMjoQMZqRsxydNl1qGXNIoZrB7RK8g53F2tEgQBMqQJHQdYZuQEEAu54A== + integrity: sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== /word-wrap/1.2.3: dev: false engines: @@ -7868,12 +8733,35 @@ packages: dev: false resolution: integrity: sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - /xregexp/4.3.0: + /xtend/2.0.6: + dependencies: + is-object: 0.1.2 + object-keys: 0.2.0 + dev: false + engines: + node: '>=0.4' + resolution: + integrity: sha1-XqZXptukRwacLlnFihE4ywxebO4= + /xtend/2.1.2: dependencies: - '@babel/runtime-corejs3': 7.10.4 + object-keys: 0.4.0 + dev: false + engines: + node: '>=0.4' + resolution: + integrity: sha1-bv7MKk2tjmlixJAbM3znuoe10os= + /xtend/2.2.0: dev: false + engines: + node: '>=0.4' resolution: - integrity: sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== + integrity: sha1-7vax8ZjByN6vrYsXZaBNrUoBxak= + /xtend/3.0.0: + dev: false + engines: + node: '>=0.4' + resolution: + integrity: sha1-XM50B7r2Qsunvs2laBEcST9ZZlo= /xtend/4.0.2: dev: false engines: @@ -7911,7 +8799,7 @@ packages: /yargs-unparser/1.6.0: dependencies: flat: 4.1.0 - lodash: 4.17.19 + lodash: 4.17.20 yargs: 13.3.2 dev: false engines: @@ -7933,10 +8821,10 @@ packages: dev: false resolution: integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - /yargs/15.4.0: + /yargs/15.4.1: dependencies: cliui: 6.0.0 - decamelize: 3.2.0 + decamelize: 1.2.0 find-up: 4.1.0 get-caller-file: 2.0.5 require-directory: 2.1.1 @@ -7950,7 +8838,7 @@ packages: engines: node: '>=8' resolution: - integrity: sha512-D3fRFnZwLWp8jVAAhPZBsmeIHY8tTsb8ItV9KaAaopmC6wde2u6Yw29JBIZHXw14kgkRnYmDgmQU4FVMDlIsWw== + integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== /yauzl/2.10.0: dependencies: buffer-crc32: 0.2.13 @@ -7990,15 +8878,15 @@ packages: '@microsoft/api-extractor': 7.7.11 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 cross-env: 7.0.2 - delay: 4.3.0 + delay: 4.4.0 eslint: 6.8.0 eslint-config-prettier: 6.11.0_eslint@6.8.0 eslint-plugin-no-null: 1.0.2_eslint@6.8.0 @@ -8006,7 +8894,7 @@ packages: eslint-plugin-promise: 4.2.1 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8023,13 +8911,13 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 dev: false name: '@rush-temp/abort-controller' resolution: - integrity: sha512-78SPLuZydRyhpdf4wO9uWQf4g8Ebuk5OZWFKmLKTPk42QJtMJpH9l7X1UXW3nh58BUHYairnIHJ0jamYTC6unw== + integrity: sha512-ePGF2T1ovFoO5zMj5swjozDl1D9pNY1L5fGgDU7ugfDHfCovr6md3cch0ytFFrtFPDIdSbrHChjUQ26gxX6Jaw== tarball: 'file:projects/abort-controller.tgz' version: 0.0.0 'file:projects/ai-anomaly-detector.tgz': @@ -8041,13 +8929,13 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -8059,7 +8947,7 @@ packages: inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8077,9 +8965,9 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/ai-anomaly-detector' @@ -8096,15 +8984,15 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/fs-extra': 8.1.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 cross-env: 7.0.2 @@ -8117,7 +9005,7 @@ packages: fs-extra: 8.1.0 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8137,17 +9025,62 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 source-map-support: 0.5.19 - tslib: 2.0.0 - typescript: 3.9.6 + tslib: 2.0.1 + typescript: 3.9.7 dev: false name: '@rush-temp/ai-form-recognizer' resolution: - integrity: sha512-yFx1KY5foauaTLXj7u6eN7E0Xp73ULm3sz7HeWVXE2bvPq+G8dfF2cGVDTor/wJ8hfeBltEtRJmR2oJyTh6S1g== + integrity: sha512-XZ9cUaejevE8dchJHRlhGPG+as12O+7BnoO0wJXkjVek51ittrrH86AdP9YavQbz4hs1jm3h+jkgEhYPhR4n+A== tarball: 'file:projects/ai-form-recognizer.tgz' version: 0.0.0 + 'file:projects/ai-metrics-advisor.tgz': + dependencies: + '@azure/core-tracing': 1.0.0-preview.9 + '@azure/identity': 1.1.0 + '@microsoft/api-extractor': 7.7.11 + '@opentelemetry/api': 0.10.2 + '@types/chai': 4.2.12 + '@types/mocha': 7.0.2 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + chai: 4.2.0 + chai-as-promised: 7.1.1_chai@4.2.0 + cross-env: 7.0.2 + dotenv: 8.2.0 + eslint: 6.8.0 + karma: 5.1.1 + karma-chrome-launcher: 3.1.0 + karma-coverage: 2.0.3 + karma-edge-launcher: 0.4.2_karma@5.1.1 + karma-env-preprocessor: 0.1.1 + karma-firefox-launcher: 1.3.0 + karma-ie-launcher: 1.0.0_karma@5.1.1 + karma-json-preprocessor: 0.3.3_karma@5.1.1 + karma-json-to-file-reporter: 1.0.1 + karma-junit-reporter: 2.0.1_karma@5.1.1 + karma-mocha: 2.0.1 + karma-mocha-reporter: 2.2.5_karma@5.1.1 + karma-remap-istanbul: 0.6.0_karma@5.1.1 + mocha: 7.2.0 + mocha-junit-reporter: 1.23.3_mocha@7.2.0 + nyc: 14.1.1 + prettier: 1.19.1 + rimraf: 3.0.2 + rollup: 1.32.1 + sinon: 9.0.3 + source-map-support: 0.5.19 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 + dev: false + name: '@rush-temp/ai-metrics-advisor' + resolution: + integrity: sha512-MOhg0xN4rk7IIeDpRc+s6YVV406PfOIBS+2/zHvV9GxSfU0Pmp9Ck7mS0sBq04JynJQcPqchG3kMgWiVMd/pXg== + tarball: 'file:projects/ai-metrics-advisor.tgz' + version: 0.0.0 'file:projects/ai-text-analytics.tgz': dependencies: '@azure/core-tracing': 1.0.0-preview.9 @@ -8157,15 +9090,15 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 cross-env: 7.0.2 @@ -8177,7 +9110,7 @@ packages: eslint-plugin-promise: 4.2.1 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8188,6 +9121,8 @@ packages: karma-mocha: 2.0.1 karma-mocha-reporter: 2.2.5_karma@5.1.1 karma-remap-istanbul: 0.6.0_karma@5.1.1 + karma-source-map-support: 1.4.0 + karma-sourcemap-loader: 0.3.8 mocha: 7.2.0 mocha-junit-reporter: 1.23.3_mocha@7.2.0 nyc: 14.1.1 @@ -8197,15 +9132,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 source-map-support: 0.5.19 - tslib: 2.0.0 - typescript: 3.9.6 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 dev: false name: '@rush-temp/ai-text-analytics' resolution: - integrity: sha512-dzKtF7SLzOzDdrwRDXidkewcR0TJe3AypIybQShD0XBXmzTmio0Vpp0WBpF2bMyAocTIL59PECBLYy95QTvXUA== + integrity: sha512-MFoDKJptz2NeUNtgjp9Y75qST1GToxrWuLigGciaVAwiggpFJeU4vPnIIOPyjv0Jp7xZUSxcWx01S4kdeurmsw== tarball: 'file:projects/ai-text-analytics.tgz' version: 0.0.0 'file:projects/app-configuration.tgz': @@ -8218,14 +9154,14 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 chai: 4.2.0 cross-env: 7.0.2 @@ -8238,7 +9174,7 @@ packages: esm: 3.2.25 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8257,17 +9193,257 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - sinon: 9.0.2 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 - uglify-js: 3.10.0 + sinon: 9.0.3 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 + uglify-js: 3.10.2 dev: false name: '@rush-temp/app-configuration' resolution: - integrity: sha512-o3zyWd0p+Th710h7qEQs8+0UstbL9Vf+kgUNP5amLJDfYh2qfzVA0msroRHAhaM0sRO7BDGXfpkFnU/GUa9PPw== + integrity: sha512-1/4p5+BpfkiSBbAHzmb5hXcYeOa03Xlm3Fzjjgpwps5P1Q+qU+8Ew60NpxA0fQUNJxpcVHwVSDwPgrVsNlGmCg== tarball: 'file:projects/app-configuration.tgz' version: 0.0.0 + 'file:projects/communication-administration.tgz': + dependencies: + '@azure/core-tracing': 1.0.0-preview.9 + '@microsoft/api-documenter': 7.8.56 + '@microsoft/api-extractor': 7.7.11 + '@opentelemetry/api': 0.10.2 + '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 + '@rollup/plugin-json': 4.1.0_rollup@1.32.1 + '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 + '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 + '@types/chai': 4.2.12 + '@types/mocha': 7.0.2 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 + assert: 1.5.0 + chai: 4.2.0 + cross-env: 7.0.2 + dotenv: 8.2.0 + eslint: 6.8.0 + eslint-config-prettier: 6.11.0_eslint@6.8.0 + eslint-plugin-no-null: 1.0.2_eslint@6.8.0 + eslint-plugin-no-only-tests: 2.4.0 + eslint-plugin-prefer-arrow: 1.2.2_eslint@6.8.0 + eslint-plugin-promise: 4.2.1 + events: 3.2.0 + inherits: 2.0.4 + karma: 5.1.1 + karma-chrome-launcher: 3.1.0 + karma-coverage: 2.0.3 + karma-edge-launcher: 0.4.2_karma@5.1.1 + karma-env-preprocessor: 0.1.1 + karma-firefox-launcher: 1.3.0 + karma-ie-launcher: 1.0.0_karma@5.1.1 + karma-json-preprocessor: 0.3.3_karma@5.1.1 + karma-json-to-file-reporter: 1.0.1 + karma-junit-reporter: 2.0.1_karma@5.1.1 + karma-mocha: 2.0.1 + karma-mocha-reporter: 2.2.5_karma@5.1.1 + karma-remap-istanbul: 0.6.0_karma@5.1.1 + mocha: 7.2.0 + mocha-junit-reporter: 1.23.3_mocha@7.2.0 + node-fetch: 2.6.0 + nyc: 14.1.1 + prettier: 1.19.1 + rimraf: 3.0.2 + rollup: 1.32.1 + rollup-plugin-shim: 1.0.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 + rollup-plugin-terser: 5.3.0_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 + tslib: 2.0.1 + typescript: 3.9.7 + dev: false + name: '@rush-temp/communication-administration' + resolution: + integrity: sha512-m5n2TR+CxWJlY1rEU+cdD8E9ko6duViOsfLChIFQMtT7lVhGCAE1ypEmGmGN+JIeYbQVfM04GubDPn/1jUuz+w== + tarball: 'file:projects/communication-administration.tgz' + version: 0.0.0 + 'file:projects/communication-chat.tgz': + dependencies: + '@azure/communication-signaling': 1.0.0-beta.1 + '@azure/core-tracing': 1.0.0-preview.9 + '@microsoft/api-extractor': 7.7.11 + '@opentelemetry/api': 0.10.2 + '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 + '@rollup/plugin-json': 4.1.0_rollup@1.32.1 + '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 + '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 + '@types/chai': 4.2.12 + '@types/mocha': 7.0.2 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 + assert: 1.5.0 + chai: 4.2.0 + cross-env: 7.0.2 + dotenv: 8.2.0 + eslint: 6.8.0 + eslint-config-prettier: 6.11.0_eslint@6.8.0 + eslint-plugin-no-null: 1.0.2_eslint@6.8.0 + eslint-plugin-no-only-tests: 2.4.0 + eslint-plugin-promise: 4.2.1 + events: 3.2.0 + inherits: 2.0.4 + karma: 5.1.1 + karma-chrome-launcher: 3.1.0 + karma-coverage: 2.0.3 + karma-edge-launcher: 0.4.2_karma@5.1.1 + karma-env-preprocessor: 0.1.1 + karma-firefox-launcher: 1.3.0 + karma-ie-launcher: 1.0.0_karma@5.1.1 + karma-json-preprocessor: 0.3.3_karma@5.1.1 + karma-json-to-file-reporter: 1.0.1 + karma-junit-reporter: 2.0.1_karma@5.1.1 + karma-mocha: 2.0.1 + karma-mocha-reporter: 2.2.5_karma@5.1.1 + karma-remap-istanbul: 0.6.0_karma@5.1.1 + mocha: 7.2.0 + mocha-junit-reporter: 1.23.3_mocha@7.2.0 + nyc: 14.1.1 + prettier: 1.19.1 + rimraf: 3.0.2 + rollup: 1.32.1 + rollup-plugin-shim: 1.0.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 + rollup-plugin-terser: 5.3.0_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 + tslib: 2.0.1 + typescript: 3.9.7 + util: 0.12.3 + dev: false + name: '@rush-temp/communication-chat' + resolution: + integrity: sha512-YVn59HYTKZEFDoRVc4N6PBZTLaSNSfGXOj6jINrEPqXMRrV2jh099AZkx7rqZvrYB2HD214Rns+FTatgLEK6ug== + tarball: 'file:projects/communication-chat.tgz' + version: 0.0.0 + 'file:projects/communication-common.tgz': + dependencies: + '@microsoft/api-extractor': 7.7.11 + '@opentelemetry/api': 0.10.2 + '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 + '@rollup/plugin-json': 4.1.0_rollup@1.32.1 + '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 + '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 + '@types/chai': 4.2.12 + '@types/chai-as-promised': 7.1.3 + '@types/jwt-decode': 2.2.1 + '@types/mocha': 7.0.2 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 + assert: 1.5.0 + chai: 4.2.0 + chai-as-promised: 7.1.1_chai@4.2.0 + cross-env: 7.0.2 + eslint: 6.8.0 + eslint-config-prettier: 6.11.0_eslint@6.8.0 + eslint-plugin-no-null: 1.0.2_eslint@6.8.0 + eslint-plugin-no-only-tests: 2.4.0 + eslint-plugin-promise: 4.2.1 + events: 3.2.0 + inherits: 2.0.4 + jwt-decode: 2.2.0 + karma: 5.1.1 + karma-chrome-launcher: 3.1.0 + karma-coverage: 2.0.3 + karma-edge-launcher: 0.4.2_karma@5.1.1 + karma-env-preprocessor: 0.1.1 + karma-firefox-launcher: 1.3.0 + karma-ie-launcher: 1.0.0_karma@5.1.1 + karma-junit-reporter: 2.0.1_karma@5.1.1 + karma-mocha: 2.0.1 + karma-mocha-reporter: 2.2.5_karma@5.1.1 + karma-remap-istanbul: 0.6.0_karma@5.1.1 + mocha: 7.2.0 + mocha-junit-reporter: 1.23.3_mocha@7.2.0 + nyc: 14.1.1 + prettier: 1.19.1 + rimraf: 3.0.2 + rollup: 1.32.1 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 + rollup-plugin-terser: 5.3.0_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 + tslib: 2.0.1 + typescript: 3.9.7 + util: 0.12.3 + dev: false + name: '@rush-temp/communication-common' + resolution: + integrity: sha512-W+CjL8fX7xJlEb7PaVFCat0eNEeNm9DyEZG7W86h1veef5xQ1TyBNGpTmpJTEZL2cuxIilm6HIPhzxgWgRqDhw== + tarball: 'file:projects/communication-common.tgz' + version: 0.0.0 + 'file:projects/communication-sms.tgz': + dependencies: + '@azure/core-tracing': 1.0.0-preview.9 + '@microsoft/api-extractor': 7.7.11 + '@opentelemetry/api': 0.10.2 + '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 + '@rollup/plugin-json': 4.1.0_rollup@1.32.1 + '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 + '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 + '@types/chai': 4.2.12 + '@types/mocha': 7.0.2 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 + assert: 1.5.0 + chai: 4.2.0 + cross-env: 7.0.2 + dotenv: 8.2.0 + eslint: 6.8.0 + eslint-config-prettier: 6.11.0_eslint@6.8.0 + eslint-plugin-no-null: 1.0.2_eslint@6.8.0 + eslint-plugin-no-only-tests: 2.4.0 + eslint-plugin-promise: 4.2.1 + events: 3.2.0 + inherits: 2.0.4 + karma: 5.1.1 + karma-chrome-launcher: 3.1.0 + karma-coverage: 2.0.3 + karma-edge-launcher: 0.4.2_karma@5.1.1 + karma-env-preprocessor: 0.1.1 + karma-firefox-launcher: 1.3.0 + karma-ie-launcher: 1.0.0_karma@5.1.1 + karma-junit-reporter: 2.0.1_karma@5.1.1 + karma-mocha: 2.0.1 + karma-mocha-reporter: 2.2.5_karma@5.1.1 + karma-remap-istanbul: 0.6.0_karma@5.1.1 + mocha: 7.2.0 + mocha-junit-reporter: 1.23.3_mocha@7.2.0 + nyc: 14.1.1 + prettier: 1.19.1 + rimraf: 3.0.2 + rollup: 1.32.1 + rollup-plugin-shim: 1.0.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 + rollup-plugin-terser: 5.3.0_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 + tslib: 2.0.1 + typescript: 3.9.7 + util: 0.12.3 + dev: false + name: '@rush-temp/communication-sms' + resolution: + integrity: sha512-pNRKSDM1hqWIGl1owoqK0h7riTJbStjvBtGuLbXE8GqYX3tbmpm+WJL+yE6jIHye9eFtkpkaVhclQj3Nqutvrg== + tarball: 'file:projects/communication-sms.tgz' + version: 0.0.0 'file:projects/core-amqp.tgz': dependencies: '@azure/identity': 1.1.0 @@ -8276,18 +9452,18 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/async-lock': 1.1.2 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/debug': 4.1.5 '@types/is-buffer': 2.0.0 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 async-lock: 1.2.4 buffer: 5.6.0 @@ -8302,9 +9478,9 @@ packages: eslint-plugin-no-null: 1.0.2_eslint@6.8.0 eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 - events: 3.1.0 + events: 3.2.0 is-buffer: 2.0.4 - jssha: 3.1.0 + jssha: 3.1.2 karma: 5.1.1 karma-chrome-launcher: 3.1.0 karma-mocha: 2.0.1 @@ -8314,35 +9490,34 @@ packages: prettier: 1.19.1 process: 0.11.10 puppeteer: 3.3.0 - rhea: 1.0.23 + rhea: 1.0.24 rhea-promise: 1.0.0 rimraf: 3.0.2 rollup: 1.32.1 rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - sinon: 9.0.2 - stream-browserify: 3.0.0 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + sinon: 9.0.3 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 url: 0.11.0 util: 0.12.3 ws: 7.3.1 dev: false name: '@rush-temp/core-amqp' resolution: - integrity: sha512-K0UxDvA6BmhISAJDXoIEIVQRTm7RbY51cNRg7fkMWRzl3dp/UxC7qUnJb/EAawgCOrYeiOS+PR0VLx5s5gDzaQ== + integrity: sha512-tQdNsinTu23gyHdTxAtlQDidDfjTKrJyg6utTFIExsgIu55Byf5hNYQL98q3PhDU/evb9rwnhUu32MO29QOmtw== tarball: 'file:projects/core-amqp.tgz' version: 0.0.0 'file:projects/core-arm.tgz': dependencies: - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 - '@types/chai': 4.2.11 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 eslint: 6.8.0 eslint-config-prettier: 6.11.0_eslint@6.8.0 @@ -8356,12 +9531,12 @@ packages: rimraf: 3.0.2 rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 shx: 0.3.2 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 - uglify-js: 3.10.0 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 + uglify-js: 3.10.2 dev: false name: '@rush-temp/core-arm' resolution: @@ -8370,20 +9545,20 @@ packages: version: 0.0.0 'file:projects/core-asynciterator-polyfill.tgz': dependencies: - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 eslint: 6.8.0 eslint-config-prettier: 6.11.0_eslint@6.8.0 eslint-plugin-no-null: 1.0.2_eslint@6.8.0 eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 prettier: 1.19.1 - typescript: 3.9.6 + typescript: 3.9.7 dev: false name: '@rush-temp/core-asynciterator-polyfill' resolution: - integrity: sha512-H+PZImxHoD4ZcrJie2qstZmXk1/DHGyIq9b+eSSv4TjT9VsCbeaaEEaZ/iCsoUyzDuLWTj2MYqNEgU4L9ROTzA== + integrity: sha512-qd37qK+hk0KAlOm7XDr2lio3s9unyuKSp92QaJfoh62AkVnjeOjKvPU/PknYBbP1eQT+GnPQKuZMc/e0n6WUtQ== tarball: 'file:projects/core-asynciterator-polyfill.tgz' version: 0.0.0 'file:projects/core-auth.tgz': @@ -8394,12 +9569,12 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 cross-env: 7.0.2 downlevel-dts: 0.4.0 @@ -8416,14 +9591,14 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/core-auth' resolution: - integrity: sha512-cisnMZuzgkO4YcSw2Ky+w7AJmn/Dmz5Sm3jtN2wJpo/2q3MGcIVfn6X3mvzLX3L8rQTNHFPTNZCY1MnfkEtNeg== + integrity: sha512-cTNwAPeRONmLxx9r7nvghh+WW1HhcdPSKtlvcvKiHD4UTqLWShmH3Jsrw57ClL8swAclXA0OsWpvFR1oss9qgw== tarball: 'file:projects/core-auth.tgz' version: 0.0.0 'file:projects/core-client.tgz': @@ -8434,14 +9609,14 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 cross-env: 7.0.2 downlevel-dts: 0.4.0 @@ -8453,7 +9628,7 @@ packages: inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8469,15 +9644,15 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/core-client' resolution: - integrity: sha512-dy8+MGH/3SnKvFIeYSAeDwg/wkkiQJpa9GU2RpxvZi6tB83JNvRP2hpEOZUwWpeJqLeYeZtP1UtvaIsdLv1vOA== + integrity: sha512-VYIBEitRkTb5B0RxzcvQ9Xj0IRxS23NPGXDp34XMxuypK5HbsHGfyzDP5w6JMlVALW5a1tAfrCjnRjOSl1CSxA== tarball: 'file:projects/core-client.tgz' version: 0.0.0 'file:projects/core-http.tgz': @@ -8489,20 +9664,20 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 - '@types/chai': 4.2.11 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 + '@types/chai': 4.2.12 '@types/express': 4.17.7 '@types/glob': 7.1.3 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 + '@types/node': 8.10.62 '@types/node-fetch': 2.5.7 - '@types/sinon': 9.0.4 + '@types/sinon': 9.0.5 '@types/tough-cookie': 4.0.0 '@types/tunnel': 0.0.1 - '@types/uuid': 8.0.0 + '@types/uuid': 8.3.0 '@types/xml2js': 0.4.5 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 babel-runtime: 6.26.0 chai: 4.2.0 cross-env: 7.0.2 @@ -8513,7 +9688,7 @@ packages: eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 express: 4.17.1 - fetch-mock: 9.10.3_node-fetch@2.6.0 + fetch-mock: 9.10.7_node-fetch@2.6.0 form-data: 3.0.0 glob: 7.1.6 karma: 5.1.1 @@ -8523,7 +9698,7 @@ packages: karma-firefox-launcher: 1.3.0 karma-mocha: 2.0.1 karma-rollup-preprocessor: 7.0.5_rollup@1.32.1 - karma-sourcemap-loader: 0.3.7 + karma-sourcemap-loader: 0.3.8 mocha: 7.2.0 mocha-junit-reporter: 1.23.3_mocha@7.2.0 node-fetch: 2.6.0 @@ -8532,26 +9707,26 @@ packages: prettier: 1.19.1 process: 0.11.10 puppeteer: 3.3.0 - regenerator-runtime: 0.13.5 + regenerator-runtime: 0.13.7 rimraf: 3.0.2 rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 shx: 0.3.2 - sinon: 9.0.2 + sinon: 9.0.3 tough-cookie: 4.0.0 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 tunnel: 0.0.6 - typescript: 3.9.6 - uglify-js: 3.10.0 - uuid: 8.2.0 + typescript: 3.9.7 + uglify-js: 3.10.2 + uuid: 8.3.0 xhr-mock: 2.5.1 xml2js: 0.4.23 dev: false name: '@rush-temp/core-http' resolution: - integrity: sha512-kOGT2hum2uuqkhtRps2jklAs/cdbCGBa7Sa3xMlDtDLuUpaoLzrIczonA+dQVgE1G/hkJmOnrezCHqlDRpUsoA== + integrity: sha512-DpgHabhCkCWjyoaCH/M7rsup4GWW976NEw9plc0YebJSd4XzWc35e4a4TNyaPuxGraca7hHdWcdRZgTWR7CJkQ== tarball: 'file:projects/core-http.tgz' version: 0.0.0 'file:projects/core-https.tgz': @@ -8562,15 +9737,15 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@types/uuid': 8.0.0 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@types/uuid': 8.3.0 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 cross-env: 7.0.2 downlevel-dts: 0.4.0 @@ -8584,7 +9759,7 @@ packages: inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8600,17 +9775,17 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 source-map-support: 0.5.19 - tslib: 2.0.0 - typescript: 3.9.6 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 - uuid: 8.2.0 + uuid: 8.3.0 dev: false name: '@rush-temp/core-https' resolution: - integrity: sha512-305j81XiP0XeQSKj7yhfB9Y0QUl8qY1w9hnG4i40XPeEKQXo6GdrzyR6yYMo2J69W8bmJQfknfIFsOdCZ7Gewg== + integrity: sha512-tZXTdf7lHpP1SsLKNlvsT0thEH6lwPK8hmbr+xA7HKCFtrUSkEZSV4k0EWPNGJGyp8wDvem2XOQodnv5Do3SgA== tarball: 'file:projects/core-https.tgz' version: 0.0.0 'file:projects/core-lro.tgz': @@ -8619,13 +9794,13 @@ packages: '@opentelemetry/api': 0.10.2 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 chai: 4.2.0 eslint: 6.8.0 @@ -8633,10 +9808,10 @@ packages: eslint-plugin-no-null: 1.0.2_eslint@6.8.0 eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 - events: 3.1.0 + events: 3.2.0 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8655,33 +9830,33 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 - uglify-js: 3.10.0 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 + uglify-js: 3.10.2 dev: false name: '@rush-temp/core-lro' resolution: - integrity: sha512-+8UsoSpqb5GbTR2WiwmU+7ItC6ckyyLiKbq+AeQ2zxpi6GXg9FM7D5ciD4z9hJiVUBKDSKOWYF46FQedjP6qHw== + integrity: sha512-PUANPnMKlHvZLOLZiiLItWfzsnzxAaGfwskX0SY72c52oGXPbopy+HkZqSq6xoJnw+nCmEoeQmWqb7u95DV4Kg== tarball: 'file:projects/core-lro.tgz' version: 0.0.0 'file:projects/core-paging.tgz': dependencies: - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 eslint: 6.8.0 eslint-config-prettier: 6.11.0_eslint@6.8.0 eslint-plugin-no-null: 1.0.2_eslint@6.8.0 eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 prettier: 1.19.1 - typescript: 3.9.6 + typescript: 3.9.7 dev: false name: '@rush-temp/core-paging' resolution: - integrity: sha512-jLeKpwyTeRLv1nD/QCwOzTvrQAceI3vZS3lGSxxR569SGdt4luWEKPxpql0GZ5jXLX8vg+t1dbnxeUcHikJWPw== + integrity: sha512-NpQK086LikEUqCs/nm5Mm123GnA0n9HGA8fnuzZxtTRSBtwPGpO1svnf8h76fyXFOsjn3R2/o6TOrRVBr9sPbQ== tarball: 'file:projects/core-paging.tgz' version: 0.0.0 'file:projects/core-tracing.tgz': @@ -8692,12 +9867,12 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 cross-env: 7.0.2 eslint: 6.8.0 @@ -8713,14 +9888,14 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/core-tracing' resolution: - integrity: sha512-4pg1Kg9cNBkMqsedTMJOVo2eemMUAQ9yr5Oh0D8xabf4tpihrAjQW8EkzOmAZEQ42KqVlkLjqlWBZzdSdBLuow== + integrity: sha512-oVTo1Y9QipLjugO55ByAQ8XLgI6wWl8OPS1XDax5r4GmR4VBwPEzNM7SS2a8pbvAeqDnr5h16v1SeMxpB5Vr8g== tarball: 'file:projects/core-tracing.tgz' version: 0.0.0 'file:projects/core-xml.tgz': @@ -8729,15 +9904,15 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 '@types/xml2js': 0.4.5 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 cross-env: 7.0.2 downlevel-dts: 0.4.0 @@ -8749,7 +9924,7 @@ packages: inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8765,16 +9940,16 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 xml2js: 0.4.23 dev: false name: '@rush-temp/core-xml' resolution: - integrity: sha512-ailMjJ1lg/5smpH1qPSW4wXRSCofLz95inLHbp1lGaZ1K44jmJM4m0lGVgOMfLFtzCae8uLFJGG5Us8SoITlLg== + integrity: sha512-VPKz+0t+SMBAPupKiPl15CsjeEHzsBMey7tdKzR53G5P/ZMgYxrPp9wdB1OeTmFfUH/yw4djDBw0gExgD97+Kg== tarball: 'file:projects/core-xml.tgz' version: 0.0.0 'file:projects/cosmos.tgz': @@ -8785,17 +9960,17 @@ packages: '@types/debug': 4.1.5 '@types/fast-json-stable-stringify': 2.0.0 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 + '@types/node': 8.10.62 '@types/node-fetch': 2.5.7 '@types/priorityqueuejs': 1.0.1 '@types/semaphore': 1.1.0 - '@types/sinon': 9.0.4 + '@types/sinon': 9.0.5 '@types/tunnel': 0.0.1 - '@types/underscore': 1.10.5 - '@types/uuid': 8.0.0 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/eslint-plugin-tslint': 2.34.0_f8f62cb1f34b48259c049dd0f60912e9 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/underscore': 1.10.22 + '@types/uuid': 8.3.0 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/eslint-plugin-tslint': 2.34.0_8ecfbc9f33e253d01ca741854a1cb01c + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 cross-env: 7.0.2 debug: 4.1.1 dotenv: 8.2.0 @@ -8822,21 +9997,21 @@ packages: rollup: 1.32.1 rollup-plugin-local-resolve: 1.0.7 semaphore: 1.1.0 - sinon: 9.0.2 + sinon: 9.0.3 snap-shot-it: 7.9.3 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - tslint: 5.20.1_typescript@3.9.6 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + tslint: 5.20.1_typescript@3.9.7 tslint-config-prettier: 1.18.0 typedoc: 0.15.8 - typescript: 3.9.6 + typescript: 3.9.7 universal-user-agent: 6.0.0 - uuid: 8.2.0 + uuid: 8.3.0 dev: false name: '@rush-temp/cosmos' resolution: - integrity: sha512-n2thQR98RdP6LVfeW9NbiW787UK+JJjZEe7JbgMqbrehiMCBynmPkEY38rgYhlklxwpQDPS8nUir1NFNZlx/fQ== + integrity: sha512-yu/GDc2pyBMl+0ANfPAWkoSVhKecSLe3C7zr1tUT06LPjMhVNYuoUc5Osr/66mWm12xTuLp85/yRcrjM9y8j2Q== tarball: 'file:projects/cosmos.tgz' version: 0.0.0 'file:projects/data-tables.tgz': @@ -8848,13 +10023,13 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -8867,7 +10042,7 @@ packages: inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8884,28 +10059,37 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/data-tables' resolution: - integrity: sha512-GRiOgEupabCZemjZqdWhL3JXLoK8191/yPwsjlAZxJ9T3zGwdzmUaciZCKUzW6ElMyKyabVPqtw8GQqje9E2Rg== + integrity: sha512-FTjRi59/roSgYtLZZ+141Gv9hN777YnED3i1XFWOwFU9t5YyMuWbkDmnwBCpYNaNO3yJsyD97CA7DoSlYQpGeA== tarball: 'file:projects/data-tables.tgz' version: 0.0.0 'file:projects/dev-tool.tgz': dependencies: - '@types/chai': 4.2.11 + '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 + '@rollup/plugin-json': 4.1.0_rollup@1.32.1 + '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 + '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/chalk': 2.2.0 '@types/fs-extra': 8.1.1 '@types/minimist': 1.2.0 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 + '@types/node': 8.10.62 '@types/prettier': 2.0.2 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/rollup-plugin-node-builtins': 2.1.1 + '@types/rollup-plugin-node-globals': 1.4.0 + '@types/rollup-plugin-sourcemaps': 0.4.2 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 + builtin-modules: 3.1.0 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 chalk: 3.0.0 @@ -8915,12 +10099,19 @@ packages: mocha: 7.2.0 prettier: 1.19.1 rimraf: 3.0.2 - ts-node: 8.10.2_typescript@3.9.6 - typescript: 3.9.6 + rollup: 1.32.1 + rollup-plugin-node-builtins: 2.1.2 + rollup-plugin-node-globals: 1.4.0 + rollup-plugin-shim: 1.0.0 + rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 + rollup-plugin-terser: 5.3.0_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + ts-node: 8.10.2_typescript@3.9.7 + typescript: 3.9.7 dev: false name: '@rush-temp/dev-tool' resolution: - integrity: sha512-5TXnGsXxkseKtD1Uu/f8Ua++Np5VFavRs7Hl4IfMbFGBrbWPxXGJJLs/CJLljI71Q9Dqc5YmxoFbtY3agUTrNQ== + integrity: sha512-ciciEM+oL304KwFyiYKOYiw/e1tXhpeEAX6kak4fz9dpljOLyqw7zfem3rbVQxbt44hw5zyt700KUp5tqsv73Q== tarball: 'file:projects/dev-tool.tgz' version: 0.0.0 'file:projects/digital-twins.tgz': @@ -8931,14 +10122,14 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -8950,7 +10141,7 @@ packages: inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -8970,10 +10161,10 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/digital-twins' @@ -8984,16 +10175,16 @@ packages: 'file:projects/eslint-plugin-azure-sdk.tgz': dependencies: '@types/bluebird': 3.5.32 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/eslint': 4.16.8 '@types/estree': 0.0.39 '@types/glob': 7.1.3 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.6 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 - '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/experimental-utils': 2.34.0_eslint@6.8.0+typescript@3.9.7 + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 + '@typescript-eslint/typescript-estree': 2.34.0_typescript@3.9.7 bluebird: 3.7.2 chai: 4.2.0 eslint: 6.8.0 @@ -9006,8 +10197,8 @@ packages: prettier: 1.19.1 rimraf: 3.0.2 source-map-support: 0.5.19 - tslib: 2.0.0 - typescript: 3.9.6 + tslib: 2.0.1 + typescript: 3.9.7 dev: false name: '@rush-temp/eslint-plugin-azure-sdk' resolution: @@ -9024,21 +10215,21 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/async-lock': 1.1.2 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/chai-string': 1.4.2 '@types/debug': 4.1.5 '@types/long': 4.0.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@types/uuid': 8.0.0 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@types/uuid': 8.3.0 '@types/ws': 7.2.6 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 buffer: 5.6.0 chai: 4.2.0 @@ -9056,7 +10247,7 @@ packages: esm: 3.2.25 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9077,16 +10268,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - sinon: 9.0.2 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 - uuid: 8.2.0 + sinon: 9.0.3 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 + uuid: 8.3.0 ws: 7.3.1 dev: false name: '@rush-temp/event-hubs' resolution: - integrity: sha512-jY4Yvmtu9YSd6dLPezEwmEtggvxAS/MvarrynifBWCjF4SoWmZvc1O2EZdZYTxdYjysYn8I4O3RkaFEnSwNu4w== + integrity: sha512-UekhJtrduR/NW15Smomg3rLI+iz68Rz4+Pu2b3gXYvp7IViWTSYeJYGBSK5HRonIUSwa8Bewj9tG2Ugs+7hVxA== tarball: 'file:projects/event-hubs.tgz' version: 0.0.0 'file:projects/event-processor-host.tgz': @@ -9097,19 +10288,19 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/async-lock': 1.1.2 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/chai-string': 1.4.2 '@types/debug': 4.1.5 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/uuid': 8.0.0 + '@types/node': 8.10.62 + '@types/uuid': 8.3.0 '@types/ws': 7.2.6 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 async-lock: 1.2.4 azure-storage: 2.10.3 chai: 4.2.0 @@ -9134,15 +10325,15 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-uglify: 6.0.4_rollup@1.32.1 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 - uuid: 8.2.0 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 + uuid: 8.3.0 ws: 7.3.1 dev: false name: '@rush-temp/event-processor-host' resolution: - integrity: sha512-QytC/CjcRtJZwlPxvYKLJ91gtaNaw860njdrpQZv0Ka1ZHwZzMkFaJPV15kGYqYrwZSz4IcBaRec90e8fccqOw== + integrity: sha512-5q9OjZ4GQp/BWc/Qm581a7dwZG153HakFDaxUVuudMac7nKhYvwwBbv6whNYPuJp6IHCloR3UvO69lyPnLb9uw== tarball: 'file:projects/event-processor-host.tgz' version: 0.0.0 'file:projects/eventgrid.tgz': @@ -9153,16 +10344,16 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@types/uuid': 8.0.0 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@types/uuid': 8.3.0 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 cross-env: 7.0.2 @@ -9174,7 +10365,7 @@ packages: eslint-plugin-promise: 4.2.1 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9194,16 +10385,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 dev: false name: '@rush-temp/eventgrid' resolution: - integrity: sha512-JneUDGxCKVc2OBMRQ2oIOHtmnt6clWBwZBmG3eJlAzk+PkSNVr87URfrJJy3nkU28+TUkK3xHnHyU/bmys6nXw== + integrity: sha512-olIajp4x8DuQ2tYJkcMYxNIgFHXkVkm823OBxzlbN4gzHNBt4o3uDZvcacuBfc9FxWfz+0/vlSq2KD4s8f3DNg== tarball: 'file:projects/eventgrid.tgz' version: 0.0.0 'file:projects/eventhubs-checkpointstore-blob.tgz': @@ -9214,16 +10405,16 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/chai-string': 1.4.2 '@types/debug': 4.1.5 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 @@ -9237,12 +10428,12 @@ packages: eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 esm: 3.2.25 - events: 3.1.0 + events: 3.2.0 guid-typescript: 1.0.9 inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9260,58 +10451,58 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/eventhubs-checkpointstore-blob' resolution: - integrity: sha512-w5AuQEI72MPTBOJE5PkBcl3R/unve12sfjW2aFjQQYtWxP/d8hXO7iL0Yptk4mmcauIDVHchSNIO5rTeebcMyg== + integrity: sha512-yXCN+QSk1RoyCEtby+wiVnTGLiDBOi8AJP7YmoCrCk/9GQ34pdneXTdkkNh7vdkYrXBQzc3AgUqZCDW5y2Cpjw== tarball: 'file:projects/eventhubs-checkpointstore-blob.tgz' version: 0.0.0 'file:projects/identity.tgz': dependencies: '@azure/core-tracing': 1.0.0-preview.9 - '@azure/msal-node': 1.0.0-alpha.5 + '@azure/msal-common': 1.4.0 + '@azure/msal-node': 1.0.0-alpha.8 '@microsoft/api-extractor': 7.7.11 '@opentelemetry/api': 0.10.2 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/express': 4.17.7 '@types/jws': 3.2.2 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/qs': 6.9.3 - '@types/sinon': 9.0.4 - '@types/uuid': 8.0.0 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/qs': 6.9.4 + '@types/sinon': 9.0.5 + '@types/uuid': 8.3.0 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 axios: 0.19.2 cross-env: 7.0.2 eslint: 6.8.0 - events: 3.1.0 + events: 3.2.0 express: 4.17.1 inherits: 2.0.4 jws: 4.0.0 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-env-preprocessor: 0.1.1 karma-junit-reporter: 2.0.1_karma@5.1.1 karma-mocha: 2.0.1 karma-mocha-reporter: 2.2.5_karma@5.1.1 karma-remap-istanbul: 0.6.0_karma@5.1.1 - keytar: 5.6.0 mocha: 7.2.0 mocha-junit-reporter: 1.23.3_mocha@7.2.0 - msal: 1.3.2 - open: 7.0.4 + msal: 1.4.0 + open: 7.2.1 prettier: 1.19.1 puppeteer: 3.3.0 qs: 6.9.4 @@ -9319,18 +10510,18 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 - uuid: 8.2.0 + uuid: 8.3.0 dev: false name: '@rush-temp/identity' optionalDependencies: keytar: 5.6.0 resolution: - integrity: sha512-p2S2EGVa4KNgoTYoBYBKogF8arkQ843Rybs+dy6lLxootEKXWKE3N5q0gRP5FXuXvigpQKt3IE1jVqx3UuddoQ== + integrity: sha512-CxSrmVx5ZSjEa4fq36jF/GrD9ncQqaK+3qGuB2ecoDK6zLCPAExU2rqiK+q/7FudiSyjyHlJYxgyh4CU+KW7xQ== tarball: 'file:projects/identity.tgz' version: 0.0.0 'file:projects/keyvault-admin.tgz': @@ -9342,16 +10533,16 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/fs-extra': 8.1.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@types/uuid': 8.0.0 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@types/uuid': 8.3.0 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 chai: 4.2.0 cross-env: 7.0.2 @@ -9364,7 +10555,7 @@ packages: esm: 3.2.25 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9384,16 +10575,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 source-map-support: 0.5.19 - tslib: 2.0.0 - typescript: 3.9.6 - uuid: 8.2.0 + tslib: 2.0.1 + typescript: 3.9.7 + uuid: 8.3.0 dev: false name: '@rush-temp/keyvault-admin' resolution: - integrity: sha512-6f8De+04Tlf3rZOc/1Thy6H7qGD6/5rcn0fH9FPXudEe+Vbr7Vx3f4HhsnUDy9vnVrvyNWfFyiCJoGT0drXpow== + integrity: sha512-ZalMrNTYAkUCYCXTim1D1tx806a7EkIeynxc9bOrRqb8BORidCQH4IAn9FnWirYqFZY1kt+Fx+iWPyv0BfbiFA== tarball: 'file:projects/keyvault-admin.tgz' version: 0.0.0 'file:projects/keyvault-certificates.tgz': @@ -9405,16 +10596,16 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/fs-extra': 8.1.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 + '@types/node': 8.10.62 '@types/query-string': 6.2.0 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 chai: 4.2.0 cross-env: 7.0.2 @@ -9428,7 +10619,7 @@ packages: fs-extra: 8.1.0 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9450,26 +10641,27 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 source-map-support: 0.5.19 - tslib: 2.0.0 - typescript: 3.9.6 + tslib: 2.0.1 + typescript: 3.9.7 url: 0.11.0 dev: false name: '@rush-temp/keyvault-certificates' resolution: - integrity: sha512-yDAV8Si946hzwpcxzkApINOt1n/qEu1IntnvPqMCOrEqbov++DRkg3H4SjGDe7IZKF4kGV2lweazuvBH6w7uKA== + integrity: sha512-hy5bkfacybP3MXrFakcszLqj2lJkzdeMQf+dNKVHWWP7nICr3EJIhDyQ3BfWx5ZWyXMAQn7kChUrG5MEB+vsDw== tarball: 'file:projects/keyvault-certificates.tgz' version: 0.0.0 'file:projects/keyvault-common.tgz': dependencies: - tslib: 2.0.0 - typescript: 3.9.6 + eslint: 6.8.0 + tslib: 2.0.1 + typescript: 3.9.7 dev: false name: '@rush-temp/keyvault-common' resolution: - integrity: sha512-cCbZ1kryFHZNYwGfQj2bRfG6vvwVlPXFWU12cKfc1Xps5KYGcPfIKTbZsOfbMw8SCM/FcLnImZeideZQ3lxXPA== + integrity: sha512-FPNPxXQ5smC9JwS8b8ybQTb9w4w5ZoilfSU+F3jvH0q25u5RMLFZ+by05FBJ++eKgIwOn7g6CP+Y8DoWgxQL9w== tarball: 'file:projects/keyvault-common.tgz' version: 0.0.0 'file:projects/keyvault-keys.tgz': @@ -9481,16 +10673,16 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/fs-extra': 8.1.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 + '@types/node': 8.10.62 '@types/query-string': 6.2.0 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 chai: 4.2.0 cross-env: 7.0.2 @@ -9504,7 +10696,7 @@ packages: fs-extra: 8.1.0 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9526,16 +10718,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 source-map-support: 0.5.19 - tslib: 2.0.0 - typescript: 3.9.6 + tslib: 2.0.1 + typescript: 3.9.7 url: 0.11.0 dev: false name: '@rush-temp/keyvault-keys' resolution: - integrity: sha512-W4iVFbYVGW+2c/7IIw4D2O0qqRq7BaHKjmsNAxVJi1PSjoxFofSzOfEk/7QSKtnPW8PBwhEaWvjPDq/+5+QeyA== + integrity: sha512-5lqUU7EJhPiz2ioTmMIuCUM5b9BxGDAX14+iBoJuQDO0igAUK5+VxLR2a0cW83UUDf0l4gETilvS9qsGxgzzbQ== tarball: 'file:projects/keyvault-keys.tgz' version: 0.0.0 'file:projects/keyvault-secrets.tgz': @@ -9547,16 +10739,16 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/fs-extra': 8.1.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 + '@types/node': 8.10.62 '@types/query-string': 6.2.0 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 chai: 4.2.0 cross-env: 7.0.2 @@ -9570,7 +10762,7 @@ packages: fs-extra: 8.1.0 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9592,16 +10784,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 source-map-support: 0.5.19 - tslib: 2.0.0 - typescript: 3.9.6 + tslib: 2.0.1 + typescript: 3.9.7 url: 0.11.0 dev: false name: '@rush-temp/keyvault-secrets' resolution: - integrity: sha512-E+Z8eglyBz/UOXKAzRn8KcuIWEjjGdW69ZSlm3uvxE1KGTb72p3z03Fis19WaBLE3IzMpJWhK9RJkp8emoG46Q== + integrity: sha512-qRj7Yycir1z3Xf5BFSGpLLE/LC3i5geLcM4rjLVubygO83j+x1adRnYB8S9A0kODWhjhozh94exzD7JyS8t63g== tarball: 'file:projects/keyvault-secrets.tgz' version: 0.0.0 'file:projects/logger.tgz': @@ -9609,18 +10801,18 @@ packages: '@microsoft/api-extractor': 7.7.11 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 chai: 4.2.0 cross-env: 7.0.2 - delay: 4.3.0 + delay: 4.4.0 dotenv: 8.2.0 eslint: 6.8.0 eslint-config-prettier: 6.11.0_eslint@6.8.0 @@ -9629,7 +10821,7 @@ packages: eslint-plugin-promise: 4.2.1 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9647,14 +10839,14 @@ packages: rollup: 1.32.1 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - sinon: 9.0.2 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + sinon: 9.0.3 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 dev: false name: '@rush-temp/logger' resolution: - integrity: sha512-hNBX+jdOuiLLL4tZ3Tj37DCPmSAaqTSoI3DysAOy1lxW9ylIYPIWSkBOoEKw6mgzWx+EAnddcxR7biuAJnd/HA== + integrity: sha512-KhMQ8SGiLx75uy0tjxJy1TOPqejl1QvhGa0+Gfzno1zqyPn4+UOJxsXgJOYK1aViPujcLpe7L1XFXpecg06ZCw== tarball: 'file:projects/logger.tgz' version: 0.0.0 'file:projects/monitor-opentelemetry-exporter.tgz': @@ -9664,9 +10856,9 @@ packages: '@opentelemetry/semantic-conventions': 0.10.2 '@opentelemetry/tracing': 0.10.2 '@types/mocha': 7.0.2 - '@types/node': 10.17.13 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 10.17.28 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 c8: 7.3.0 eslint: 6.8.0 eslint-config-prettier: 6.11.0_eslint@6.8.0 @@ -9681,9 +10873,9 @@ packages: nock: 12.0.3 prettier: 1.19.1 rimraf: 3.0.2 - sinon: 9.0.2 + sinon: 9.0.3 ts-mocha: 7.0.0_mocha@7.2.0 - typescript: 3.9.6 + typescript: 3.9.7 dev: false name: '@rush-temp/monitor-opentelemetry-exporter' resolution: @@ -9699,14 +10891,14 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 avsc: 5.4.22 buffer: 5.6.0 chai: 4.2.0 @@ -9720,7 +10912,7 @@ packages: eslint-plugin-promise: 4.2.1 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9741,14 +10933,14 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 source-map-support: 0.5.19 - tslib: 2.0.0 - typescript: 3.9.6 + tslib: 2.0.1 + typescript: 3.9.7 dev: false name: '@rush-temp/schema-registry-avro' resolution: - integrity: sha512-UXMtvmv3Sdwo+Gl8f9V7fFw6RRoW72w9DyVxAq4PtIMnoh4EA2vf98PnPztuSWaOsuA+Nrfch7xpLl+dcHS5+g== + integrity: sha512-yX0mQoFEcJU0TutKrNX+paUCgaMJPgTkk2lYwX0qcaP5vj9Xky9QUm3EBCt2i4RR4J1/7yXVeLm9/qEeWCj5Jg== tarball: 'file:projects/schema-registry-avro.tgz' version: 0.0.0 'file:projects/schema-registry.tgz': @@ -9759,14 +10951,14 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 cross-env: 7.0.2 @@ -9778,7 +10970,7 @@ packages: eslint-plugin-promise: 4.2.1 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9798,14 +10990,14 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 source-map-support: 0.5.19 - tslib: 2.0.0 - typescript: 3.9.6 + tslib: 2.0.1 + typescript: 3.9.7 dev: false name: '@rush-temp/schema-registry' resolution: - integrity: sha512-GhcAmAIwEblMY6QAdmD6c0qF3H3iB+zPHYH9Ei07I6wTjh5DBHgrUcyjFG2oMWOTbtjud5Ead3YYEyURo9U+GQ== + integrity: sha512-YyJIMZ6IfDbDmMGbZzbwr+bpyWIkJyemTGNbwoYgRf0bOoqoO2fk4DGCTAFK7LRMSkuS2v4rluDtasvNM/Wg7Q== tarball: 'file:projects/schema-registry.tgz' version: 0.0.0 'file:projects/search-documents.tgz': @@ -9816,14 +11008,14 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -9835,7 +11027,7 @@ packages: inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9855,16 +11047,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/search-documents' resolution: - integrity: sha512-N/adRny91VkK9QIxFovQyAKCNYbT0ZBJ9vKd9EG07oo7uoOTZmze/fDXyErn6m+yatsehrN47xNKxGIozcs8TQ== + integrity: sha512-oArst7KTGgSRWZCi5DHA9szpvxacRf0VAvKBXiAH+hN0gLJAuPDClOpvooBRmAY+RXyOmrQ6b0WA3yIyRO9Gjw== tarball: 'file:projects/search-documents.tgz' version: 0.0.0 'file:projects/service-bus.tgz': @@ -9877,20 +11069,20 @@ packages: '@rollup/plugin-inject': 4.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/debug': 4.1.5 '@types/glob': 7.1.3 '@types/is-buffer': 2.0.0 '@types/long': 4.0.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 '@types/ws': 7.2.6 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 buffer: 5.6.0 chai: 4.2.0 @@ -9898,7 +11090,7 @@ packages: chai-exclude: 2.0.2_chai@4.2.0 cross-env: 7.0.2 debug: 4.1.1 - delay: 4.3.0 + delay: 4.4.0 dotenv: 8.2.0 downlevel-dts: 0.4.0 eslint: 6.8.0 @@ -9907,12 +11099,12 @@ packages: eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 esm: 3.2.25 - events: 3.1.0 + events: 3.2.0 glob: 7.1.6 is-buffer: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9936,15 +11128,15 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - sinon: 9.0.2 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + sinon: 9.0.3 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 ws: 7.3.1 dev: false name: '@rush-temp/service-bus' resolution: - integrity: sha512-yUNItoZnv5e6MhbT7s5BEKkJ/aXAn+He9qxRb6hEQjnweh3vpR4YxsRzTNnAYrAxcnlksrx0OpGjL3/gsI3Olw== + integrity: sha512-ToeWVBzLw1MTLfNAo1OjUtI72XfTvYWQ4tyRwZx36W9QQf9E6KgyLJQ/jrRxCYh+m6ozKn1Rpe15yQETGCRtnA== tarball: 'file:projects/service-bus.tgz' version: 0.0.0 'file:projects/storage-blob-changefeed.tgz': @@ -9955,13 +11147,13 @@ packages: '@opentelemetry/api': 0.10.2 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@types/sinon': 9.0.4 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@types/sinon': 9.0.5 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -9973,11 +11165,11 @@ packages: eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 esm: 3.2.25 - events: 3.1.0 + events: 3.2.0 inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -9998,17 +11190,17 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - sinon: 9.0.2 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + sinon: 9.0.3 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/storage-blob-changefeed' resolution: - integrity: sha512-kiQsE6/mLEB5LZoGZFSgH+PgkeeBETkp1HUoTLwYd8IK6WgUaU63hc7FO8LYESW0oP05LeJdVLTtMA5jc2uK9g== + integrity: sha512-FLVI19gJ6zHw8WIBlzETmj94I7iK57WJAJ6NwWE+FjdgtT5kfTNHqGGqk01NRgZvUL4x9zr5YLe+HdxhgrUEhg== tarball: 'file:projects/storage-blob-changefeed.tgz' version: 0.0.0 'file:projects/storage-blob.tgz': @@ -10019,12 +11211,12 @@ packages: '@opentelemetry/api': 0.10.2 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -10036,11 +11228,11 @@ packages: eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 esm: 3.2.25 - events: 3.1.0 + events: 3.2.0 inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -10061,16 +11253,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/storage-blob' resolution: - integrity: sha512-LgTbZCpuxCffYP45vW6aJiEjl3WSsdhk0eZqgGwSLeSDVx/4+bHjRAWJOgVNG49jUNl4ijV5VJbJy0Rjs1uAKQ== + integrity: sha512-mqmWTh6ixzHBWNWDXJj4Da0518lkLGlDygVMA2JD38j6xM6om2ZxAT0NrKZOlSWxf/vMSAyLVyG8P6e+BoXhGw== tarball: 'file:projects/storage-blob.tgz' version: 0.0.0 'file:projects/storage-file-datalake.tgz': @@ -10081,14 +11273,14 @@ packages: '@opentelemetry/api': 0.10.2 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/fs-extra': 8.1.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 + '@types/node': 8.10.62 '@types/query-string': 6.2.0 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -10100,13 +11292,13 @@ packages: eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 esm: 3.2.25 - events: 3.1.0 + events: 3.2.0 execa: 3.4.0 fs-extra: 8.1.0 inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -10128,16 +11320,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/storage-file-datalake' resolution: - integrity: sha512-T5+VpauSuj3fPBJ7jLMk3qgnFVihSVQjcABp/XHalvOBJWV9RbLpNBNyHKhheJumjvLHFVWBcZQ63xUF46Ag6w== + integrity: sha512-5YtLYpwOPzzrdyfCRgexByrV/nucSqS2bJqq+BJzIQzbdN7WpPIHDc1/AZNvE7wvwL1vU/93ukBbnSkOwkVCOw== tarball: 'file:projects/storage-file-datalake.tgz' version: 0.0.0 'file:projects/storage-file-share.tgz': @@ -10147,12 +11339,12 @@ packages: '@opentelemetry/api': 0.10.2 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -10164,11 +11356,11 @@ packages: eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 esm: 3.2.25 - events: 3.1.0 + events: 3.2.0 inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -10189,16 +11381,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/storage-file-share' resolution: - integrity: sha512-SekSXTqd9ixQmb8XYg/Y2xou+LnCbm+zKysZe9AwvadsqTgyaMpm3wgS0OEdBbeGte+Crs/Ep4GcSrBqwryHNg== + integrity: sha512-hgGhjJAN8o87j4jcNmeLebZmP6z7JynLDLhvg/oqyupdQyJ8rhTAO4NIH2oawYQVDmYbQeshyhfnHDgWeCr1Ww== tarball: 'file:projects/storage-file-share.tgz' version: 0.0.0 'file:projects/storage-internal-avro.tgz': @@ -10206,12 +11398,12 @@ packages: '@microsoft/api-extractor': 7.7.11 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -10226,7 +11418,7 @@ packages: inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -10247,16 +11439,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/storage-internal-avro' resolution: - integrity: sha512-ifiezDR4YN49IrAiLisX+IJNVHhdYN4oIzpVNxwyHqvOWyT1sZSUtan8EiXNV0Zzj5fIlGtHdLOcOjO88UUPMg== + integrity: sha512-sxcVlrwOlLlthyr1hvhiWEtjyii+ksWuEPCAYkpiaxzys2tvjXfnZe4QhPkoJ2mB40+RXDaYBZB30wpaiZKXpw== tarball: 'file:projects/storage-internal-avro.tgz' version: 0.0.0 'file:projects/storage-queue.tgz': @@ -10267,12 +11459,12 @@ packages: '@opentelemetry/api': 0.10.2 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 assert: 1.5.0 cross-env: 7.0.2 dotenv: 8.2.0 @@ -10287,7 +11479,7 @@ packages: inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -10308,16 +11500,16 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 source-map-support: 0.5.19 - ts-node: 8.10.2_typescript@3.9.6 - tslib: 2.0.0 - typescript: 3.9.6 + ts-node: 8.10.2_typescript@3.9.7 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/storage-queue' resolution: - integrity: sha512-op35DDM5BDADPBVZJ52spPgulRrN7kExhcF0OaBa95EJULDPUaQCMghiLROs2Nf/vZHMvcn6G0xZNrWztO8g/A== + integrity: sha512-RYCLGMgLGqldqIrUOIcv6Wf/o66J0dwXkrKPLv8WZQNrEx316zqeDwW44yskOh1fut/sZ16IYIYOyGqPZgzCFQ== tarball: 'file:projects/storage-queue.tgz' version: 0.0.0 'file:projects/template.tgz': @@ -10328,15 +11520,14 @@ packages: '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/chai-as-promised': 7.1.3 '@types/mocha': 7.0.2 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 - assert: 1.5.0 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 chai-as-promised: 7.1.1_chai@4.2.0 cross-env: 7.0.2 @@ -10346,11 +11537,11 @@ packages: eslint-plugin-no-null: 1.0.2_eslint@6.8.0 eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 - events: 3.1.0 + events: 3.2.0 inherits: 2.0.4 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -10359,6 +11550,7 @@ packages: karma-mocha: 2.0.1 karma-mocha-reporter: 2.2.5_karma@5.1.1 karma-remap-istanbul: 0.6.0_karma@5.1.1 + karma-typescript: 5.0.3_karma@5.1.1+typescript@3.9.7 mocha: 7.2.0 mocha-junit-reporter: 1.23.3_mocha@7.2.0 nyc: 14.1.1 @@ -10368,41 +11560,41 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + tslib: 2.0.1 + typescript: 3.9.7 util: 0.12.3 dev: false name: '@rush-temp/template' resolution: - integrity: sha512-vJjr/veuy4Sq3JebCiXJbAIfE3F4yzb2kXpJOelmVFzJF96IY96rrXeCl+H96OTIhv5gzEp2iu3ub9/DhMcxEw== + integrity: sha512-92SZ7vUoqPzfEgb2N1KIdamZtDFFHQoX74LPdAwyrv6SCpkeN6QMLPNOjBGiQtY0bAzz4eTqKfss+uCCBEmRHQ== tarball: 'file:projects/template.tgz' version: 0.0.0 'file:projects/test-utils-perfstress.tgz': dependencies: '@opentelemetry/api': 0.10.2 '@types/minimist': 1.2.0 - '@types/node': 8.10.61 + '@types/node': 8.10.62 '@types/node-fetch': 2.5.7 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 eslint: 6.8.0 eslint-plugin-no-only-tests: 2.4.0 eslint-plugin-promise: 4.2.1 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-env-preprocessor: 0.1.1 minimist: 1.2.5 node-fetch: 2.6.0 prettier: 1.19.1 rimraf: 3.0.2 - tslib: 2.0.0 - typescript: 3.9.6 + tslib: 2.0.1 + typescript: 3.9.7 dev: false name: '@rush-temp/test-utils-perfstress' resolution: - integrity: sha512-aHqDHB2NxG32mo2bEmOAuws0f+mxo0Ii1iGrGe6Skn+bjTfGYDy31iRpFoG4ELvOttcqt6Y4MsAG2xgT0IBzog== + integrity: sha512-tXRdNAdhCVTKYyCxUYyHzdqXIz0NHeWvERo1f4ni78zZ3TWTi6FvFg+MnaSBkWDJTs+MOrRx/2YH6Us12bG8bQ== tarball: 'file:projects/test-utils-perfstress.tgz' version: 0.0.0 'file:projects/test-utils-recorder.tgz': @@ -10410,18 +11602,18 @@ packages: '@opentelemetry/api': 0.10.2 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 - '@rollup/plugin-node-resolve': 8.1.0_rollup@1.32.1 + '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 '@rollup/plugin-replace': 2.3.3_rollup@1.32.1 - '@types/chai': 4.2.11 + '@types/chai': 4.2.12 '@types/fs-extra': 8.1.1 '@types/md5': 2.2.0 '@types/mocha': 7.0.2 '@types/mock-fs': 4.10.0 '@types/mock-require': 2.0.0 '@types/nise': 1.4.0 - '@types/node': 8.10.61 - '@typescript-eslint/eslint-plugin': 2.34.0_3787943315ebc5ea524d5c102dc9e452 - '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.6 + '@types/node': 8.10.62 + '@typescript-eslint/eslint-plugin': 2.34.0_5004700905763c91177aaa7d1d0d56ac + '@typescript-eslint/parser': 2.34.0_eslint@6.8.0+typescript@3.9.7 chai: 4.2.0 eslint: 6.8.0 eslint-plugin-no-only-tests: 2.4.0 @@ -10429,7 +11621,7 @@ packages: fs-extra: 8.1.0 karma: 5.1.1 karma-chrome-launcher: 3.1.0 - karma-coverage: 2.0.2 + karma-coverage: 2.0.3 karma-edge-launcher: 0.4.2_karma@5.1.1 karma-env-preprocessor: 0.1.1 karma-firefox-launcher: 1.3.0 @@ -10440,10 +11632,10 @@ packages: karma-mocha: 2.0.1 karma-mocha-reporter: 2.2.5_karma@5.1.1 karma-remap-istanbul: 0.6.0_karma@5.1.1 - md5: 2.2.1 + md5: 2.3.0 mocha: 7.2.0 mocha-junit-reporter: 1.23.3_mocha@7.2.0 - mock-fs: 4.12.0 + mock-fs: 4.13.0 mock-require: 3.0.3 nise: 4.0.4 nock: 12.0.3 @@ -10455,35 +11647,35 @@ packages: rollup-plugin-shim: 1.0.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 rollup-plugin-terser: 5.3.0_rollup@1.32.1 - rollup-plugin-visualizer: 4.0.4_rollup@1.32.1 - tslib: 2.0.0 - typescript: 3.9.6 + rollup-plugin-visualizer: 4.1.1_rollup@1.32.1 + tslib: 2.0.1 + typescript: 3.9.7 xhr-mock: 2.5.1 dev: false name: '@rush-temp/test-utils-recorder' resolution: - integrity: sha512-Oiq+7gA8N1lONF4O1xl+YKv9vjxCpYAbSLYntF3u3fYh54eYROhfDfaLQbd07oCoHDr0fw05Di4YLtg95EK2VQ== + integrity: sha512-SIWOil7pRjJo4BUcl7JNA01ZCnnnmYea4mI13xsuzq0tX3+APUFyPNncKn1DVTqKzY5NIuK8WTnUNLqhjhwu6g== tarball: 'file:projects/test-utils-recorder.tgz' version: 0.0.0 'file:projects/testhub.tgz': dependencies: '@azure/event-hubs': 2.1.4 - '@types/node': 8.10.61 - '@types/uuid': 8.0.0 + '@types/node': 8.10.62 + '@types/uuid': 8.3.0 '@types/yargs': 15.0.5 async-lock: 1.2.4 death: 1.1.0 debug: 4.1.1 - rhea: 1.0.23 + rhea: 1.0.24 rimraf: 3.0.2 - tslib: 2.0.0 - typescript: 3.9.6 - uuid: 8.2.0 - yargs: 15.4.0 + tslib: 2.0.1 + typescript: 3.9.7 + uuid: 8.3.0 + yargs: 15.4.1 dev: false name: '@rush-temp/testhub' resolution: - integrity: sha512-wWCeWZLGFaZKJOdG2zTpsvZxIdzw5SSDZfCYo/gcI3i0/IK+ukijKncP1wy1SpQG7pnc0CRY3IaJ6UdaMI93bg== + integrity: sha512-uZaBXfZM1ISycMx+p8kUd/Yqui/KgjgUm/CyAzxK2wkOmqKF66JuLD5lbkH4tXBi+F5rL59UaMhjjxskb6qbzA== tarball: 'file:projects/testhub.tgz' version: 0.0.0 registry: '' @@ -10491,8 +11683,13 @@ specifiers: '@rush-temp/abort-controller': 'file:./projects/abort-controller.tgz' '@rush-temp/ai-anomaly-detector': 'file:./projects/ai-anomaly-detector.tgz' '@rush-temp/ai-form-recognizer': 'file:./projects/ai-form-recognizer.tgz' + '@rush-temp/ai-metrics-advisor': 'file:./projects/ai-metrics-advisor.tgz' '@rush-temp/ai-text-analytics': 'file:./projects/ai-text-analytics.tgz' '@rush-temp/app-configuration': 'file:./projects/app-configuration.tgz' + '@rush-temp/communication-administration': 'file:./projects/communication-administration.tgz' + '@rush-temp/communication-chat': 'file:./projects/communication-chat.tgz' + '@rush-temp/communication-common': 'file:./projects/communication-common.tgz' + '@rush-temp/communication-sms': 'file:./projects/communication-sms.tgz' '@rush-temp/core-amqp': 'file:./projects/core-amqp.tgz' '@rush-temp/core-arm': 'file:./projects/core-arm.tgz' '@rush-temp/core-asynciterator-polyfill': 'file:./projects/core-asynciterator-polyfill.tgz' diff --git a/common/tools/dev-tool/package.json b/common/tools/dev-tool/package.json index a019a27f1272..a6e0be32152b 100644 --- a/common/tools/dev-tool/package.json +++ b/common/tools/dev-tool/package.json @@ -42,6 +42,10 @@ }, "devDependencies": { "@azure/eslint-plugin-azure-sdk": "^3.0.0", + "@rollup/plugin-commonjs": "11.0.2", + "@rollup/plugin-json": "^4.0.0", + "@rollup/plugin-multi-entry": "^3.0.0", + "@rollup/plugin-node-resolve": "^8.0.0", "@types/chai": "^4.1.6", "@types/chai-as-promised": "^7.1.0", "@types/chalk": "~2.2.0", @@ -52,10 +56,16 @@ "@types/prettier": "~2.0.1", "@typescript-eslint/eslint-plugin": "^2.0.0", "@typescript-eslint/parser": "^2.0.0", + "builtin-modules": "~3.1.0", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", "eslint": "^6.1.0", "mocha": "^7.1.1", - "rimraf": "^3.0.0" + "rimraf": "^3.0.0", + "rollup": "^1.16.3", + "rollup-plugin-node-builtins": "~2.1.2", + "rollup-plugin-node-globals": "~1.4.0", + "rollup-plugin-sourcemaps": "^0.4.2", + "rollup-plugin-visualizer": "^4.0.4" } } diff --git a/common/tools/dev-tool/shared-config/rollup.js b/common/tools/dev-tool/shared-config/rollup.js new file mode 100644 index 000000000000..6e1ba578783f --- /dev/null +++ b/common/tools/dev-tool/shared-config/rollup.js @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +// This shim file simply loads ts-node and then requires the +// TypeScript file corresponding to the rollup base config + +const { join } = require("path"); + +require("ts-node").register({ + transpileOnly: true, + project: join(__dirname, "../tsconfig.json") +}); + +module.exports = require(join(__dirname, "../src/config/rollup.base.config.ts")); diff --git a/common/tools/dev-tool/src/ambient.d.ts b/common/tools/dev-tool/src/ambient.d.ts new file mode 100644 index 000000000000..ace059636815 --- /dev/null +++ b/common/tools/dev-tool/src/ambient.d.ts @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation +// Licensed under the MIT license. + +/** + * Some delcarations for plugins that have missing/old declarations in + * NPM. + */ + +// #region rollup + +type Plugin = import("rollup").Plugin; + +declare module "rollup-plugin-sourcemaps" { + export default function(): Plugin; +} + +declare module "rollup-plugin-node-globals" { + export default function(): Plugin; +} + +declare module "rollup-plugin-node-builtins" { + export default function(): Plugin; +} + +declare module "@rollup/plugin-multi-entry" { + interface MultiEntryOptions { + exports: boolean; + } + export default function(opts: MultiEntryOptions): Plugin; +} + +// #endregion diff --git a/common/tools/dev-tool/src/config/rollup.base.config.ts b/common/tools/dev-tool/src/config/rollup.base.config.ts new file mode 100644 index 000000000000..1d84a85ae54f --- /dev/null +++ b/common/tools/dev-tool/src/config/rollup.base.config.ts @@ -0,0 +1,134 @@ +import { RollupOptions, RollupWarning, WarningHandler } from "rollup"; + +import nodeResolve from "@rollup/plugin-node-resolve"; +import cjs from "@rollup/plugin-commonjs"; +import sourcemaps from "rollup-plugin-sourcemaps"; +import multiEntry from "@rollup/plugin-multi-entry"; +import json from "@rollup/plugin-json"; +import nodeBuiltinsPlugin from "rollup-plugin-node-builtins"; +import nodeGlobals from "rollup-plugin-node-globals"; + +import nodeBuiltins from "builtin-modules"; + +interface PackageJson { + name: string; + module: string; + dependencies: Record; + devDependencies: Record; +} + +// #region Warning Handler + +function ignoreNiseSinonEvalWarnings(warning: RollupWarning): boolean { + return ( + warning.code === "EVAL" && + (warning.id?.includes("node_modules/nise") || warning.id?.includes("node_modules/sinon")) === + true + ); +} + +function ignoreChaiCircularDependencyWarnings(warning: RollupWarning): boolean { + return ( + warning.code === "CIRCULAR_DEPENDENCY" && + warning.importer?.includes("node_modules/chai") === true + ); +} + +const warningInhibitors: Array<(warning: RollupWarning) => boolean> = [ + ignoreChaiCircularDependencyWarnings, + ignoreNiseSinonEvalWarnings +]; + +/** + * Construct a warning handler for the shared rollup configuration + * that ignores certain warnings that are not relevant to testing. + */ +function makeOnWarnForTesting(): (warning: RollupWarning, warn: WarningHandler) => void { + return (warning, warn) => { + // If every inhibitor returns false (i.e. no inhibitors), then show the warning + if (warningInhibitors.every((inhib) => !inhib(warning))) { + warn(warning); + } + }; +} + +// #endregion + +function makeBrowserTestConfig() { + const config: RollupOptions = { + input: ["dist-esm/test/{,!(node)/**/}*.spec.js"], + output: { + file: `dist-test/index.browser.js`, + format: "umd", + sourcemap: true, + globals: { "fs-extra": "undefined" } + }, + preserveSymlinks: false, + // fs-extra must be marked as external in order to avoid an initialization error + external: ["fs-extra"], + plugins: [ + multiEntry({ exports: false }), + nodeResolve({ + mainFields: ["module", "browser"], + preferBuiltins: true + }), + cjs({ + namedExports: { + chai: ["assert", "use"], + "@opentelemetry/api": ["CanonicalCode", "SpanKind", "TraceFlags"] + } + }), + json(), + sourcemaps(), + nodeGlobals(), + nodeBuiltinsPlugin() + //viz({ filename: "dist-test/browser-stats.html", sourcemap: true }) + ], + onwarn: makeOnWarnForTesting(), + // Disable tree-shaking of test code. In rollup-plugin-node-resolve@5.0.0, + // rollup started respecting the "sideEffects" field in package.json. Since + // our package.json sets "sideEffects=false", this also applies to test + // code, which causes all tests to be removed by tree-shaking. + treeshake: false + }; + + // (config.external as string[]).push(...Object.keys(pkg.devDependencies)); + + return config; +} + +export interface ConfigurationOptions { + disableBrowserBundle: boolean; +} + +const defaultConfigurationOptions: ConfigurationOptions = { + disableBrowserBundle: false +}; + +export function makeConfig(pkg: PackageJson, options?: Partial) { + options = { + ...defaultConfigurationOptions, + ...(options ?? {}) + }; + + const baseConfig = { + // Use the package's module field if it has one + input: pkg["module"] ?? "dist-esm/src/index.js", + external: [ + ...nodeBuiltins, + ...Object.keys(pkg.dependencies), + ...Object.keys(pkg.devDependencies) + ], + output: { file: "dist/index.js", format: "cjs", sourcemap: true }, + preserveSymlinks: false, + plugins: [sourcemaps(), nodeResolve(), cjs()] + }; + + const config: RollupOptions[] = [baseConfig as RollupOptions]; + + if (!options.disableBrowserBundle) { + config.push(makeBrowserTestConfig()); + } + + return config; +} diff --git a/common/tools/eslint-plugin-azure-sdk/README.md b/common/tools/eslint-plugin-azure-sdk/README.md index bb56322a27fa..91b86d919bbd 100644 --- a/common/tools/eslint-plugin-azure-sdk/README.md +++ b/common/tools/eslint-plugin-azure-sdk/README.md @@ -16,11 +16,9 @@ Next, install `@azure/eslint-plugin-azure-sdk`: npm install @azure/eslint-plugin-azure-sdk --save-dev ``` -## Usage +## Configuration -The `azure-sdk-for-js` repository contains a base `.eslintrc.json` file at the root of the `sdk` directory. - -To enable `@azure/eslint-plugin-azure-sdk`, you'll need to add another `.eslintrc.json` file at the same location as your `package.json` file as follows: (note that the path to the base `.eslintrc.json` file may be different) +To enable `@azure/eslint-plugin-azure-sdk`, you'll need to add it to the list of `devDependencies` in your `package.json`. ESLint will automatically use the configuration file `sdk/.eslintrc.json` as explained in the [docs](https://eslint.org/docs/user-guide/configuring#using-configuration-files-2). Optionally, you can have a custom `.eslintrc.json` file at the same location as your `package.json` file. A very simple one looks as follows: (note that the path to the base `.eslintrc.json` file may be different) ```json { diff --git a/common/tools/eslint-plugin-azure-sdk/docs/rules/ts-naming-options.md b/common/tools/eslint-plugin-azure-sdk/docs/rules/ts-naming-options.md index 2e24a43f564b..50c083796dc2 100644 --- a/common/tools/eslint-plugin-azure-sdk/docs/rules/ts-naming-options.md +++ b/common/tools/eslint-plugin-azure-sdk/docs/rules/ts-naming-options.md @@ -8,6 +8,9 @@ Requires client method options parameter types to be suffixed with `Options` and ```ts class ServiceClient { + constructor(options: ServiceClientOptions) { + /* code */ + } createItem(options: CreateItemOptions): Item { /* code to return instance of Item */ } @@ -21,6 +24,9 @@ class ServiceClient { ```ts class ServiceClient { + constructor(options: Options) { + /* code */ + } createItem(options: Options): Item { /* code to return instance of Item */ } diff --git a/common/tools/eslint-plugin-azure-sdk/package.json b/common/tools/eslint-plugin-azure-sdk/package.json index 44bd6d4b2183..7127890b56db 100644 --- a/common/tools/eslint-plugin-azure-sdk/package.json +++ b/common/tools/eslint-plugin-azure-sdk/package.json @@ -21,14 +21,14 @@ } ], "license": "MIT", - "homepage": "https://github.com/Azure/azure-sdk-tools/tree/master/tools/eslint-plugin-azure-sdk", + "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/master/common/tools/eslint-plugin-azure-sdk", "repository": { "type": "git", - "url": "https://github.com/Azure/azure-sdk-tools.git", - "directory": "tools/eslint-plugin-azure-sdk" + "url": "https://github.com/Azure/azure-sdk-for-js.git", + "directory": "common/tools/eslint-plugin-azure-sdk" }, "bugs": { - "url": "https://github.com/Azure/azure-sdk-tools/issues" + "url": "https://github.com/Azure/azure-sdk-for-js/issues" }, "main": "dist/index.js", "files": [ diff --git a/common/tools/eslint-plugin-azure-sdk/src/rules/ts-naming-options.ts b/common/tools/eslint-plugin-azure-sdk/src/rules/ts-naming-options.ts index afad7fee1208..1303e07ade0c 100644 --- a/common/tools/eslint-plugin-azure-sdk/src/rules/ts-naming-options.ts +++ b/common/tools/eslint-plugin-azure-sdk/src/rules/ts-naming-options.ts @@ -2,7 +2,7 @@ // Licensed under the MIT license. /** - * @file Rule to require client method option parameter type names to be suffixed with Options and prefixed with the method name. + * @file Rule to require client method option parameter type names to be suffixed with Options and prefixed with the class name if it is a class constructor and prefixed with the method name otherwise. * @author Arpan Laha */ @@ -33,7 +33,12 @@ export = { getPublicMethods(node).forEach((method: MethodDefinition): void => { const methodIdentifier = method.key as Identifier; const TSFunction = method.value as TSESTree.FunctionExpression; - + const optionsRegex = + // the null check will always succeed because we apply this only for + // classes where id.name=/Client$/. + method.kind === "constructor" && node.id !== null + ? new RegExp(`${node.id.name}Options`, "i") + : new RegExp(`${methodIdentifier.name}Options`, "i"); // look for parameters with types suffixed with Options TSFunction.params.forEach((param: TSESTree.Parameter): void => { // checks to validate parameter @@ -46,11 +51,11 @@ export = { const paramTypeName = typeAnnotation.typeName.name; if (paramTypeName.endsWith("Options")) { // check that parameter is prefixed with method name - const optionsRegex = new RegExp(`${methodIdentifier.name}Options`, "i"); if (!optionsRegex.test(paramTypeName)) { + const prefixKind = method.kind === "constructor" ? "class" : "method"; context.report({ node: param, - message: "options parameter type is not prefixed with the method name" + message: `options parameter type is not prefixed with the ${prefixKind} name` }); } } diff --git a/common/tools/eslint-plugin-azure-sdk/src/utils/metadata.ts b/common/tools/eslint-plugin-azure-sdk/src/utils/metadata.ts index f849aa75f257..e4e67fd677da 100644 --- a/common/tools/eslint-plugin-azure-sdk/src/utils/metadata.ts +++ b/common/tools/eslint-plugin-azure-sdk/src/utils/metadata.ts @@ -19,7 +19,7 @@ export const getRuleMetaData = ( description: ruleDescription, category: "Best Practices", recommended: true, - url: `https://github.com/Azure/azure-sdk-tools/blob/master/tools/eslint-plugin-azure-sdk/docs/rules/${ruleName}.md` + url: `https://github.com/Azure/azure-sdk-for-js/tree/master/common/tools/eslint-plugin-azure-sdk/docs/rules/${ruleName}.md` }, schema: [] }; diff --git a/common/tools/eslint-plugin-azure-sdk/tests/rules/ts-naming-options.ts b/common/tools/eslint-plugin-azure-sdk/tests/rules/ts-naming-options.ts index 2893856a73ec..128c8fe7a171 100644 --- a/common/tools/eslint-plugin-azure-sdk/tests/rules/ts-naming-options.ts +++ b/common/tools/eslint-plugin-azure-sdk/tests/rules/ts-naming-options.ts @@ -32,6 +32,10 @@ ruleTester.run("ts-naming-options", rule, { code: "class ExampleClient { createExample(options: CreateExampleOptions) {}; upsertExample(options: UpsertExampleOptions) {}; };" }, + // class constructor + { + code: "class ExampleClient { constructor(options: ExampleClientOptions) {}; };" + }, // not a client { code: "class Example { createExample(options: Options) {}; };" @@ -45,6 +49,14 @@ ruleTester.run("ts-naming-options", rule, { message: "options parameter type is not prefixed with the method name" } ] + }, + { + code: "class ExampleClient { constructor(options: Options) {}; };", + errors: [ + { + message: "options parameter type is not prefixed with the class name" + } + ] } ] }); diff --git a/dataplane.code-workspace b/dataplane.code-workspace index 03a59dcee4d6..1100b1efacd5 100644 --- a/dataplane.code-workspace +++ b/dataplane.code-workspace @@ -104,6 +104,10 @@ "name": "logger", "path": "sdk/core/logger" }, + { + "name": "metrics-advisor", + "path": "sdk\\metricsadvisor\\ai-metrics-advisor" + }, { "name": "search", "path": "sdk/search/search-documents" diff --git a/eng/.docsettings.yml b/eng/.docsettings.yml index 586305ee5d71..2a61957e3f61 100644 --- a/eng/.docsettings.yml +++ b/eng/.docsettings.yml @@ -3,6 +3,7 @@ omitted_paths: - eng/* - sdk/*/arm-* - sdk/cognitiveservices/* + - sdk/communication/*/test/README.md - sdk/identity/identity/test/manual/* - sdk/identity/identity/test/manual-integration/* - sdk/test-utils/perfstress/README.md diff --git a/eng/common/README.md b/eng/common/README.md index a8f013b05b74..3f279bc7c4a8 100644 --- a/eng/common/README.md +++ b/eng/common/README.md @@ -20,6 +20,6 @@ The 'Sync eng/common directory' PRs will be created in the language repositories 3. More changes pushed to the **Tools PR**, will automatically triggered new pipeline runs in the respective **Sync PRs**. The **Sync PRs** are used to make sure the changes would not break any of the connected pipelines. 4. Once satisfied with the changes; - First make sure all checks in the **Sync PRs** are green and approved. The **Tools PR** contains links to all the **Sync PRs**. If for some reason the PRs is blocked by a CI gate get someone with permission to override and manually merge the PR. - - To test the state of all the **Sync PRs**, you can download the `PRsCreated.txt` artifact from your `azure-sdk-tools - sync - eng-common` pipeline, then run `./eng/scripts/Verify-And-Merge.ps1 ` which will output the status of each associated PR. + - To test the state of all the **Sync PRs**, you can download the `PRsCreated.txt` artifact from your `azure-sdk-tools - sync - eng-common` pipeline, then run `./eng/scripts/Verify-And-Merge-PRs.ps1 ` which will output the status of each associated PR. - Next approve the `VerifyAndMerge` job for the `azure-sdk-tools - sync - eng-common` pipeline triggered by your **Tools PR** which will automatically merge all the **Sync PRs**. You need `azure-sdk` devops contributor permissions to reach the `azure-sdk-tools - sync - eng-common` pipeline. - - Finally merge the **Tools PR**. \ No newline at end of file + - Finally merge the **Tools PR**. diff --git a/eng/common/TestResources/New-TestResources.ps1 b/eng/common/TestResources/New-TestResources.ps1 index 0552f9dd5e7b..59aab61fe728 100644 --- a/eng/common/TestResources/New-TestResources.ps1 +++ b/eng/common/TestResources/New-TestResources.ps1 @@ -55,7 +55,7 @@ param ( [string] $Location = '', [Parameter()] - [ValidateSet('AzureCloud', 'AzureUSGovernment', 'AzureChinaCloud')] + [ValidateSet('AzureCloud', 'AzureUSGovernment', 'AzureChinaCloud', 'Dogfood')] [string] $Environment = 'AzureCloud', [Parameter()] @@ -141,6 +141,7 @@ if (!$Location) { 'AzureCloud' = 'westus2'; 'AzureUSGovernment' = 'usgovvirginia'; 'AzureChinaCloud' = 'chinaeast2'; + 'Dogfood' = 'westus' }[$Environment] Write-Verbose "Location was not set. Using default location for environment: '$Location'" @@ -512,6 +513,7 @@ is based on the cloud to which the template is being deployed: * AzureCloud -> 'westus2' * AzureUSGovernment -> 'usgovvirginia' * AzureChinaCloud -> 'chinaeast2' +* Dogfood -> 'westus' .PARAMETER Environment Name of the cloud environment. The default is the Azure Public Cloud diff --git a/eng/common/TestResources/New-TestResources.ps1.md b/eng/common/TestResources/New-TestResources.ps1.md index 579def9a1db9..aab44b896d1f 100644 --- a/eng/common/TestResources/New-TestResources.ps1.md +++ b/eng/common/TestResources/New-TestResources.ps1.md @@ -322,6 +322,7 @@ is based on the cloud to which the template is being deployed: * AzureCloud -\> 'westus2' * AzureUSGovernment -\> 'usgovvirginia' * AzureChinaCloud -\> 'chinaeast2' +* Dogfood -\> 'westus' ```yaml Type: String diff --git a/eng/common/TestResources/Remove-TestResources.ps1 b/eng/common/TestResources/Remove-TestResources.ps1 index 0c5c464bc870..37f3f5851c60 100644 --- a/eng/common/TestResources/Remove-TestResources.ps1 +++ b/eng/common/TestResources/Remove-TestResources.ps1 @@ -43,7 +43,7 @@ param ( [string] $ServiceDirectory, [Parameter()] - [ValidateSet('AzureCloud', 'AzureUSGovernment', 'AzureChinaCloud')] + [ValidateSet('AzureCloud', 'AzureUSGovernment', 'AzureChinaCloud', 'Dogfood')] [string] $Environment = 'AzureCloud', [Parameter()] diff --git a/eng/common/TestResources/deploy-test-resources.yml b/eng/common/TestResources/deploy-test-resources.yml index 87438443d6aa..7f6b6daac96b 100644 --- a/eng/common/TestResources/deploy-test-resources.yml +++ b/eng/common/TestResources/deploy-test-resources.yml @@ -18,9 +18,7 @@ parameters: # } steps: - # New-TestResources command requires Az module - - pwsh: Install-Module -Name Az -Scope CurrentUser -AllowClobber -Force -Verbose - displayName: Install Azure PowerShell module + - template: /eng/common/TestResources/setup-az-modules.yml - pwsh: | $subscriptionConfiguration = @" @@ -36,5 +34,5 @@ steps: @subscriptionConfiguration ` -CI ` -Force ` - -Verbose + -Verbose | Out-Null displayName: Deploy test resources diff --git a/eng/common/TestResources/setup-az-modules.yml b/eng/common/TestResources/setup-az-modules.yml new file mode 100644 index 000000000000..9329ddf58805 --- /dev/null +++ b/eng/common/TestResources/setup-az-modules.yml @@ -0,0 +1,36 @@ +# Cloud Configuration will be splat into parameters of `Add-AzEnvironment`. It +# should be JSON in the form (not all fields are required): +# { +# "Name": "", +# "PublishSettingsFileUrl": "", +# "ServiceEndpoint": "", +# "ManagementPortalUrl": "", +# "ActiveDirectoryEndpoint": "", +# "ActiveDirectoryServiceEndpointResourceId": "", +# "ResourceManagerEndpoint": "", +# "GalleryEndpoint": "", +# "GraphEndpoint": "", +# "GraphAudience": "", +# "AzureKeyVaultDnsSuffix": "", +# "AzureKeyVaultServiceEndpointResourceId": "" +# } + +steps: + - bash: sudo chown -R runner ~/.Azure + displayName: (MacOS) Grant access to ~/.Azure + condition: contains(variables['OSVmImage'], 'mac') + + # New-TestResources command requires Az module + - pwsh: Install-Module -Name Az -Scope CurrentUser -AllowClobber -Force -Verbose + displayName: Install Azure PowerShell module + + - task: Powershell@2 + inputs: + displayName: Register Dogfood environment + targetType: inline + pwsh: true + script: | + $environmentSpec = @" + $(env-config-dogfood) + "@ | ConvertFrom-Json -AsHashtable; + Add-AzEnvironment @environmentSpec diff --git a/eng/common/pipelines/templates/steps/create-pull-request.yml b/eng/common/pipelines/templates/steps/create-pull-request.yml index a60d26c8fe98..e3b3e538c036 100644 --- a/eng/common/pipelines/templates/steps/create-pull-request.yml +++ b/eng/common/pipelines/templates/steps/create-pull-request.yml @@ -17,6 +17,7 @@ parameters: GHTeamReviewersVariable: '' # Multiple labels seperated by comma, e.g. "bug, APIView" PRLabels: '' + SkipCheckingForChanges: false steps: @@ -35,15 +36,19 @@ steps: echo "##vso[task.setvariable variable=HasChanges]$false" echo "No changes so skipping code push" } + displayName: Check for changes + condition: and(succeeded(), eq(${{ parameters.SkipCheckingForChanges }}, false)) + workingDirectory: ${{ parameters.WorkingDirectory }} + ignoreLASTEXITCODE: true +- pwsh: | # Remove the repo owner from the front of the repo name if it exists there $repoName = "${{ parameters.RepoName }}" -replace "^${{ parameters.RepoOwner }}/", "" echo "##vso[task.setvariable variable=RepoNameWithoutOwner]$repoName" - echo "RepoName = $repName" - - displayName: Check for changes + echo "RepoName = $repoName" + displayName: Remove Repo Owner from Repo Name + condition: succeeded() workingDirectory: ${{ parameters.WorkingDirectory }} - ignoreLASTEXITCODE: true - task: PowerShell@2 displayName: Push changes @@ -57,6 +62,7 @@ steps: -CommitMsg "${{ parameters.CommitMsg }}" -GitUrl "https://$(azuresdk-github-pat)@github.com/${{ parameters.PROwner }}/$(RepoNameWithoutOwner).git" -PushArgs "${{ parameters.PushArgs }}" + -SkipCommit $${{parameters.SkipCheckingForChanges}} - task: PowerShell@2 displayName: Create pull request diff --git a/eng/common/scripts/Add-Issue-Comment.ps1 b/eng/common/scripts/Add-Issue-Comment.ps1 new file mode 100644 index 000000000000..b945d70c3fe9 --- /dev/null +++ b/eng/common/scripts/Add-Issue-Comment.ps1 @@ -0,0 +1,53 @@ +[CmdletBinding(SupportsShouldProcess = $true)] +param( + [Parameter(Mandatory = $true)] + [string]$RepoOwner, + + [Parameter(Mandatory = $true)] + [string]$RepoName, + + [Parameter(Mandatory = $true)] + [string]$IssueNumber, + + [Parameter(Mandatory = $false)] + [string]$CommentPrefix, + + [Parameter(Mandatory = $true)] + [string]$Comment, + + [Parameter(Mandatory = $false)] + [string]$CommentPostFix, + + [Parameter(Mandatory = $true)] + [string]$AuthToken +) + +. "${PSScriptRoot}\logging.ps1" + +$headers = @{ + Authorization = "bearer $AuthToken" +} + +$apiUrl = "https://api.github.com/repos/$RepoOwner/$RepoName/issues/$IssueNumber/comments" + +$commentPrefixValue = [System.Environment]::GetEnvironmentVariable($CommentPrefix) +$commentValue = [System.Environment]::GetEnvironmentVariable($Comment) +$commentPostFixValue = [System.Environment]::GetEnvironmentVariable($CommentPostFix) + +if (!$commentPrefixValue) { $commentPrefixValue = $CommentPrefix } +if (!$commentValue) { $commentValue = $Comment } +if (!$commentPostFixValue) { $commentPostFixValue = $CommentPostFix } + +$PRComment = "$commentPrefixValue $commentValue $commentPostFixValue" + +$data = @{ + body = $PRComment +} + +try { + $resp = Invoke-RestMethod -Method POST -Headers $headers -Uri $apiUrl -Body ($data | ConvertTo-Json) +} +catch { + LogError "Invoke-RestMethod [ $apiUrl ] failed with exception:`n$_" + exit 1 +} \ No newline at end of file diff --git a/eng/common/scripts/New-ReleaseAsset.ps1 b/eng/common/scripts/New-ReleaseAsset.ps1 new file mode 100644 index 000000000000..83efcc097e9b --- /dev/null +++ b/eng/common/scripts/New-ReleaseAsset.ps1 @@ -0,0 +1,62 @@ +<# +.SYNOPSIS +Uploads the release asset and returns the resulting object from the upload + +.PARAMETER ReleaseTag +Tag to look up release + +.PARAMETER AssetPath +Location of the asset file to upload + +.PARAMETER GitHubRepo +Name of the GitHub repo to search (of the form Azure/azure-sdk-for-cpp) + +#> + +param ( + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] $ReleaseTag, + + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] $AssetPath, + + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] $GitHubRepo, + + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string] $GitHubPat +) + +# Get information about release at $ReleaseTag +$releaseInfoUrl = "https://api.github.com/repos/$GitHubRepo/releases/tags/$ReleaseTag" +Write-Verbose "Requesting release info from $releaseInfoUrl" +$release = Invoke-RestMethod ` + -Uri $releaseInfoUrl ` + -Method GET + +$assetFilename = Split-Path $AssetPath -Leaf + +# Upload URL comes in the literal form (yes, those curly braces) of: +# https://uploads.github.com/repos/Azure/azure-sdk-for-cpp/releases/123/assets{?name,label} +# Converts to something like: +# https://uploads.github.com/repos/Azure/azure-sdk-for-cpp/releases/123/assets?name=foo.tar.gz +# Docs: https://docs.github.com/en/rest/reference/repos#get-a-release-by-tag-name +$uploadUrl = $release.upload_url.Split('{')[0] + "?name=$assetFilename" + +Write-Verbose "Uploading $assetFilename to $uploadUrl" + +$asset = Invoke-RestMethod ` + -Uri $uploadUrl ` + -Method POST ` + -InFile $AssetPath ` + -Credential $credentials ` + -Headers @{ Authorization = "token $GitHubPat" } ` + -ContentType "application/gzip" + +Write-Verbose "Upload complete. Browser download URL: $($asset.browser_download_url)" + +return $asset diff --git a/eng/common/scripts/Queue-Pipeline.ps1 b/eng/common/scripts/Queue-Pipeline.ps1 new file mode 100644 index 000000000000..4e0122ca9256 --- /dev/null +++ b/eng/common/scripts/Queue-Pipeline.ps1 @@ -0,0 +1,56 @@ +[CmdletBinding(SupportsShouldProcess = $true)] +param( + [Parameter(Mandatory = $true)] + [string]$Organization, + + [Parameter(Mandatory = $true)] + [string]$Project, + + [Parameter(Mandatory = $true)] + [string]$SourceBranch, + + [Parameter(Mandatory = $true)] + [int]$DefinitionId, + + [Parameter(Mandatory = $false)] + [string]$VsoQueuedPipelines, + + [Parameter(Mandatory = $true)] + [string]$AuthToken +) + +. "${PSScriptRoot}\logging.ps1" + +$headers = @{ + Authorization = "Basic $AuthToken" +} + +$apiUrl = "https://dev.azure.com/$Organization/$Project/_apis/build/builds?api-version=6.0" + +$body = @{ + sourceBranch = $SourceBranch + definition = @{ id = $DefinitionId } +} + +Write-Verbose ($body | ConvertTo-Json) + +try { + $resp = Invoke-RestMethod -Method POST -Headers $headers $apiUrl -Body ($body | ConvertTo-Json) -ContentType application/json +} +catch { + LogError "Invoke-RestMethod [ $apiUrl ] failed with exception:`n$_" + exit 1 +} + +LogDebug "Pipeline [ $($resp.definition.name) ] queued at [ $($resp._links.web.href) ]" + +if ($VsoQueuedPipelines) { + $enVarValue = [System.Environment]::GetEnvironmentVariable($VsoQueuedPipelines) + $QueuedPipelineLinks = if ($enVarValue) { + "$enVarValue
[$($resp.definition.name)]($($resp._links.web.href))" + }else { + "[$($resp.definition.name)]($($resp._links.web.href))" + } + $QueuedPipelineLinks + Write-Host "##vso[task.setvariable variable=$VsoQueuedPipelines]$QueuedPipelineLinks" +} \ No newline at end of file diff --git a/eng/common/scripts/Submit-PullRequest.ps1 b/eng/common/scripts/Submit-PullRequest.ps1 index 7f3f0a544e9a..93ca35512c85 100644 --- a/eng/common/scripts/Submit-PullRequest.ps1 +++ b/eng/common/scripts/Submit-PullRequest.ps1 @@ -58,7 +58,7 @@ $headers = @{ $query = "state=open&head=${PROwner}:${PRBranch}&base=${BaseBranch}" -function AddLabels([int] $prNumber, [string] $prLabelString) +function AddLabels([int] $prNumber, [string] $prLabelString, [array] $existingLabels) { # Adding labels to the pr. if (-not $prLabelString) { @@ -68,6 +68,12 @@ function AddLabels([int] $prNumber, [string] $prLabelString) # Parse the labels from string to array $prLabelArray = @($prLabelString.Split(",") | % { $_.Trim() } | ? { return $_ }) + foreach ($label in $existingLabels) { + if ($prLabelArray -contains $label.name) { + continue + } + $prLabelArray += $label.name + } $prLabelUri = "https://api.github.com/repos/$RepoOwner/$RepoName/issues/$prNumber" $labelRequestData = @{ labels = $prLabelArray @@ -97,7 +103,7 @@ if ($resp.Count -gt 0) { # setting variable to reference the pull request by number Write-Host "##vso[task.setvariable variable=Submitted.PullRequest.Number]$($resp[0].number)" - AddLabels $resp[0].number $PRLabels + AddLabels $resp[0].number $PRLabels $resp[0].labels } else { $data = @{ @@ -124,5 +130,5 @@ else { # setting variable to reference the pull request by number Write-Host "##vso[task.setvariable variable=Submitted.PullRequest.Number]$($resp.number)" - AddLabels $resp.number $PRLabels + AddLabels $resp.number $PRLabels $resp.labels } diff --git a/eng/common/scripts/copy-docs-to-blobstorage.ps1 b/eng/common/scripts/copy-docs-to-blobstorage.ps1 index 9b7dea48b1d5..64bfab444411 100644 --- a/eng/common/scripts/copy-docs-to-blobstorage.ps1 +++ b/eng/common/scripts/copy-docs-to-blobstorage.ps1 @@ -257,30 +257,31 @@ if ($Language -eq "javascript") if ($Language -eq "dotnet") { - $PublishedPkgs = Get-ChildItem "$($DocLocation)/packages" | Where-Object -FilterScript {$_.Name.EndsWith(".nupkg") -and -not $_.Name.EndsWith(".symbols.nupkg")} - $PublishedDocs = Get-ChildItem "$($DocLocation)" | Where-Object -FilterScript {$_.Name.StartsWith("Docs.")} + $PublishedPkgs = Get-ChildItem "$($DocLocation)" | Where-Object -FilterScript {$_.Name.EndsWith(".nupkg") -and -not $_.Name.EndsWith(".symbols.nupkg")} + $PublishedDocs = Get-ChildItem "$($DocLocation)" | Where-Object -FilterScript {$_.Name.EndsWith("docs.zip")} - foreach ($Item in $PublishedDocs) { - $PkgName = $Item.Name.Remove(0, 5) - $PkgFullName = $PublishedPkgs | Where-Object -FilterScript {$_.Name -match "$($PkgName).\d"} - - if (($PkgFullName | Measure-Object).count -eq 1) - { - $DocVersion = $PkgFullName[0].BaseName.Remove(0, $PkgName.Length + 1) - - Write-Host "Start Upload for $($PkgName)/$($DocVersion)" - Write-Host "DocDir $($Item)" - Write-Host "PkgName $($PkgName)" - Write-Host "DocVersion $($DocVersion)" - $releaseTag = RetrieveReleaseTag "Nuget" $PublicArtifactLocation - Upload-Blobs -DocDir "$($Item)" -PkgName $PkgName -DocVersion $DocVersion -ReleaseTag $releaseTag - } - else - { - Write-Host "Package with the same name Exists. Upload Skipped" - continue - } + if (($PublishedPkgs.Count -gt 1) -or ($PublishedDoc.Count -gt 1)) + { + Write-Host "$($DocLocation) should contain only one (1) published package and docs" + Write-Host "No of Packages $($PublishedPkgs.Count)" + Write-Host "No of Docs $($PublishedDoc.Count)" + exit 1 } + + $DocsStagingDir = "$WorkingDirectory/docstaging" + $TempDir = "$WorkingDirectory/temp" + + New-Item -ItemType directory -Path $DocsStagingDir + New-Item -ItemType directory -Path $TempDir + + Expand-Archive -LiteralPath $PublishedDocs[0].FullName -DestinationPath $DocsStagingDir + $pkgProperties = ParseNugetPackage -pkg $PublishedPkgs[0].FullName -workingDirectory $TempDir + + Write-Host "Start Upload for $($pkgProperties.ReleaseTag)" + Write-Host "DocDir $($DocsStagingDir)" + Write-Host "PkgName $($pkgProperties.PackageId)" + Write-Host "DocVersion $($pkgProperties.PackageVersion)" + Upload-Blobs -DocDir "$($DocsStagingDir)" -PkgName $pkgProperties.PackageId -DocVersion $pkgProperties.PackageVersion -ReleaseTag $pkgProperties.ReleaseTag } if ($Language -eq "python") diff --git a/eng/common/scripts/git-branch-push.ps1 b/eng/common/scripts/git-branch-push.ps1 index 9b3d78345589..333ed0a62c5e 100644 --- a/eng/common/scripts/git-branch-push.ps1 +++ b/eng/common/scripts/git-branch-push.ps1 @@ -25,7 +25,10 @@ param( [string] $GitUrl, [Parameter(Mandatory = $false)] - [string] $PushArgs = "" + [string] $PushArgs = "", + + [Parameter(Mandatory = $false)] + [boolean] $SkipCommit = $false ) # This is necessay because of the janky git command output writing to stderr. @@ -57,12 +60,17 @@ if ($LASTEXITCODE -ne 0) exit $LASTEXITCODE } -Write-Host "git -c user.name=`"azure-sdk`" -c user.email=`"azuresdk@microsoft.com`" commit -am `"$($CommitMsg)`"" -git -c user.name="azure-sdk" -c user.email="azuresdk@microsoft.com" commit -am "$($CommitMsg)" -if ($LASTEXITCODE -ne 0) -{ - Write-Error "Unable to add files and create commit LASTEXITCODE=$($LASTEXITCODE), see command output above." - exit $LASTEXITCODE +if (!$SkipCommit) { + Write-Host "git -c user.name=`"azure-sdk`" -c user.email=`"azuresdk@microsoft.com`" commit -am `"$($CommitMsg)`"" + git -c user.name="azure-sdk" -c user.email="azuresdk@microsoft.com" commit -am "$($CommitMsg)" + if ($LASTEXITCODE -ne 0) + { + Write-Error "Unable to add files and create commit LASTEXITCODE=$($LASTEXITCODE), see command output above." + exit $LASTEXITCODE + } +} +else { + Write-Host "Skipped applying commit" } # The number of retries can be increased if necessary. In theory, the number of retries diff --git a/eng/common/scripts/logging.ps1 b/eng/common/scripts/logging.ps1 index 19a6fa5bc36d..9022e4fde653 100644 --- a/eng/common/scripts/logging.ps1 +++ b/eng/common/scripts/logging.ps1 @@ -31,10 +31,10 @@ function LogDebug { if ($isDevOpsRun) { - Write-Host "##vso[task.LogIssue type=debug;]$args" + Write-Host "[debug]$args" } else { Write-Debug "$args" } -} \ No newline at end of file +} diff --git a/eng/common/scripts/modules/ChangeLog-Operations.psm1 b/eng/common/scripts/modules/ChangeLog-Operations.psm1 index 5aed584d018b..bfcd8d193b00 100644 --- a/eng/common/scripts/modules/ChangeLog-Operations.psm1 +++ b/eng/common/scripts/modules/ChangeLog-Operations.psm1 @@ -1,5 +1,4 @@ # Common Changelog Operations - $RELEASE_TITLE_REGEX = "(?^\#+.*(?\b\d+\.\d+\.\d+([^0-9\s][^\s:]+)?)(\s(?\(Unreleased\)|\(\d{4}-\d{2}-\d{2}\)))?)" # Returns a Collection of changeLogEntry object containing changelog info for all version present in the gived CHANGELOG diff --git a/eng/common/scripts/modules/Package-Properties.psm1 b/eng/common/scripts/modules/Package-Properties.psm1 index b0572a71d449..61c45455f0d0 100644 --- a/eng/common/scripts/modules/Package-Properties.psm1 +++ b/eng/common/scripts/modules/Package-Properties.psm1 @@ -1,3 +1,4 @@ +# This Files has been retired # Helper functions for retireving useful information from azure-sdk-for-* repo # Example Use : Import-Module .\eng\common\scripts\modules class PackageProps diff --git a/eng/pipelines/npm-tasks.yml b/eng/pipelines/npm-tasks.yml new file mode 100644 index 000000000000..6fea1f71ffd1 --- /dev/null +++ b/eng/pipelines/npm-tasks.yml @@ -0,0 +1,67 @@ +trigger: none + +# This pipeline helps to run NPM admin tasks like remove or add tag to a released package version or deprecate a pacakge version +# Following variables should be set at queue time to run this pipeline +# variable name: TaskType +# valid Options: 'AddTag', 'RemoveTag', 'DeprecatePackage' + +# variable name: PackageName +# e.g. values: '@azure/storage-blob', '@azure/core-http' + +# variable name: 'PkgVersion' +# e.g. values '1.0.0', '2.1.0.beta.1' + +# variable name: 'TagName' +# e.g values: 'latest', 'next' + +parameters: + - name: TaskType + displayName: Task Type + type: string + default: AddTag + values: + - AddTag + - RemoveTag + - DeprecatePackage + + - name: PackageName + displayName: Package Name (e.g. @azure/template) + type: string + default: '' + + - name: PkgVersion + displayName: Package Version (e.g. 1.1.0) + type: string + default: '' + + - name: TagName + displayName: Tag (e.g. latest, next) + type: string + default: '' + + - name: Reason + displayName: Reason + type: string + default: '' + +jobs: +- job: 'NPM_Admin_Job' + displayName: NPM package management + + pool: + vmImage: 'windows-2019' + + steps: + - task: PowerShell@2 + displayName: 'Run Task' + inputs: + targetType: filePath + filePath: "eng/scripts/npm-admin-tasks.ps1" + arguments: > + -taskType ${{parameters.TaskType}} + -packageName ${{parameters.PackageName}} + -pkgVersion ${{parameters.PkgVersion}} + -tagName ${{parameters.TagName}} + -npmToken "$(azure-sdk-npm-token)" + -reason "${{parameters.Reason}}" + pwsh: true diff --git a/eng/pipelines/templates/jobs/archetype-sdk-integration.yml b/eng/pipelines/templates/jobs/archetype-sdk-integration.yml index 48d3211ac19c..41aeb140abce 100644 --- a/eng/pipelines/templates/jobs/archetype-sdk-integration.yml +++ b/eng/pipelines/templates/jobs/archetype-sdk-integration.yml @@ -29,6 +29,9 @@ parameters: - name: ResourceGroupLocation type: string default: "" +- name: ResourceGroupLocationCanary + type: string + default: "centraluseuap" - name: ArmTemplateParameters type: string default: "@{}" @@ -44,6 +47,9 @@ parameters: - name: TestSame type: boolean default: false +- name: TestCanary + type: boolean + default: false - name: Matrix type: object default: @@ -127,7 +133,17 @@ jobs: TestType: "node" DependencyVersion: same NodeTestVersion: "12.x" - TestResultsFiles: "**/test-results.xml" + TestResultsFiles: "**/test-results.xml" + + # Add matrix entry for canary testing + ${{ if eq(parameters.TestCanary, 'true') }}: + CanaryTest_Node: + OSVmImage: "ubuntu-18.04" + TestType: "node" + NodeTestVersion: "12.x" + TestResultsFiles: "**/test-results.xml" + SubscriptionConfiguration: $(sub-config-azure-cloud-test-resources-preview) + ResourceGroupLocation: ${{ parameters.ResourceGroupLocationCanary }} pool: vmImage: "$(OSVmImage)" diff --git a/eng/pipelines/templates/stages/archetype-js-release.yml b/eng/pipelines/templates/stages/archetype-js-release.yml index 72199cb2b2e2..0dc359edb24b 100644 --- a/eng/pipelines/templates/stages/archetype-js-release.yml +++ b/eng/pipelines/templates/stages/archetype-js-release.yml @@ -29,6 +29,13 @@ stages: deploy: steps: - checkout: self + - task: PowerShell@2 + displayName: Prep template pipeline for release + condition: and(succeeded(),eq(variables['TestPipeline'],'true')) + inputs: + pwsh: true + workingDirectory: $(Build.SourcesDirectory) + filePath: eng/scripts/SetTestPipelineVersion.ps1 - template: /eng/common/pipelines/templates/steps/verify-changelog.yml parameters: PackageName: ${{artifact.name}} @@ -203,7 +210,9 @@ stages: dependsOn: ${{parameters.DependsOn}} jobs: - job: PublishPackages - condition: or(eq(variables['SetDevVersion'], 'true'), and(eq(variables['Build.Reason'],'Schedule'), eq(variables['System.TeamProject'], 'internal'))) + # Run Integration job only if SetDevVersion is set to true or ( SetDevVersion is empty and job is a scheduled CI run) + # If SetDevVersion is set to false then we should skip integration job even for scheduled runs. + condition: or(eq(variables['SetDevVersion'], 'true'), and(eq(variables['SetDevVersion'], ''), eq(variables['Build.Reason'],'Schedule'), eq(variables['System.TeamProject'], 'internal'))) displayName: Publish package to daily feed pool: vmImage: ubuntu-18.04 diff --git a/eng/pipelines/templates/steps/analyze.yml b/eng/pipelines/templates/steps/analyze.yml index 923eb17dd8c4..3a3ff719c5a1 100644 --- a/eng/pipelines/templates/steps/analyze.yml +++ b/eng/pipelines/templates/steps/analyze.yml @@ -50,11 +50,11 @@ steps: displayName: "Audit libraries" - ${{ each artifact in parameters.Artifacts }}: - - template: /eng/common/pipelines/templates/steps/verify-changelog.yml - parameters: - PackageName: ${{artifact.name}} - ServiceName: ${{parameters.ServiceDirectory}} - ForRelease: false + - template: /eng/common/pipelines/templates/steps/verify-changelog.yml + parameters: + PackageName: ${{artifact.name}} + ServiceName: ${{parameters.ServiceDirectory}} + ForRelease: false - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 # ComponentGovernance is currently unable to run on pull requests of public projects. Running on non-PR diff --git a/eng/pipelines/templates/steps/build.yml b/eng/pipelines/templates/steps/build.yml index db710484e695..22d51742a00a 100644 --- a/eng/pipelines/templates/steps/build.yml +++ b/eng/pipelines/templates/steps/build.yml @@ -3,6 +3,14 @@ parameters: ServiceDirectory: not-specified steps: + - task: PowerShell@2 + displayName: Prep template pipeline for release + condition: and(succeeded(),eq(variables['TestPipeline'],'true')) + inputs: + pwsh: true + workingDirectory: $(Build.SourcesDirectory) + filePath: eng/scripts/SetTestPipelineVersion.ps1 + - pwsh: | $folder = "${{parameters.ServiceDirectory}}" if ($folder -eq "*") { $folder = "" } @@ -30,7 +38,7 @@ steps: displayName: "Build libraries" - pwsh: | - eng/tools/check-api-warning.ps1 + eng/tools/check-api-warning.ps1 displayName: "Check api extractor output changes" - script: | diff --git a/eng/pipelines/templates/steps/test.yml b/eng/pipelines/templates/steps/test.yml index 4ba60e080cd2..0e1b1b857d73 100644 --- a/eng/pipelines/templates/steps/test.yml +++ b/eng/pipelines/templates/steps/test.yml @@ -1,7 +1,7 @@ parameters: Artifacts: [] ServiceDirectory: not-specified - + steps: - script: | node common/scripts/install-run-rush.js install @@ -27,7 +27,7 @@ steps: node eng/tools/rush-runner.js unit-test:node "${{parameters.ServiceDirectory}}" --verbose -p max displayName: "Test libraries" condition: and(succeeded(),eq(variables['TestType'], 'node')) - + # Option "-p max" ensures parallelism is set to the number of cores on all platforms, which improves build times. # The default on Windows is "cores - 1" (microsoft/rushstack#436). - script: | @@ -56,7 +56,7 @@ steps: # PublishTestResults.searchFolder only supports absolute paths, not relative. - task: PublishTestResults@2 inputs: - searchFolder: '$(System.DefaultWorkingDirectory)/sdk' + searchFolder: "$(System.DefaultWorkingDirectory)/sdk" testResultsFiles: "**/test-results.xml" testRunTitle: "$(OSName) - NodeJS - Unit Tests - [Node $(NodeTestVersion)]" condition: and(always(),eq(variables['TestType'], 'node')) @@ -66,7 +66,7 @@ steps: # PublishTestResults.searchFolder only supports absolute paths, not relative. - task: PublishTestResults@2 inputs: - searchFolder: '$(System.DefaultWorkingDirectory)/sdk' + searchFolder: "$(System.DefaultWorkingDirectory)/sdk" testResultsFiles: "**/test-results.browser.xml" testRunTitle: "$(OSName) - Browser - Unit Tests - [Node $(NodeTestVersion)]" condition: and(always(),eq(variables['TestType'], 'browser')) diff --git a/eng/scripts/SetTestPipelineVersion.ps1 b/eng/scripts/SetTestPipelineVersion.ps1 new file mode 100644 index 000000000000..d531836dc508 --- /dev/null +++ b/eng/scripts/SetTestPipelineVersion.ps1 @@ -0,0 +1,34 @@ +# Overides the project file and CHANGELOG.md for the template project using the next publishable version +# This is to help with testing the release pipeline. + +. "${PSScriptRoot}\..\common\scripts\common.ps1" +$latestTags = git tag -l "@azure/template_*" +$semVars = @() + +$packageDirectory = "${PSScriptRoot}\..\..\sdk\template\template" +$templatePackageFile = "${packageDirectory}\package.json" +$changeLogFile = "${packageDirectory}\CHANGELOG.md" + +Foreach ($tags in $latestTags) +{ + $semVars += $tags.Replace("@azure/template_", "") +} + +$semVarsSorted = [AzureEngSemanticVersion]::SortVersionStrings($semVars) +LogDebug "Last Published Version $($semVarsSorted[0])" + +$newVersion = [AzureEngSemanticVersion]::ParseVersionString($semVarsSorted[0]) +$newVersion.IncrementAndSetToPrerelease() +LogDebug "Version to publish [ $($newVersion.ToString()) ]" + +$packageFileContent = Get-Content -Path $templatePackageFile | ConvertFrom-Json +LogDebug "Version in Source $($packageFileContent.version)" +$packageFileContent.version = $newVersion.ToString() +LogDebug "Version to publish $($packageFileContent.version)" + +Set-Content -Path $templatePackageFile -Value ($packageFileContent | ConvertTo-Json) +Set-Content -Path $changeLogFile -Value @" +# Release History +## $($newVersion.ToString()) ($(Get-Date -f "yyyy-MM-dd")) +- Test Release Pipeline +"@ diff --git a/eng/scripts/npm-admin-tasks.ps1 b/eng/scripts/npm-admin-tasks.ps1 new file mode 100644 index 000000000000..37f7a0760fe2 --- /dev/null +++ b/eng/scripts/npm-admin-tasks.ps1 @@ -0,0 +1,64 @@ +param ( + [Parameter(mandatory = $true)] + $taskType, + [Parameter(mandatory = $true)] + $packageName, + [Parameter(mandatory = $true)] + $pkgVersion, + $tagName, + [Parameter(mandatory = $true)] + $npmToken, + $reason +) + +try { + Write-Host "Setting AuthToken Deployment" + $env:NPM_TOKEN = $npmToken + $regAuth = "//registry.npmjs.org/" + npm config set $regAuth`:_authToken=`$`{NPM_TOKEN`} + $nameAndVersion = $packageName + "@" + $pkgVersion + + # Verify that package name is not "@azure" + if ($packageName -eq '@azure') { + Write-Host "Invalid package name" + exit 1 + } + + switch ($taskType) { + "AddTag" { + Write-Host "Adding tag for package" + Write-Host "npm dist-tag add $($nameAndVersion) $tagName" + npm dist-tag add $nameAndVersion $tagName + } + + "RemoveTag" { + Write-Host "Removing tag for package" + Write-Host "npm dist-tag rm $($nameAndVersion) $tagName" + npm dist-tag rm $nameAndVersion $tagName + } + + "DeprecatePackage" { + if ($reason -eq '') { + Write-Host "Reason cannot be empty to deprecate package version" + exit 1 + } + Write-Host "Deprecate package $nameAndVersion, reason: $reason" + Write-Host "npm deprecate $($nameAndVersion) $reason" + npm deprecate $nameAndVersion $reason + } + + default { + Write-Host "Invalid taskType to run npm admin job." + exit 1 + } + } + + if ($LastExitCode -ne 0) { + Write-Host "Npm task failed" + exit 1 + } +} +finally { + npm config delete $regAuth`:_authToken + $env:NPM_TOKEN = "" +} diff --git a/eng/tools/generate-static-index/service-mapper.json b/eng/tools/generate-static-index/service-mapper.json index 6eea5e2ab086..4df0efc39f34 100644 --- a/eng/tools/generate-static-index/service-mapper.json +++ b/eng/tools/generate-static-index/service-mapper.json @@ -14,6 +14,7 @@ "botservice": "Bot Service", "cdn": "CDN", "cognitiveservices": "Cognitive Services", + "communication": "Communication", "commerce": "Commerce", "compute": "Compute", "consumption": "Consumption", diff --git a/rush.json b/rush.json index c816a9e34d11..ede0e21b568a 100644 --- a/rush.json +++ b/rush.json @@ -347,11 +347,36 @@ "projectFolder": "sdk/textanalytics/ai-text-analytics", "versionPolicyName": "client" }, + { + "packageName": "@azure/ai-metrics-advisor", + "projectFolder": "sdk/metricsadvisor/ai-metrics-advisor", + "versionPolicyName": "client" + }, { "packageName": "@azure/search-documents", "projectFolder": "sdk/search/search-documents", "versionPolicyName": "client" }, + { + "packageName": "@azure/communication-administration", + "projectFolder": "sdk/communication/communication-administration", + "versionPolicyName": "client" + }, + { + "packageName": "@azure/communication-chat", + "projectFolder": "sdk/communication/communication-chat", + "versionPolicyName": "client" + }, + { + "packageName": "@azure/communication-common", + "projectFolder": "sdk/communication/communication-common", + "versionPolicyName": "client" + }, + { + "packageName": "@azure/communication-sms", + "projectFolder": "sdk/communication/communication-sms", + "versionPolicyName": "client" + }, { "packageName": "@azure/core-amqp", "projectFolder": "sdk/core/core-amqp", diff --git a/.eslintrc.json b/sdk/.eslintrc.json similarity index 100% rename from .eslintrc.json rename to sdk/.eslintrc.json diff --git a/sdk/.eslintrc.old.json b/sdk/.eslintrc.old.json deleted file mode 100644 index 3f1408894b2d..000000000000 --- a/sdk/.eslintrc.old.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json" - }, - "plugins": ["@typescript-eslint", "no-only-tests", "promise"], - "extends": [ - "plugin:@typescript-eslint/recommended", - "eslint:recommended", - "plugin:promise/recommended", - "plugin:@typescript-eslint/eslint-recommended", - "prettier", - "prettier/@typescript-eslint" - ], - "env": { - "mocha": true - }, - "rules": { - "curly": ["error", "multi-line"], - "eol-last": ["error", "always"], - "eqeqeq": ["error", "always", { "null": "ignore" }], - "no-console": "off", - "no-dupe-class-members": "off", - "no-empty": "error", - "no-fallthrough": "error", - "no-invalid-this": "error", - "no-redeclare": ["error", { "builtinGlobals": true }], - "no-restricted-imports": ["error", { "paths": ["rhea", "rhea/.*"] }], - "no-return-await": "error", - "no-undef": "off", - "no-unsafe-finally": "error", - "no-unused-vars": "off", - "no-unused-expressions": "error", - "no-useless-constructor": "off", - "no-use-before-define": ["error", { "functions": false, "classes": false }], - "no-var": "error", - "one-var-declaration-per-line": "error", - "prefer-const": "error", - "spaced-comment": ["error", "always", { "markers": ["/"] }], - "space-infix-ops": ["error", { "int32Hint": false }], - "use-isnan": "error", - "no-only-tests/no-only-tests": "error", - "@typescript-eslint/camelcase": "off", - "@typescript-eslint/class-name-casing": "error", - "@typescript-eslint/no-angle-bracket-type-assertion": "off", - "@typescript-eslint/no-array-constructor": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-function-return-type": [ - "warn", - { "allowExpressions": true, "allowTypedFunctionExpressions": true } - ], - "@typescript-eslint/explicit-member-accessibility": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/interface-name-prefix": ["error", "never"], - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-unused-vars": "warn", - "@typescript-eslint/no-useless-constructor": "error", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/member-ordering": [ - "error", - { - "default": [ - "instance-method", - "method", - "private-instance-method", - "private-method", - "private-static-method", - "protected-instance-method", - "protected-method", - "protected-static-method", - "public-instance-method", - "public-method", - "public-static-method", - "static-method" - ] - } - ] - } -} diff --git a/sdk/advisor/arm-advisor/LICENSE.txt b/sdk/advisor/arm-advisor/LICENSE.txt index a70e8cf66038..ea8fb1516028 100644 --- a/sdk/advisor/arm-advisor/LICENSE.txt +++ b/sdk/advisor/arm-advisor/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2018 Microsoft +Copyright (c) 2020 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 diff --git a/sdk/advisor/arm-advisor/README.md b/sdk/advisor/arm-advisor/README.md index 2794174bda52..6e851c5fd17e 100644 --- a/sdk/advisor/arm-advisor/README.md +++ b/sdk/advisor/arm-advisor/README.md @@ -9,23 +9,24 @@ This package contains an isomorphic SDK for AdvisorManagementClient. ### How to Install -``` +```bash npm install @azure/arm-advisor ``` ### How to use -#### nodejs - Authentication, client creation and listBySubscription configurations as an example written in TypeScript. +#### nodejs - Authentication, client creation and get recommendationMetadata as an example written in TypeScript. ##### Install @azure/ms-rest-nodeauth -``` -npm install @azure/ms-rest-nodeauth +- Please install minimum version of `"@azure/ms-rest-nodeauth": "^3.0.0"`. +```bash +npm install @azure/ms-rest-nodeauth@"^3.0.0" ``` ##### Sample code -```ts +```typescript import * as msRest from "@azure/ms-rest-js"; import * as msRestAzure from "@azure/ms-rest-azure-js"; import * as msRestNodeAuth from "@azure/ms-rest-nodeauth"; @@ -34,7 +35,8 @@ const subscriptionId = process.env["AZURE_SUBSCRIPTION_ID"]; msRestNodeAuth.interactiveLogin().then((creds) => { const client = new AdvisorManagementClient(creds, subscriptionId); - client.configurations.listBySubscription().then((result) => { + const name = "testname"; + client.recommendationMetadata.get(name).then((result) => { console.log("The result is:"); console.log(result); }); @@ -43,11 +45,11 @@ msRestNodeAuth.interactiveLogin().then((creds) => { }); ``` -#### browser - Authentication, client creation and listBySubscription configurations as an example written in JavaScript. +#### browser - Authentication, client creation and get recommendationMetadata as an example written in JavaScript. ##### Install @azure/ms-rest-browserauth -``` +```bash npm install @azure/ms-rest-browserauth ``` @@ -77,7 +79,8 @@ See https://github.com/Azure/ms-rest-browserauth to learn how to authenticate to authManager.login(); } const client = new Azure.ArmAdvisor.AdvisorManagementClient(res.creds, subscriptionId); - client.configurations.listBySubscription().then((result) => { + const name = "testname"; + client.recommendationMetadata.get(name).then((result) => { console.log("The result is:"); console.log(result); }).catch((err) => { @@ -95,5 +98,4 @@ See https://github.com/Azure/ms-rest-browserauth to learn how to authenticate to - [Microsoft Azure SDK for Javascript](https://github.com/Azure/azure-sdk-for-js) - -![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-js%2Fsdk%2Fadvisor%2Farm-advisor%2FREADME.png) +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-js/sdk/advisor/arm-advisor/README.png) diff --git a/sdk/advisor/arm-advisor/package.json b/sdk/advisor/arm-advisor/package.json index de6ba988cd47..a8157d573cae 100644 --- a/sdk/advisor/arm-advisor/package.json +++ b/sdk/advisor/arm-advisor/package.json @@ -2,11 +2,11 @@ "name": "@azure/arm-advisor", "author": "Microsoft Corporation", "description": "AdvisorManagementClient Library with typescript type definitions for node.js and browser.", - "version": "1.2.0", + "version": "2.0.0", "dependencies": { - "@azure/ms-rest-azure-js": "^1.1.0", - "@azure/ms-rest-js": "^1.1.0", - "tslib": "^1.9.3" + "@azure/ms-rest-azure-js": "^2.0.1", + "@azure/ms-rest-js": "^2.0.4", + "tslib": "^1.10.0" }, "keywords": [ "node", @@ -20,18 +20,19 @@ "module": "./esm/advisorManagementClient.js", "types": "./esm/advisorManagementClient.d.ts", "devDependencies": { - "typescript": "^3.1.1", - "rollup": "^0.66.2", - "rollup-plugin-node-resolve": "^3.4.0", - "uglify-js": "^3.4.9" + "typescript": "^3.5.3", + "rollup": "^1.18.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-sourcemaps": "^0.4.2", + "uglify-js": "^3.6.0" }, - "homepage": "https://github.com/azure/azure-sdk-for-js/tree/master/sdk/advisor/arm-advisor", + "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/advisor/arm-advisor", "repository": { "type": "git", - "url": "https://github.com/azure/azure-sdk-for-js.git" + "url": "https://github.com/Azure/azure-sdk-for-js.git" }, "bugs": { - "url": "https://github.com/azure/azure-sdk-for-js/issues" + "url": "https://github.com/Azure/azure-sdk-for-js/issues" }, "files": [ "dist/**/*.js", @@ -43,6 +44,7 @@ "esm/**/*.d.ts", "esm/**/*.d.ts.map", "src/**/*.ts", + "README.md", "rollup.config.js", "tsconfig.json" ], diff --git a/sdk/advisor/arm-advisor/rollup.config.js b/sdk/advisor/arm-advisor/rollup.config.js index 19c4680fc09c..6d406ff2ce84 100644 --- a/sdk/advisor/arm-advisor/rollup.config.js +++ b/sdk/advisor/arm-advisor/rollup.config.js @@ -1,10 +1,16 @@ +import rollup from "rollup"; import nodeResolve from "rollup-plugin-node-resolve"; +import sourcemaps from "rollup-plugin-sourcemaps"; + /** - * @type {import('rollup').RollupFileOptions} + * @type {rollup.RollupFileOptions} */ const config = { - input: './esm/advisorManagementClient.js', - external: ["@azure/ms-rest-js", "@azure/ms-rest-azure-js"], + input: "./esm/advisorManagementClient.js", + external: [ + "@azure/ms-rest-js", + "@azure/ms-rest-azure-js" + ], output: { file: "./dist/arm-advisor.js", format: "umd", @@ -16,16 +22,16 @@ const config = { }, banner: `/* * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for - * license information. + * Licensed under the MIT License. See License.txt in the project root for license information. * * Code generated by Microsoft (R) AutoRest Code Generator. - * Changes may cause incorrect behavior and will be lost if the code is - * regenerated. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. */` }, plugins: [ - nodeResolve({ module: true }) + nodeResolve({ mainFields: ['module', 'main'] }), + sourcemaps() ] }; + export default config; diff --git a/sdk/advisor/arm-advisor/src/advisorManagementClient.ts b/sdk/advisor/arm-advisor/src/advisorManagementClient.ts index 643eaf226574..a1de4884947a 100644 --- a/sdk/advisor/arm-advisor/src/advisorManagementClient.ts +++ b/sdk/advisor/arm-advisor/src/advisorManagementClient.ts @@ -17,6 +17,7 @@ import { AdvisorManagementClientContext } from "./advisorManagementClientContext class AdvisorManagementClient extends AdvisorManagementClientContext { // Operation groups + recommendationMetadata: operations.RecommendationMetadata; configurations: operations.Configurations; recommendations: operations.Recommendations; operations: operations.Operations; @@ -30,6 +31,7 @@ class AdvisorManagementClient extends AdvisorManagementClientContext { */ constructor(credentials: msRest.ServiceClientCredentials, subscriptionId: string, options?: Models.AdvisorManagementClientOptions) { super(credentials, subscriptionId, options); + this.recommendationMetadata = new operations.RecommendationMetadata(this); this.configurations = new operations.Configurations(this); this.recommendations = new operations.Recommendations(this); this.operations = new operations.Operations(this); diff --git a/sdk/advisor/arm-advisor/src/advisorManagementClientContext.ts b/sdk/advisor/arm-advisor/src/advisorManagementClientContext.ts index 82f5adb2547f..e75f0e19b91c 100644 --- a/sdk/advisor/arm-advisor/src/advisorManagementClientContext.ts +++ b/sdk/advisor/arm-advisor/src/advisorManagementClientContext.ts @@ -13,7 +13,7 @@ import * as msRest from "@azure/ms-rest-js"; import * as msRestAzure from "@azure/ms-rest-azure-js"; const packageName = "@azure/arm-advisor"; -const packageVersion = "0.1.0"; +const packageVersion = "2.0.0"; export class AdvisorManagementClientContext extends msRestAzure.AzureServiceClient { credentials: msRest.ServiceClientCredentials; @@ -44,7 +44,7 @@ export class AdvisorManagementClientContext extends msRestAzure.AzureServiceClie super(credentials, options); - this.apiVersion = '2017-04-19'; + this.apiVersion = '2020-01-01'; this.acceptLanguage = 'en-US'; this.longRunningOperationRetryTimeout = 30; this.baseUri = options.baseUri || this.baseUri || "https://management.azure.com"; diff --git a/sdk/advisor/arm-advisor/src/models/configurationsMappers.ts b/sdk/advisor/arm-advisor/src/models/configurationsMappers.ts index 7e0bc956ab06..ff165cd05db1 100644 --- a/sdk/advisor/arm-advisor/src/models/configurationsMappers.ts +++ b/sdk/advisor/arm-advisor/src/models/configurationsMappers.ts @@ -1,18 +1,21 @@ /* * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for - * license information. + * Licensed under the MIT License. See License.txt in the project root for license information. * * Code generated by Microsoft (R) AutoRest Code Generator. - * Changes may cause incorrect behavior and will be lost if the code is - * regenerated. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ export { - ConfigurationListResult, + ArmErrorResponse, + ARMErrorResponseBody, + BaseResource, ConfigData, - ConfigDataProperties, - CloudError, - ARMErrorResponseBody + ConfigurationListResult, + DigestConfig, + Resource, + ResourceMetadata, + ResourceRecommendationBase, + ShortDescription, + SuppressionContract } from "../models/mappers"; - diff --git a/sdk/advisor/arm-advisor/src/models/index.ts b/sdk/advisor/arm-advisor/src/models/index.ts index 21d9a82bd89e..aef287075a97 100644 --- a/sdk/advisor/arm-advisor/src/models/index.ts +++ b/sdk/advisor/arm-advisor/src/models/index.ts @@ -1,11 +1,9 @@ /* * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for - * license information. + * Licensed under the MIT License. See License.txt in the project root for license information. * * Code generated by Microsoft (R) AutoRest Code Generator. - * Changes may cause incorrect behavior and will be lost if the code is - * regenerated. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ import { BaseResource, CloudError, AzureServiceClientOptions } from "@azure/ms-rest-azure-js"; @@ -13,392 +11,431 @@ import * as msRest from "@azure/ms-rest-js"; export { BaseResource, CloudError }; - /** - * @interface - * An interface representing ConfigDataProperties. - * The list of property name/value pairs. - * + * The metadata supported value detail. */ -export interface ConfigDataProperties { +export interface MetadataSupportedValueDetail { /** - * @member {boolean} [exclude] Exclude the resource from Advisor evaluations. - * Valid values: False (default) or True. + * The id. */ - exclude?: boolean; - /** - * @member {string} [lowCpuThreshold] Minimum percentage threshold for - * Advisor low CPU utilization evaluation. Valid only for subscriptions. - * Valid values: 5 (default), 10, 15 or 20. - */ - lowCpuThreshold?: string; + id?: string; /** - * @property Describes unknown properties. The value of an unknown property - * can be of "any" type. + * The display name. */ - [property: string]: any; + displayName?: string; } /** - * @interface - * An interface representing ConfigData. - * The Advisor configuration data structure. - * + * The metadata entity contract. */ -export interface ConfigData { +export interface MetadataEntity { /** - * @member {string} [id] The resource Id of the configuration resource. + * The resource Id of the metadata entity. */ id?: string; /** - * @member {string} [type] The type of the configuration resource. + * The type of the metadata entity. */ type?: string; /** - * @member {string} [name] The name of the configuration resource. + * The name of the metadata entity. */ name?: string; /** - * @member {ConfigDataProperties} [properties] The list of property - * name/value pairs. + * The display name. */ - properties?: ConfigDataProperties; + displayName?: string; + /** + * The list of keys on which this entity depends on. + */ + dependsOn?: string[]; + /** + * The list of scenarios applicable to this metadata entity. + */ + applicableScenarios?: Scenario[]; + /** + * The list of supported values. + */ + supportedValues?: MetadataSupportedValueDetail[]; +} + +/** + * Advisor Digest configuration entity + */ +export interface DigestConfig { + /** + * Name of digest configuration. Value is case-insensitive and must be unique within a + * subscription. + */ + name?: string; + /** + * Action group resource id used by digest. + */ + actionGroupResourceId?: string; + /** + * Frequency that digest will be triggered, in days. Value must be between 7 and 30 days + * inclusive. + */ + frequency?: number; + /** + * Categories to send digest for. If categories are not provided, then digest will be sent for + * all categories. + */ + categories?: Category[]; + /** + * Language for digest content body. Value must be ISO 639-1 code for one of Azure portal + * supported languages. Otherwise, it will be converted into one. Default value is English (en). + */ + language?: string; + /** + * State of digest configuration. Possible values include: 'Active', 'Disabled' + */ + state?: DigestConfigState; +} + +/** + * An Azure resource. + */ +export interface Resource extends BaseResource { + /** + * The resource ID. + * **NOTE: This property will not be serialized. It can only be populated by the server.** + */ + readonly id?: string; + /** + * The name of the resource. + * **NOTE: This property will not be serialized. It can only be populated by the server.** + */ + readonly name?: string; + /** + * The type of the resource. + * **NOTE: This property will not be serialized. It can only be populated by the server.** + */ + readonly type?: string; +} + +/** + * The Advisor configuration data structure. + */ +export interface ConfigData extends Resource { + /** + * Exclude the resource from Advisor evaluations. Valid values: False (default) or True. + */ + exclude?: boolean; + /** + * Minimum percentage threshold for Advisor low CPU utilization evaluation. Valid only for + * subscriptions. Valid values: 5 (default), 10, 15 or 20. Possible values include: '5', '10', + * '15', '20' + */ + lowCpuThreshold?: CpuThreshold; + /** + * Advisor digest configuration. Valid only for subscriptions + */ + digests?: DigestConfig[]; } /** - * @interface - * An interface representing ARMErrorResponseBody. * ARM error response body. - * */ export interface ARMErrorResponseBody { /** - * @member {string} [message] Gets or sets the string that describes the - * error in detail and provides debugging information. + * Gets or sets the string that describes the error in detail and provides debugging information. */ message?: string; /** - * @member {string} [code] Gets or sets the string that can be used to - * programmatically identify the error. + * Gets or sets the string that can be used to programmatically identify the error. */ code?: string; } /** - * @interface - * An interface representing ShortDescription. + * An interface representing ArmErrorResponse. + */ +export interface ArmErrorResponse { + error?: ARMErrorResponseBody; +} + +/** * A summary of the recommendation. - * */ export interface ShortDescription { /** - * @member {string} [problem] The issue or opportunity identified by the - * recommendation. + * The issue or opportunity identified by the recommendation. */ problem?: string; /** - * @member {string} [solution] The remediation action suggested by the - * recommendation. + * The remediation action suggested by the recommendation. */ solution?: string; } /** - * @interface - * An interface representing Resource. - * An Azure resource. - * - * @extends BaseResource + * Recommendation resource metadata */ -export interface Resource extends BaseResource { - /** - * @member {string} [id] The resource ID. - * **NOTE: This property will not be serialized. It can only be populated by - * the server.** - */ - readonly id?: string; +export interface ResourceMetadata { /** - * @member {string} [name] The name of the resource. - * **NOTE: This property will not be serialized. It can only be populated by - * the server.** + * Azure resource Id of the assessed resource */ - readonly name?: string; + resourceId?: string; /** - * @member {string} [type] The type of the resource. - * **NOTE: This property will not be serialized. It can only be populated by - * the server.** + * Source from which recommendation is generated */ - readonly type?: string; + source?: string; } /** - * @interface - * An interface representing ResourceRecommendationBase. * Advisor Recommendation. - * - * @extends Resource */ export interface ResourceRecommendationBase extends Resource { /** - * @member {Category} [category] The category of the recommendation. Possible - * values include: 'HighAvailability', 'Security', 'Performance', 'Cost' + * The category of the recommendation. Possible values include: 'HighAvailability', 'Security', + * 'Performance', 'Cost', 'OperationalExcellence' */ category?: Category; /** - * @member {Impact} [impact] The business impact of the recommendation. - * Possible values include: 'High', 'Medium', 'Low' + * The business impact of the recommendation. Possible values include: 'High', 'Medium', 'Low' */ impact?: Impact; /** - * @member {string} [impactedField] The resource type identified by Advisor. + * The resource type identified by Advisor. */ impactedField?: string; /** - * @member {string} [impactedValue] The resource identified by Advisor. + * The resource identified by Advisor. */ impactedValue?: string; /** - * @member {Date} [lastUpdated] The most recent time that Advisor checked the - * validity of the recommendation. + * The most recent time that Advisor checked the validity of the recommendation. */ lastUpdated?: Date; /** - * @member {{ [propertyName: string]: any }} [metadata] The recommendation - * metadata. + * The recommendation metadata. */ metadata?: { [propertyName: string]: any }; /** - * @member {string} [recommendationTypeId] The recommendation-type GUID. + * The recommendation-type GUID. */ recommendationTypeId?: string; /** - * @member {Risk} [risk] The potential risk of not implementing the - * recommendation. Possible values include: 'Error', 'Warning', 'None' + * The potential risk of not implementing the recommendation. Possible values include: 'Error', + * 'Warning', 'None' */ risk?: Risk; /** - * @member {ShortDescription} [shortDescription] A summary of the - * recommendation. + * A summary of the recommendation. */ shortDescription?: ShortDescription; /** - * @member {string[]} [suppressionIds] The list of snoozed and dismissed - * rules for the recommendation. + * The list of snoozed and dismissed rules for the recommendation. */ suppressionIds?: string[]; /** - * @member {{ [propertyName: string]: string }} [extendedProperties] Extended - * properties + * Extended properties */ extendedProperties?: { [propertyName: string]: string }; + /** + * Metadata of resource that was assessed + */ + resourceMetadata?: ResourceMetadata; } /** - * @interface - * An interface representing OperationDisplayInfo. * The operation supported by Advisor. - * */ export interface OperationDisplayInfo { /** - * @member {string} [description] The description of the operation. + * The description of the operation. */ description?: string; /** - * @member {string} [operation] The action that users can perform, based on - * their permission level. + * The action that users can perform, based on their permission level. */ operation?: string; /** - * @member {string} [provider] Service provider: Microsoft Advisor. + * Service provider: Microsoft Advisor. */ provider?: string; /** - * @member {string} [resource] Resource on which the operation is performed. + * Resource on which the operation is performed. */ resource?: string; } /** - * @interface - * An interface representing OperationEntity. * The operation supported by Advisor. - * */ export interface OperationEntity { /** - * @member {string} [name] Operation name: {provider}/{resource}/{operation}. + * Operation name: {provider}/{resource}/{operation}. */ name?: string; /** - * @member {OperationDisplayInfo} [display] The operation supported by - * Advisor. + * The operation supported by Advisor. */ display?: OperationDisplayInfo; } /** - * @interface - * An interface representing SuppressionContract. - * The details of the snoozed or dismissed rule; for example, the duration, - * name, and GUID associated with the rule. - * - * @extends Resource + * The details of the snoozed or dismissed rule; for example, the duration, name, and GUID + * associated with the rule. */ export interface SuppressionContract extends Resource { /** - * @member {string} [suppressionId] The GUID of the suppression. + * The GUID of the suppression. */ suppressionId?: string; /** - * @member {string} [ttl] The duration for which the suppression is valid. + * The duration for which the suppression is valid. */ ttl?: string; } /** - * @interface - * An interface representing RecommendationsListOptionalParams. * Optional Parameters. - * - * @extends RequestOptionsBase */ export interface RecommendationsListOptionalParams extends msRest.RequestOptionsBase { /** - * @member {string} [filter] The filter to apply to the recommendations. + * The filter to apply to the recommendations. */ filter?: string; /** - * @member {number} [top] The number of recommendations per page if a paged - * version of this API is being used. + * The number of recommendations per page if a paged version of this API is being used. */ top?: number; /** - * @member {string} [skipToken] The page-continuation token to use with a - * paged version of this API. + * The page-continuation token to use with a paged version of this API. */ skipToken?: string; } /** - * @interface - * An interface representing SuppressionsListOptionalParams. * Optional Parameters. - * - * @extends RequestOptionsBase */ export interface SuppressionsListOptionalParams extends msRest.RequestOptionsBase { /** - * @member {number} [top] The number of suppressions per page if a paged - * version of this API is being used. + * The number of suppressions per page if a paged version of this API is being used. */ top?: number; /** - * @member {string} [skipToken] The page-continuation token to use with a - * paged version of this API. + * The page-continuation token to use with a paged version of this API. */ skipToken?: string; } /** - * @interface * An interface representing AdvisorManagementClientOptions. - * @extends AzureServiceClientOptions */ export interface AdvisorManagementClientOptions extends AzureServiceClientOptions { - /** - * @member {string} [baseUri] - */ baseUri?: string; } /** - * @interface - * An interface representing RecommendationsGenerateHeaders. * Defines headers for Generate operation. - * */ export interface RecommendationsGenerateHeaders { /** - * @member {string} [location] The URL where the status of the asynchronous - * operation can be checked. + * The URL where the status of the asynchronous operation can be checked. */ location: string; /** - * @member {string} [retryAfter] The amount of delay to use while the status - * of the operation is checked. The value is expressed in seconds. + * The amount of delay to use while the status of the operation is checked. The value is + * expressed in seconds. */ retryAfter: string; } +/** + * @interface + * The list of metadata entities + * @extends Array + */ +export interface MetadataEntityListResult extends Array { + /** + * The link used to get the next page of metadata. + */ + nextLink?: string; +} /** * @interface - * An interface representing the ConfigurationListResult. * The list of Advisor configurations. - * * @extends Array */ export interface ConfigurationListResult extends Array { /** - * @member {string} [nextLink] The link used to get the next page of - * configurations. + * The link used to get the next page of configurations. */ nextLink?: string; } /** * @interface - * An interface representing the ResourceRecommendationBaseListResult. * The list of Advisor recommendations. - * * @extends Array */ export interface ResourceRecommendationBaseListResult extends Array { /** - * @member {string} [nextLink] The link used to get the next page of - * recommendations. + * The link used to get the next page of recommendations. */ nextLink?: string; } /** * @interface - * An interface representing the OperationEntityListResult. * The list of Advisor operations. - * * @extends Array */ export interface OperationEntityListResult extends Array { /** - * @member {string} [nextLink] The link used to get the next page of - * operations. + * The link used to get the next page of operations. */ nextLink?: string; } /** * @interface - * An interface representing the SuppressionContractListResult. * The list of Advisor suppressions. - * * @extends Array */ export interface SuppressionContractListResult extends Array { /** - * @member {string} [nextLink] The link used to get the next page of - * suppressions. + * The link used to get the next page of suppressions. */ nextLink?: string; } +/** + * Defines values for Scenario. + * Possible values include: 'Alerts' + * @readonly + * @enum {string} + */ +export type Scenario = 'Alerts'; + +/** + * Defines values for CpuThreshold. + * Possible values include: '5', '10', '15', '20' + * @readonly + * @enum {string} + */ +export type CpuThreshold = '5' | '10' | '15' | '20'; + /** * Defines values for Category. - * Possible values include: 'HighAvailability', 'Security', 'Performance', 'Cost' + * Possible values include: 'HighAvailability', 'Security', 'Performance', 'Cost', + * 'OperationalExcellence' + * @readonly + * @enum {string} + */ +export type Category = 'HighAvailability' | 'Security' | 'Performance' | 'Cost' | 'OperationalExcellence'; + +/** + * Defines values for DigestConfigState. + * Possible values include: 'Active', 'Disabled' * @readonly * @enum {string} */ -export type Category = 'HighAvailability' | 'Security' | 'Performance' | 'Cost'; +export type DigestConfigState = 'Active' | 'Disabled'; /** * Defines values for Impact. @@ -416,6 +453,71 @@ export type Impact = 'High' | 'Medium' | 'Low'; */ export type Risk = 'Error' | 'Warning' | 'None'; +/** + * Contains response data for the get operation. + */ +export type RecommendationMetadataGetResponse = { + /** + * The parsed response body. + */ + body: any; + + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: any; + }; +}; + +/** + * Contains response data for the list operation. + */ +export type RecommendationMetadataListResponse = MetadataEntityListResult & { + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: MetadataEntityListResult; + }; +}; + +/** + * Contains response data for the listNext operation. + */ +export type RecommendationMetadataListNextResponse = MetadataEntityListResult & { + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: MetadataEntityListResult; + }; +}; + /** * Contains response data for the listBySubscription operation. */ @@ -428,6 +530,7 @@ export type ConfigurationsListBySubscriptionResponse = ConfigurationListResult & * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -438,7 +541,7 @@ export type ConfigurationsListBySubscriptionResponse = ConfigurationListResult & /** * Contains response data for the createInSubscription operation. */ -export type ConfigurationsCreateInSubscriptionResponse = ARMErrorResponseBody & { +export type ConfigurationsCreateInSubscriptionResponse = ConfigData & { /** * The underlying HTTP response. */ @@ -447,10 +550,11 @@ export type ConfigurationsCreateInSubscriptionResponse = ARMErrorResponseBody & * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ - parsedBody: ARMErrorResponseBody; + parsedBody: ConfigData; }; }; @@ -466,6 +570,7 @@ export type ConfigurationsListByResourceGroupResponse = ConfigurationListResult * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -476,7 +581,7 @@ export type ConfigurationsListByResourceGroupResponse = ConfigurationListResult /** * Contains response data for the createInResourceGroup operation. */ -export type ConfigurationsCreateInResourceGroupResponse = ARMErrorResponseBody & { +export type ConfigurationsCreateInResourceGroupResponse = ConfigData & { /** * The underlying HTTP response. */ @@ -485,10 +590,11 @@ export type ConfigurationsCreateInResourceGroupResponse = ARMErrorResponseBody & * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ - parsedBody: ARMErrorResponseBody; + parsedBody: ConfigData; }; }; @@ -504,6 +610,7 @@ export type ConfigurationsListBySubscriptionNextResponse = ConfigurationListResu * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -538,6 +645,7 @@ export type RecommendationsListResponse = ResourceRecommendationBaseListResult & * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -557,6 +665,7 @@ export type RecommendationsGetResponse = ResourceRecommendationBase & { * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -576,6 +685,7 @@ export type RecommendationsListNextResponse = ResourceRecommendationBaseListResu * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -595,6 +705,7 @@ export type OperationsListResponse = OperationEntityListResult & { * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -614,6 +725,7 @@ export type OperationsListNextResponse = OperationEntityListResult & { * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -633,6 +745,7 @@ export type SuppressionsGetResponse = SuppressionContract & { * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -652,6 +765,7 @@ export type SuppressionsCreateResponse = SuppressionContract & { * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -671,6 +785,7 @@ export type SuppressionsListResponse = SuppressionContractListResult & { * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ @@ -690,6 +805,7 @@ export type SuppressionsListNextResponse = SuppressionContractListResult & { * The response body as text (string format) */ bodyAsText: string; + /** * The response body as parsed JSON or XML */ diff --git a/sdk/advisor/arm-advisor/src/models/mappers.ts b/sdk/advisor/arm-advisor/src/models/mappers.ts index ffd0fb954f60..38a96c10028f 100644 --- a/sdk/advisor/arm-advisor/src/models/mappers.ts +++ b/sdk/advisor/arm-advisor/src/models/mappers.ts @@ -1,11 +1,9 @@ /* * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for - * license information. + * Licensed under the MIT License. See License.txt in the project root for license information. * * Code generated by Microsoft (R) AutoRest Code Generator. - * Changes may cause incorrect behavior and will be lost if the code is - * regenerated. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ import { CloudErrorMapper, BaseResourceMapper } from "@azure/ms-rest-azure-js"; @@ -14,38 +12,33 @@ import * as msRest from "@azure/ms-rest-js"; export const CloudError = CloudErrorMapper; export const BaseResource = BaseResourceMapper; -export const ConfigDataProperties: msRest.CompositeMapper = { - serializedName: "ConfigData_properties", +export const MetadataSupportedValueDetail: msRest.CompositeMapper = { + serializedName: "MetadataSupportedValueDetail", type: { name: "Composite", - className: "ConfigDataProperties", + className: "MetadataSupportedValueDetail", modelProperties: { - exclude: { - serializedName: "exclude", + id: { + serializedName: "id", type: { - name: "Boolean" + name: "String" } }, - lowCpuThreshold: { - serializedName: "low_cpu_threshold", + displayName: { + serializedName: "displayName", type: { name: "String" } } - }, - additionalProperties: { - type: { - name: "Object" - } } } }; -export const ConfigData: msRest.CompositeMapper = { - serializedName: "ConfigData", +export const MetadataEntity: msRest.CompositeMapper = { + serializedName: "MetadataEntity", type: { name: "Composite", - className: "ConfigData", + className: "MetadataEntity", modelProperties: { id: { serializedName: "id", @@ -65,14 +58,159 @@ export const ConfigData: msRest.CompositeMapper = { name: "String" } }, - properties: { - serializedName: "properties", + displayName: { + serializedName: "properties.displayName", type: { - name: "Composite", - className: "ConfigDataProperties", - additionalProperties: { + name: "String" + } + }, + dependsOn: { + serializedName: "properties.dependsOn", + type: { + name: "Sequence", + element: { type: { - name: "Object" + name: "String" + } + } + } + }, + applicableScenarios: { + serializedName: "properties.applicableScenarios", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + supportedValues: { + serializedName: "properties.supportedValues", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "MetadataSupportedValueDetail" + } + } + } + } + } + } +}; + +export const DigestConfig: msRest.CompositeMapper = { + serializedName: "DigestConfig", + type: { + name: "Composite", + className: "DigestConfig", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String" + } + }, + actionGroupResourceId: { + serializedName: "actionGroupResourceId", + type: { + name: "String" + } + }, + frequency: { + serializedName: "frequency", + type: { + name: "Number" + } + }, + categories: { + serializedName: "categories", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + language: { + serializedName: "language", + type: { + name: "String" + } + }, + state: { + serializedName: "state", + type: { + name: "String" + } + } + } + } +}; + +export const Resource: msRest.CompositeMapper = { + serializedName: "Resource", + type: { + name: "Composite", + className: "Resource", + modelProperties: { + id: { + readOnly: true, + serializedName: "id", + type: { + name: "String" + } + }, + name: { + readOnly: true, + serializedName: "name", + type: { + name: "String" + } + }, + type: { + readOnly: true, + serializedName: "type", + type: { + name: "String" + } + } + } + } +}; + +export const ConfigData: msRest.CompositeMapper = { + serializedName: "ConfigData", + type: { + name: "Composite", + className: "ConfigData", + modelProperties: { + ...Resource.type.modelProperties, + exclude: { + serializedName: "properties.exclude", + type: { + name: "Boolean" + } + }, + lowCpuThreshold: { + serializedName: "properties.lowCpuThreshold", + type: { + name: "String" + } + }, + digests: { + serializedName: "properties.digests", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "DigestConfig" } } } @@ -103,6 +241,23 @@ export const ARMErrorResponseBody: msRest.CompositeMapper = { } }; +export const ArmErrorResponse: msRest.CompositeMapper = { + serializedName: "ArmErrorResponse", + type: { + name: "Composite", + className: "ArmErrorResponse", + modelProperties: { + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ARMErrorResponseBody" + } + } + } + } +}; + export const ShortDescription: msRest.CompositeMapper = { serializedName: "ShortDescription", type: { @@ -125,29 +280,20 @@ export const ShortDescription: msRest.CompositeMapper = { } }; -export const Resource: msRest.CompositeMapper = { - serializedName: "Resource", +export const ResourceMetadata: msRest.CompositeMapper = { + serializedName: "ResourceMetadata", type: { name: "Composite", - className: "Resource", + className: "ResourceMetadata", modelProperties: { - id: { - readOnly: true, - serializedName: "id", - type: { - name: "String" - } - }, - name: { - readOnly: true, - serializedName: "name", + resourceId: { + serializedName: "resourceId", type: { name: "String" } }, - type: { - readOnly: true, - serializedName: "type", + source: { + serializedName: "source", type: { name: "String" } @@ -244,6 +390,13 @@ export const ResourceRecommendationBase: msRest.CompositeMapper = { } } } + }, + resourceMetadata: { + serializedName: "properties.resourceMetadata", + type: { + name: "Composite", + className: "ResourceMetadata" + } } } } @@ -351,6 +504,34 @@ export const RecommendationsGenerateHeaders: msRest.CompositeMapper = { } }; +export const MetadataEntityListResult: msRest.CompositeMapper = { + serializedName: "MetadataEntityListResult", + type: { + name: "Composite", + className: "MetadataEntityListResult", + modelProperties: { + value: { + serializedName: "", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "MetadataEntity" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; + export const ConfigurationListResult: msRest.CompositeMapper = { serializedName: "ConfigurationListResult", type: { diff --git a/sdk/advisor/arm-advisor/src/models/operationsMappers.ts b/sdk/advisor/arm-advisor/src/models/operationsMappers.ts index aba5d8bf047b..c83dbeabcc21 100644 --- a/sdk/advisor/arm-advisor/src/models/operationsMappers.ts +++ b/sdk/advisor/arm-advisor/src/models/operationsMappers.ts @@ -1,17 +1,14 @@ /* * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for - * license information. + * Licensed under the MIT License. See License.txt in the project root for license information. * * Code generated by Microsoft (R) AutoRest Code Generator. - * Changes may cause incorrect behavior and will be lost if the code is - * regenerated. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ export { - OperationEntityListResult, - OperationEntity, + CloudError, OperationDisplayInfo, - CloudError + OperationEntity, + OperationEntityListResult } from "../models/mappers"; - diff --git a/sdk/advisor/arm-advisor/src/models/parameters.ts b/sdk/advisor/arm-advisor/src/models/parameters.ts index 4c86c5e6de44..0a32fd06e64c 100644 --- a/sdk/advisor/arm-advisor/src/models/parameters.ts +++ b/sdk/advisor/arm-advisor/src/models/parameters.ts @@ -30,6 +30,18 @@ export const apiVersion: msRest.OperationQueryParameter = { } } }; +export const configurationName: msRest.OperationURLParameter = { + parameterPath: "configurationName", + mapper: { + required: true, + isConstant: true, + serializedName: "configurationName", + defaultValue: 'default', + type: { + name: "String" + } + } +}; export const filter: msRest.OperationQueryParameter = { parameterPath: [ "options", diff --git a/sdk/advisor/arm-advisor/src/models/recommendationMetadataMappers.ts b/sdk/advisor/arm-advisor/src/models/recommendationMetadataMappers.ts new file mode 100644 index 000000000000..fca081125f33 --- /dev/null +++ b/sdk/advisor/arm-advisor/src/models/recommendationMetadataMappers.ts @@ -0,0 +1,15 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. + */ + +export { + ARMErrorResponseBody, + CloudError, + MetadataEntity, + MetadataEntityListResult, + MetadataSupportedValueDetail +} from "../models/mappers"; diff --git a/sdk/advisor/arm-advisor/src/models/recommendationsMappers.ts b/sdk/advisor/arm-advisor/src/models/recommendationsMappers.ts index f7c5c9df26b7..d4cb0dcd832b 100644 --- a/sdk/advisor/arm-advisor/src/models/recommendationsMappers.ts +++ b/sdk/advisor/arm-advisor/src/models/recommendationsMappers.ts @@ -1,21 +1,21 @@ /* * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for - * license information. + * Licensed under the MIT License. See License.txt in the project root for license information. * * Code generated by Microsoft (R) AutoRest Code Generator. - * Changes may cause incorrect behavior and will be lost if the code is - * regenerated. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ export { - RecommendationsGenerateHeaders, + BaseResource, CloudError, - ResourceRecommendationBaseListResult, - ResourceRecommendationBase, + ConfigData, + DigestConfig, + RecommendationsGenerateHeaders, Resource, - BaseResource, + ResourceMetadata, + ResourceRecommendationBase, + ResourceRecommendationBaseListResult, ShortDescription, SuppressionContract } from "../models/mappers"; - diff --git a/sdk/advisor/arm-advisor/src/models/suppressionsMappers.ts b/sdk/advisor/arm-advisor/src/models/suppressionsMappers.ts index dd0d5a4133d7..b15519119bc5 100644 --- a/sdk/advisor/arm-advisor/src/models/suppressionsMappers.ts +++ b/sdk/advisor/arm-advisor/src/models/suppressionsMappers.ts @@ -1,20 +1,20 @@ /* * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for - * license information. + * Licensed under the MIT License. See License.txt in the project root for license information. * * Code generated by Microsoft (R) AutoRest Code Generator. - * Changes may cause incorrect behavior and will be lost if the code is - * regenerated. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ export { - SuppressionContract, - Resource, BaseResource, CloudError, - SuppressionContractListResult, + ConfigData, + DigestConfig, + Resource, + ResourceMetadata, ResourceRecommendationBase, - ShortDescription + ShortDescription, + SuppressionContract, + SuppressionContractListResult } from "../models/mappers"; - diff --git a/sdk/advisor/arm-advisor/src/operations/configurations.ts b/sdk/advisor/arm-advisor/src/operations/configurations.ts index 91d1ae84a445..9ea34dae1bff 100644 --- a/sdk/advisor/arm-advisor/src/operations/configurations.ts +++ b/sdk/advisor/arm-advisor/src/operations/configurations.ts @@ -65,14 +65,14 @@ export class Configurations { * @param configContract The Azure Advisor configuration data structure. * @param callback The callback */ - createInSubscription(configContract: Models.ConfigData, callback: msRest.ServiceCallback): void; + createInSubscription(configContract: Models.ConfigData, callback: msRest.ServiceCallback): void; /** * @param configContract The Azure Advisor configuration data structure. * @param options The optional parameters * @param callback The callback */ - createInSubscription(configContract: Models.ConfigData, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; - createInSubscription(configContract: Models.ConfigData, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + createInSubscription(configContract: Models.ConfigData, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + createInSubscription(configContract: Models.ConfigData, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { return this.client.sendOperationRequest( { configContract, @@ -123,15 +123,15 @@ export class Configurations { * @param resourceGroup The name of the Azure resource group. * @param callback The callback */ - createInResourceGroup(configContract: Models.ConfigData, resourceGroup: string, callback: msRest.ServiceCallback): void; + createInResourceGroup(configContract: Models.ConfigData, resourceGroup: string, callback: msRest.ServiceCallback): void; /** * @param configContract The Azure Advisor configuration data structure. * @param resourceGroup The name of the Azure resource group. * @param options The optional parameters * @param callback The callback */ - createInResourceGroup(configContract: Models.ConfigData, resourceGroup: string, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; - createInResourceGroup(configContract: Models.ConfigData, resourceGroup: string, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + createInResourceGroup(configContract: Models.ConfigData, resourceGroup: string, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + createInResourceGroup(configContract: Models.ConfigData, resourceGroup: string, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { return this.client.sendOperationRequest( { configContract, @@ -192,7 +192,7 @@ const listBySubscriptionOperationSpec: msRest.OperationSpec = { bodyMapper: Mappers.ConfigurationListResult }, default: { - bodyMapper: Mappers.CloudError + bodyMapper: Mappers.ArmErrorResponse } }, serializer @@ -200,9 +200,10 @@ const listBySubscriptionOperationSpec: msRest.OperationSpec = { const createInSubscriptionOperationSpec: msRest.OperationSpec = { httpMethod: "PUT", - path: "subscriptions/{subscriptionId}/providers/Microsoft.Advisor/configurations", + path: "subscriptions/{subscriptionId}/providers/Microsoft.Advisor/configurations/{configurationName}", urlParameters: [ - Parameters.subscriptionId + Parameters.subscriptionId, + Parameters.configurationName ], queryParameters: [ Parameters.apiVersion @@ -218,12 +219,11 @@ const createInSubscriptionOperationSpec: msRest.OperationSpec = { } }, responses: { - 204: {}, - 400: { - bodyMapper: Mappers.ARMErrorResponseBody + 200: { + bodyMapper: Mappers.ConfigData }, default: { - bodyMapper: Mappers.CloudError + bodyMapper: Mappers.ArmErrorResponse } }, serializer @@ -247,7 +247,7 @@ const listByResourceGroupOperationSpec: msRest.OperationSpec = { bodyMapper: Mappers.ConfigurationListResult }, default: { - bodyMapper: Mappers.CloudError + bodyMapper: Mappers.ArmErrorResponse } }, serializer @@ -255,9 +255,10 @@ const listByResourceGroupOperationSpec: msRest.OperationSpec = { const createInResourceGroupOperationSpec: msRest.OperationSpec = { httpMethod: "PUT", - path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Advisor/configurations", + path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Advisor/configurations/{configurationName}", urlParameters: [ Parameters.subscriptionId, + Parameters.configurationName, Parameters.resourceGroup ], queryParameters: [ @@ -274,12 +275,11 @@ const createInResourceGroupOperationSpec: msRest.OperationSpec = { } }, responses: { - 204: {}, - 400: { - bodyMapper: Mappers.ARMErrorResponseBody + 200: { + bodyMapper: Mappers.ConfigData }, default: { - bodyMapper: Mappers.CloudError + bodyMapper: Mappers.ArmErrorResponse } }, serializer @@ -300,7 +300,7 @@ const listBySubscriptionNextOperationSpec: msRest.OperationSpec = { bodyMapper: Mappers.ConfigurationListResult }, default: { - bodyMapper: Mappers.CloudError + bodyMapper: Mappers.ArmErrorResponse } }, serializer diff --git a/sdk/advisor/arm-advisor/src/operations/index.ts b/sdk/advisor/arm-advisor/src/operations/index.ts index 0b5134141fb7..1b2399089695 100644 --- a/sdk/advisor/arm-advisor/src/operations/index.ts +++ b/sdk/advisor/arm-advisor/src/operations/index.ts @@ -8,6 +8,7 @@ * regenerated. */ +export * from "./recommendationMetadata"; export * from "./configurations"; export * from "./recommendations"; export * from "./operations"; diff --git a/sdk/advisor/arm-advisor/src/operations/recommendationMetadata.ts b/sdk/advisor/arm-advisor/src/operations/recommendationMetadata.ts new file mode 100644 index 000000000000..487abe86bdca --- /dev/null +++ b/sdk/advisor/arm-advisor/src/operations/recommendationMetadata.ts @@ -0,0 +1,177 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +import * as msRest from "@azure/ms-rest-js"; +import * as Models from "../models"; +import * as Mappers from "../models/recommendationMetadataMappers"; +import * as Parameters from "../models/parameters"; +import { AdvisorManagementClientContext } from "../advisorManagementClientContext"; + +/** Class representing a RecommendationMetadata. */ +export class RecommendationMetadata { + private readonly client: AdvisorManagementClientContext; + + /** + * Create a RecommendationMetadata. + * @param {AdvisorManagementClientContext} client Reference to the service client. + */ + constructor(client: AdvisorManagementClientContext) { + this.client = client; + } + + /** + * @summary Gets the metadata entity. + * @param name Name of metadata entity. + * @param [options] The optional parameters + * @returns Promise + */ + get(name: string, options?: msRest.RequestOptionsBase): Promise; + /** + * @param name Name of metadata entity. + * @param callback The callback + */ + get(name: string, callback: msRest.ServiceCallback): void; + /** + * @param name Name of metadata entity. + * @param options The optional parameters + * @param callback The callback + */ + get(name: string, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + get(name: string, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + return this.client.sendOperationRequest( + { + name, + options + }, + getOperationSpec, + callback) as Promise; + } + + /** + * @summary Gets the list of metadata entities. + * @param [options] The optional parameters + * @returns Promise + */ + list(options?: msRest.RequestOptionsBase): Promise; + /** + * @param callback The callback + */ + list(callback: msRest.ServiceCallback): void; + /** + * @param options The optional parameters + * @param callback The callback + */ + list(options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + list(options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + return this.client.sendOperationRequest( + { + options + }, + listOperationSpec, + callback) as Promise; + } + + /** + * @summary Gets the list of metadata entities. + * @param nextPageLink The NextLink from the previous successful call to List operation. + * @param [options] The optional parameters + * @returns Promise + */ + listNext(nextPageLink: string, options?: msRest.RequestOptionsBase): Promise; + /** + * @param nextPageLink The NextLink from the previous successful call to List operation. + * @param callback The callback + */ + listNext(nextPageLink: string, callback: msRest.ServiceCallback): void; + /** + * @param nextPageLink The NextLink from the previous successful call to List operation. + * @param options The optional parameters + * @param callback The callback + */ + listNext(nextPageLink: string, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + listNext(nextPageLink: string, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + return this.client.sendOperationRequest( + { + nextPageLink, + options + }, + listNextOperationSpec, + callback) as Promise; + } +} + +// Operation Specifications +const serializer = new msRest.Serializer(Mappers); +const getOperationSpec: msRest.OperationSpec = { + httpMethod: "GET", + path: "providers/Microsoft.Advisor/metadata/{name}", + urlParameters: [ + Parameters.name + ], + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + responses: { + 200: { + bodyMapper: Mappers.MetadataEntity + }, + 404: { + bodyMapper: Mappers.ARMErrorResponseBody + }, + default: { + bodyMapper: Mappers.CloudError + } + }, + serializer +}; + +const listOperationSpec: msRest.OperationSpec = { + httpMethod: "GET", + path: "providers/Microsoft.Advisor/metadata", + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + responses: { + 200: { + bodyMapper: Mappers.MetadataEntityListResult + }, + default: { + bodyMapper: Mappers.CloudError + } + }, + serializer +}; + +const listNextOperationSpec: msRest.OperationSpec = { + httpMethod: "GET", + baseUrl: "https://management.azure.com", + path: "{nextLink}", + urlParameters: [ + Parameters.nextPageLink + ], + headerParameters: [ + Parameters.acceptLanguage + ], + responses: { + 200: { + bodyMapper: Mappers.MetadataEntityListResult + }, + default: { + bodyMapper: Mappers.CloudError + } + }, + serializer +}; diff --git a/sdk/advisor/arm-advisor/tsconfig.json b/sdk/advisor/arm-advisor/tsconfig.json index 87bbf5b5fa49..422b584abd5e 100644 --- a/sdk/advisor/arm-advisor/tsconfig.json +++ b/sdk/advisor/arm-advisor/tsconfig.json @@ -9,7 +9,7 @@ "esModuleInterop": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, - "lib": ["es6"], + "lib": ["es6", "dom"], "declaration": true, "outDir": "./esm", "importHelpers": true diff --git a/sdk/analysisservices/arm-analysisservices/package.json b/sdk/analysisservices/arm-analysisservices/package.json index 706ec85792e4..c2c9afe9db53 100644 --- a/sdk/analysisservices/arm-analysisservices/package.json +++ b/sdk/analysisservices/arm-analysisservices/package.json @@ -2,7 +2,7 @@ "name": "@azure/arm-analysisservices", "author": "Microsoft Corporation", "description": "AnalysisServicesManagementClient Library with typescript type definitions for node.js and browser.", - "version": "2.3.0", + "version": "2.3.1", "dependencies": { "@azure/ms-rest-azure-js": "^1.1.0", "@azure/ms-rest-js": "^1.1.0", diff --git a/sdk/analysisservices/arm-analysisservices/src/analysisServicesManagementClientContext.ts b/sdk/analysisservices/arm-analysisservices/src/analysisServicesManagementClientContext.ts index 2655345e5084..32f4132eebab 100644 --- a/sdk/analysisservices/arm-analysisservices/src/analysisServicesManagementClientContext.ts +++ b/sdk/analysisservices/arm-analysisservices/src/analysisServicesManagementClientContext.ts @@ -13,7 +13,7 @@ import * as msRest from "@azure/ms-rest-js"; import * as msRestAzure from "@azure/ms-rest-azure-js"; const packageName = "@azure/arm-analysisservices"; -const packageVersion = "0.1.0"; +const packageVersion = "2.3.1"; export class AnalysisServicesManagementClientContext extends msRestAzure.AzureServiceClient { credentials: msRest.ServiceClientCredentials; diff --git a/sdk/analysisservices/arm-analysisservices/src/models/index.ts b/sdk/analysisservices/arm-analysisservices/src/models/index.ts index 3f9e871bceee..b3760e30eb5f 100644 --- a/sdk/analysisservices/arm-analysisservices/src/models/index.ts +++ b/sdk/analysisservices/arm-analysisservices/src/models/index.ts @@ -268,7 +268,7 @@ export interface IPv4FirewallSettings { */ firewallRules?: IPv4FirewallRule[]; /** - * @member {string} [enablePowerBIService] The indicator of enableing PBI + * @member {string} [enablePowerBIService] The indicator of enabling PBI * service. */ enablePowerBIService?: string; @@ -387,7 +387,7 @@ export interface CheckServerNameAvailabilityParameters { /** * @interface * An interface representing CheckServerNameAvailabilityResult. - * The checking result of server name availibility. + * The checking result of server name availability. * */ export interface CheckServerNameAvailabilityResult { @@ -590,15 +590,15 @@ export type ServersGetDetailsResponse = AnalysisServicesServer & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: AnalysisServicesServer; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: AnalysisServicesServer; + }; }; /** @@ -609,15 +609,15 @@ export type ServersCreateResponse = AnalysisServicesServer & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: AnalysisServicesServer; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: AnalysisServicesServer; + }; }; /** @@ -628,15 +628,15 @@ export type ServersUpdateResponse = AnalysisServicesServer & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: AnalysisServicesServer; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: AnalysisServicesServer; + }; }; /** @@ -647,15 +647,15 @@ export type ServersListByResourceGroupResponse = AnalysisServicesServers & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: AnalysisServicesServers; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: AnalysisServicesServers; + }; }; /** @@ -666,15 +666,15 @@ export type ServersListResponse = AnalysisServicesServers & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: AnalysisServicesServers; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: AnalysisServicesServers; + }; }; /** @@ -685,15 +685,15 @@ export type ServersListSkusForNewResponse = SkuEnumerationForNewResourceResult & * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: SkuEnumerationForNewResourceResult; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: SkuEnumerationForNewResourceResult; + }; }; /** @@ -704,15 +704,15 @@ export type ServersListSkusForExistingResponse = SkuEnumerationForExistingResour * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: SkuEnumerationForExistingResourceResult; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: SkuEnumerationForExistingResourceResult; + }; }; /** @@ -723,15 +723,15 @@ export type ServersListGatewayStatusResponse = GatewayListStatusLive & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: GatewayListStatusLive; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: GatewayListStatusLive; + }; }; /** @@ -742,15 +742,15 @@ export type ServersCheckNameAvailabilityResponse = CheckServerNameAvailabilityRe * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: CheckServerNameAvailabilityResult; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: CheckServerNameAvailabilityResult; + }; }; /** @@ -761,15 +761,15 @@ export type ServersListOperationStatusesResponse = OperationStatus & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: OperationStatus; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: OperationStatus; + }; }; /** @@ -780,15 +780,15 @@ export type ServersBeginCreateResponse = AnalysisServicesServer & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: AnalysisServicesServer; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: AnalysisServicesServer; + }; }; /** @@ -799,15 +799,15 @@ export type ServersBeginUpdateResponse = AnalysisServicesServer & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: AnalysisServicesServer; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: AnalysisServicesServer; + }; }; /** @@ -818,15 +818,15 @@ export type OperationsListResponse = OperationListResult & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: OperationListResult; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: OperationListResult; + }; }; /** @@ -837,13 +837,13 @@ export type OperationsListNextResponse = OperationListResult & { * The underlying HTTP response. */ _response: msRest.HttpResponse & { - /** - * The response body as text (string format) - */ - bodyAsText: string; - /** - * The response body as parsed JSON or XML - */ - parsedBody: OperationListResult; - }; + /** + * The response body as text (string format) + */ + bodyAsText: string; + /** + * The response body as parsed JSON or XML + */ + parsedBody: OperationListResult; + }; }; diff --git a/sdk/anomalydetector/ai-anomaly-detector/package.json b/sdk/anomalydetector/ai-anomaly-detector/package.json index 9297043552f3..8579ca722779 100644 --- a/sdk/anomalydetector/ai-anomaly-detector/package.json +++ b/sdk/anomalydetector/ai-anomaly-detector/package.json @@ -81,16 +81,10 @@ "@types/chai": "^4.1.6", "@types/mocha": "^7.0.2", "@types/node": "^8.0.0", - "@typescript-eslint/eslint-plugin": "^2.0.0", - "@typescript-eslint/parser": "^2.0.0", "chai": "^4.2.0", "cross-env": "^7.0.2", "dotenv": "^8.2.0", "eslint": "^6.1.0", - "eslint-config-prettier": "^6.0.0", - "eslint-plugin-no-null": "^1.0.2", - "eslint-plugin-no-only-tests": "^2.3.0", - "eslint-plugin-promise": "^4.1.1", "inherits": "^2.0.3", "karma": "^5.1.0", "karma-chrome-launcher": "^3.0.0", diff --git a/sdk/anomalydetector/ai-anomaly-detector/review/ai-anomaly-detector.api.md b/sdk/anomalydetector/ai-anomaly-detector/review/ai-anomaly-detector.api.md index 167a5b55f785..83fe35bdf105 100644 --- a/sdk/anomalydetector/ai-anomaly-detector/review/ai-anomaly-detector.api.md +++ b/sdk/anomalydetector/ai-anomaly-detector/review/ai-anomaly-detector.api.md @@ -13,9 +13,9 @@ import { TokenCredential } from '@azure/core-auth'; // @public export class AnomalyDetectorClient { constructor(endpointUrl: string, credential: TokenCredential | KeyCredential, options?: AnomalyDetectorClientOptions); - detectChangePoint(body: DetectChangePointRequest, options?: OperationOptions): Promise; - detectEntireSeries(body: DetectRequest, options?: OperationOptions): Promise; - detectLastPoint(body: DetectRequest, options?: OperationOptions): Promise; + detectChangePoint(body: DetectChangePointRequest, options?: DetectChangePointOptions): Promise; + detectEntireSeries(body: DetectRequest, options?: DetectEntireSeriesOptions): Promise; + detectLastPoint(body: DetectRequest, options?: DetectLastPointOptions): Promise; } // @public @@ -46,6 +46,9 @@ export type AnomalyDetectorClientDetectLastPointResponse = DetectLastPointRespon export interface AnomalyDetectorClientOptions extends PipelineOptions { } +// @public (undocumented) +export type DetectChangePointOptions = OperationOptions; + // @public (undocumented) export interface DetectChangePointRequest { customInterval?: number; @@ -74,6 +77,12 @@ export interface DetectEntireResponse { upperMargins: number[]; } +// @public (undocumented) +export type DetectEntireSeriesOptions = OperationOptions; + +// @public (undocumented) +export type DetectLastPointOptions = OperationOptions; + // @public (undocumented) export interface DetectLastPointResponse { expectedValue: number; diff --git a/sdk/anomalydetector/ai-anomaly-detector/src/AnomalyDetectorClient.ts b/sdk/anomalydetector/ai-anomaly-detector/src/AnomalyDetectorClient.ts index 9d53dd2dc420..bfe27c751715 100644 --- a/sdk/anomalydetector/ai-anomaly-detector/src/AnomalyDetectorClient.ts +++ b/sdk/anomalydetector/ai-anomaly-detector/src/AnomalyDetectorClient.ts @@ -29,6 +29,10 @@ import { logger } from "./logger"; import { createSpan } from "./tracing"; import { CanonicalCode } from "@opentelemetry/api"; +export type DetectEntireSeriesOptions = OperationOptions; +export type DetectLastPointOptions = OperationOptions; +export type DetectChangePointOptions = OperationOptions; + /** * Client class for interacting with Azure Anomaly Detector service. */ @@ -64,7 +68,6 @@ export class AnomalyDetectorClient { constructor( endpointUrl: string, credential: TokenCredential | KeyCredential, - // eslint-disable-next-line @azure/azure-sdk/ts-naming-options options?: AnomalyDetectorClientOptions ) { this.endpointUrl = endpointUrl; @@ -110,8 +113,7 @@ export class AnomalyDetectorClient { */ public detectEntireSeries( body: DetectRequest, - // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - options?: OperationOptions + options?: DetectEntireSeriesOptions ): Promise { const realOptions = options || {}; const { span, updatedOptions: finalOptions } = createSpan( @@ -142,8 +144,7 @@ export class AnomalyDetectorClient { */ public detectLastPoint( body: DetectRequest, - // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - options?: OperationOptions + options?: DetectLastPointOptions ): Promise { const realOptions = options || {}; const { span, updatedOptions: finalOptions } = createSpan( @@ -172,8 +173,7 @@ export class AnomalyDetectorClient { */ detectChangePoint( body: DetectChangePointRequest, - // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - options?: OperationOptions + options?: DetectChangePointOptions ): Promise { const realOptions = options || {}; const { span, updatedOptions: finalOptions } = createSpan( diff --git a/sdk/anomalydetector/ai-anomaly-detector/src/index.ts b/sdk/anomalydetector/ai-anomaly-detector/src/index.ts index 52631785a055..1af5c1e09314 100644 --- a/sdk/anomalydetector/ai-anomaly-detector/src/index.ts +++ b/sdk/anomalydetector/ai-anomaly-detector/src/index.ts @@ -1,5 +1,10 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -export { AnomalyDetectorClient } from "./AnomalyDetectorClient"; +export { + AnomalyDetectorClient, + DetectEntireSeriesOptions, + DetectLastPointOptions, + DetectChangePointOptions +} from "./AnomalyDetectorClient"; export * from "./models"; diff --git a/sdk/appconfiguration/app-configuration/package.json b/sdk/appconfiguration/app-configuration/package.json index 7798dbf3e25b..6f9de6da01d4 100644 --- a/sdk/appconfiguration/app-configuration/package.json +++ b/sdk/appconfiguration/app-configuration/package.json @@ -54,8 +54,8 @@ "execute:samples": "npm run build:samples && echo Skipped.", "extract-api": "tsc -p . && api-extractor run --local", "format": "prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", - "lint:fix": "eslint -c ../../../.eslintrc.json src test samples --ext .ts --fix", - "lint": "eslint -c ../../../.eslintrc.json src test --ext .ts -f html -o template-lintReport.html || exit 0", + "lint:fix": "eslint package.json api-extractor.json src test --ext .ts --fix", + "lint": "eslint package.json api-extractor.json src test --ext .ts -f html -o app-configuration-lintReport.html || exit 0", "prebuild": "npm run clean", "pack": "npm pack 2>&1", "swagger": "autorest --typescript swagger/swagger.md", @@ -103,16 +103,10 @@ "@types/mocha": "^7.0.2", "@types/node": "^8.0.0", "@types/sinon": "^9.0.4", - "@typescript-eslint/eslint-plugin": "^2.0.0", - "@typescript-eslint/parser": "^2.0.0", "assert": "^1.4.1", "chai": "^4.2.0", "dotenv": "^8.2.0", "eslint": "^6.1.0", - "eslint-config-prettier": "^6.0.0", - "eslint-plugin-no-null": "^1.0.2", - "eslint-plugin-no-only-tests": "^2.3.0", - "eslint-plugin-promise": "^4.1.1", "esm": "^3.2.18", "karma": "^5.1.0", "karma-chrome-launcher": "^3.0.0", diff --git a/sdk/appservice/arm-appservice/package.json b/sdk/appservice/arm-appservice/package.json index 61154fedf137..68fdad93c39b 100644 --- a/sdk/appservice/arm-appservice/package.json +++ b/sdk/appservice/arm-appservice/package.json @@ -2,7 +2,7 @@ "name": "@azure/arm-appservice", "author": "Microsoft Corporation", "description": "WebSiteManagementClient Library with typescript type definitions for node.js and browser.", - "version": "6.0.0", + "version": "6.1.0", "dependencies": { "@azure/ms-rest-azure-js": "^2.0.1", "@azure/ms-rest-js": "^2.0.4", diff --git a/sdk/appservice/arm-appservice/src/models/appServiceCertificateOrdersMappers.ts b/sdk/appservice/arm-appservice/src/models/appServiceCertificateOrdersMappers.ts index 65d6971efb4b..602615db47d6 100644 --- a/sdk/appservice/arm-appservice/src/models/appServiceCertificateOrdersMappers.ts +++ b/sdk/appservice/arm-appservice/src/models/appServiceCertificateOrdersMappers.ts @@ -29,6 +29,7 @@ export { AppServiceEnvironmentResource, AppServicePlan, AppServicePlanPatchResource, + ArmIdWrapper, AutoHealActions, AutoHealCustomAction, AutoHealRules, @@ -62,6 +63,8 @@ export { ContainerThrottlingData, ContinuousWebJob, CorsSettings, + CsmPublishingCredentialsPoliciesCollection, + CsmPublishingCredentialsPoliciesEntity, CustomHostnameAnalysisResult, DatabaseBackupSetting, DataSource, @@ -126,6 +129,9 @@ export { PrivateAccess, PrivateAccessSubnet, PrivateAccessVirtualNetwork, + PrivateEndpointConnectionResource, + PrivateLinkConnectionApprovalRequestResource, + PrivateLinkConnectionState, ProcessInfo, ProcessModuleInfo, ProcessThreadInfo, diff --git a/sdk/appservice/arm-appservice/src/models/appServiceEnvironmentsMappers.ts b/sdk/appservice/arm-appservice/src/models/appServiceEnvironmentsMappers.ts index 30dea6df1d7f..24322870e614 100644 --- a/sdk/appservice/arm-appservice/src/models/appServiceEnvironmentsMappers.ts +++ b/sdk/appservice/arm-appservice/src/models/appServiceEnvironmentsMappers.ts @@ -29,6 +29,7 @@ export { AppServicePlan, AppServicePlanCollection, AppServicePlanPatchResource, + ArmIdWrapper, AutoHealActions, AutoHealCustomAction, AutoHealRules, @@ -62,6 +63,8 @@ export { ContainerThrottlingData, ContinuousWebJob, CorsSettings, + CsmPublishingCredentialsPoliciesCollection, + CsmPublishingCredentialsPoliciesEntity, CsmUsageQuota, CsmUsageQuotaCollection, CustomHostnameAnalysisResult, @@ -136,6 +139,9 @@ export { PrivateAccess, PrivateAccessSubnet, PrivateAccessVirtualNetwork, + PrivateEndpointConnectionResource, + PrivateLinkConnectionApprovalRequestResource, + PrivateLinkConnectionState, ProcessInfo, ProcessModuleInfo, ProcessThreadInfo, diff --git a/sdk/appservice/arm-appservice/src/models/appServicePlansMappers.ts b/sdk/appservice/arm-appservice/src/models/appServicePlansMappers.ts index 4ba280f3dc30..89f827a39725 100644 --- a/sdk/appservice/arm-appservice/src/models/appServicePlansMappers.ts +++ b/sdk/appservice/arm-appservice/src/models/appServicePlansMappers.ts @@ -28,6 +28,7 @@ export { AppServicePlan, AppServicePlanCollection, AppServicePlanPatchResource, + ArmIdWrapper, AutoHealActions, AutoHealCustomAction, AutoHealRules, @@ -61,6 +62,8 @@ export { ContainerThrottlingData, ContinuousWebJob, CorsSettings, + CsmPublishingCredentialsPoliciesCollection, + CsmPublishingCredentialsPoliciesEntity, CsmUsageQuota, CsmUsageQuotaCollection, CustomHostnameAnalysisResult, @@ -128,6 +131,9 @@ export { PrivateAccess, PrivateAccessSubnet, PrivateAccessVirtualNetwork, + PrivateEndpointConnectionResource, + PrivateLinkConnectionApprovalRequestResource, + PrivateLinkConnectionState, ProcessInfo, ProcessModuleInfo, ProcessThreadInfo, diff --git a/sdk/appservice/arm-appservice/src/models/certificatesMappers.ts b/sdk/appservice/arm-appservice/src/models/certificatesMappers.ts index 8b93b8bc9d7b..2c69e05c0aca 100644 --- a/sdk/appservice/arm-appservice/src/models/certificatesMappers.ts +++ b/sdk/appservice/arm-appservice/src/models/certificatesMappers.ts @@ -27,6 +27,7 @@ export { AppServiceEnvironmentResource, AppServicePlan, AppServicePlanPatchResource, + ArmIdWrapper, AutoHealActions, AutoHealCustomAction, AutoHealRules, @@ -61,6 +62,8 @@ export { ContainerThrottlingData, ContinuousWebJob, CorsSettings, + CsmPublishingCredentialsPoliciesCollection, + CsmPublishingCredentialsPoliciesEntity, CustomHostnameAnalysisResult, DatabaseBackupSetting, DataSource, @@ -124,6 +127,9 @@ export { PrivateAccess, PrivateAccessSubnet, PrivateAccessVirtualNetwork, + PrivateEndpointConnectionResource, + PrivateLinkConnectionApprovalRequestResource, + PrivateLinkConnectionState, ProcessInfo, ProcessModuleInfo, ProcessThreadInfo, diff --git a/sdk/appservice/arm-appservice/src/models/deletedWebAppsMappers.ts b/sdk/appservice/arm-appservice/src/models/deletedWebAppsMappers.ts index 4ef20c6965c2..7d7900181c96 100644 --- a/sdk/appservice/arm-appservice/src/models/deletedWebAppsMappers.ts +++ b/sdk/appservice/arm-appservice/src/models/deletedWebAppsMappers.ts @@ -27,6 +27,7 @@ export { AppServiceEnvironmentResource, AppServicePlan, AppServicePlanPatchResource, + ArmIdWrapper, AutoHealActions, AutoHealCustomAction, AutoHealRules, @@ -60,6 +61,8 @@ export { ContainerThrottlingData, ContinuousWebJob, CorsSettings, + CsmPublishingCredentialsPoliciesCollection, + CsmPublishingCredentialsPoliciesEntity, CustomHostnameAnalysisResult, DatabaseBackupSetting, DataSource, @@ -124,6 +127,9 @@ export { PrivateAccess, PrivateAccessSubnet, PrivateAccessVirtualNetwork, + PrivateEndpointConnectionResource, + PrivateLinkConnectionApprovalRequestResource, + PrivateLinkConnectionState, ProcessInfo, ProcessModuleInfo, ProcessThreadInfo, diff --git a/sdk/appservice/arm-appservice/src/models/diagnosticsMappers.ts b/sdk/appservice/arm-appservice/src/models/diagnosticsMappers.ts index b948362a85a0..80b2ffdc8f6e 100644 --- a/sdk/appservice/arm-appservice/src/models/diagnosticsMappers.ts +++ b/sdk/appservice/arm-appservice/src/models/diagnosticsMappers.ts @@ -27,6 +27,7 @@ export { AppServiceEnvironmentResource, AppServicePlan, AppServicePlanPatchResource, + ArmIdWrapper, AutoHealActions, AutoHealCustomAction, AutoHealRules, @@ -60,6 +61,8 @@ export { ContainerThrottlingData, ContinuousWebJob, CorsSettings, + CsmPublishingCredentialsPoliciesCollection, + CsmPublishingCredentialsPoliciesEntity, CustomHostnameAnalysisResult, DatabaseBackupSetting, DataSource, @@ -127,6 +130,9 @@ export { PrivateAccess, PrivateAccessSubnet, PrivateAccessVirtualNetwork, + PrivateEndpointConnectionResource, + PrivateLinkConnectionApprovalRequestResource, + PrivateLinkConnectionState, ProcessInfo, ProcessModuleInfo, ProcessThreadInfo, diff --git a/sdk/appservice/arm-appservice/src/models/domainsMappers.ts b/sdk/appservice/arm-appservice/src/models/domainsMappers.ts index 0a5574a3c3d6..d63dc90e1df5 100644 --- a/sdk/appservice/arm-appservice/src/models/domainsMappers.ts +++ b/sdk/appservice/arm-appservice/src/models/domainsMappers.ts @@ -27,6 +27,7 @@ export { AppServiceEnvironmentResource, AppServicePlan, AppServicePlanPatchResource, + ArmIdWrapper, AutoHealActions, AutoHealCustomAction, AutoHealRules, @@ -60,6 +61,8 @@ export { ContainerThrottlingData, ContinuousWebJob, CorsSettings, + CsmPublishingCredentialsPoliciesCollection, + CsmPublishingCredentialsPoliciesEntity, CustomHostnameAnalysisResult, DatabaseBackupSetting, DataSource, @@ -130,6 +133,9 @@ export { PrivateAccess, PrivateAccessSubnet, PrivateAccessVirtualNetwork, + PrivateEndpointConnectionResource, + PrivateLinkConnectionApprovalRequestResource, + PrivateLinkConnectionState, ProcessInfo, ProcessModuleInfo, ProcessThreadInfo, diff --git a/sdk/appservice/arm-appservice/src/models/index.ts b/sdk/appservice/arm-appservice/src/models/index.ts index d6c41d772b85..d40a8d07d381 100644 --- a/sdk/appservice/arm-appservice/src/models/index.ts +++ b/sdk/appservice/arm-appservice/src/models/index.ts @@ -759,8 +759,8 @@ export interface ManagedServiceIdentityUserAssignedIdentitiesValue { */ export interface ManagedServiceIdentity { /** - * Type of managed service identity. Possible values include: 'None', 'SystemAssigned', - * 'UserAssigned' + * Type of managed service identity. Possible values include: 'SystemAssigned', 'UserAssigned', + * 'SystemAssigned, UserAssigned', 'None' */ type?: ManagedServiceIdentityType; /** @@ -1313,6 +1313,10 @@ export interface SiteConfig { * Version of Node.js. */ nodeVersion?: string; + /** + * Version of PowerShell. + */ + powerShellVersion?: string; /** * Linux App Framework and version */ @@ -1341,6 +1345,14 @@ export interface SiteConfig { * true if HTTP logging is enabled; otherwise, false. */ httpLoggingEnabled?: boolean; + /** + * Flag to use Managed Identity Creds for ACR pull + */ + acrUseManagedIdentityCreds?: boolean; + /** + * If using user managed identity, the user managed identity ClientId + */ + acrUserManagedIdentityID?: string; /** * HTTP logs directory size limit. */ @@ -4286,7 +4298,8 @@ export interface ApiKVReference { secretName?: string; secretVersion?: string; /** - * Possible values include: 'None', 'SystemAssigned', 'UserAssigned' + * Possible values include: 'SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned', + * 'None' */ identityType?: ManagedServiceIdentityType; details?: string; @@ -4363,6 +4376,16 @@ export interface ApplicationLogsConfig { azureBlobStorage?: AzureBlobStorageApplicationLogsConfig; } +/** + * A wrapper for an ARM resource id + */ +export interface ArmIdWrapper { + /** + * **NOTE: This property will not be serialized. It can only be populated by the server.** + */ + readonly id?: string; +} + /** * Http logs to azure blob storage configuration. */ @@ -4744,6 +4767,30 @@ export interface CsmCopySlotEntity { siteConfig: SiteConfig; } +/** + * Publishing Credentials Policies parameters. + */ +export interface CsmPublishingCredentialsPoliciesEntity extends ProxyOnlyResource { + /** + * true to allow access to a publishing method; otherwise, false. + */ + allow: boolean; +} + +/** + * Publishing Credentials Policies collection. + */ +export interface CsmPublishingCredentialsPoliciesCollection extends ProxyOnlyResource { + /** + * Whether FTP is allowed. + */ + ftp: CsmPublishingCredentialsPoliciesEntity; + /** + * Whether Scm Basic Auth is allowed. + */ + scm: CsmPublishingCredentialsPoliciesEntity; +} + /** * Publishing options for requested profile. */ @@ -5115,7 +5162,8 @@ export interface KeyVaultReferenceResource extends ProxyOnlyResource { secretName?: string; secretVersion?: string; /** - * Possible values include: 'None', 'SystemAssigned', 'UserAssigned' + * Possible values include: 'SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned', + * 'None' */ identityType?: ManagedServiceIdentityType; details?: string; @@ -5491,6 +5539,90 @@ export interface PrivateAccess extends ProxyOnlyResource { virtualNetworks?: PrivateAccessVirtualNetwork[]; } +/** + * The state of a private link connection + */ +export interface PrivateLinkConnectionState { + /** + * Status of a private link connection + */ + status?: string; + /** + * Description of a private link connection + */ + description?: string; + /** + * ActionsRequired for a private link connection + */ + actionsRequired?: string; +} + +/** + * Private Endpoint Connection ARM resource. + */ +export interface PrivateEndpointConnectionResource extends ProxyOnlyResource { + /** + * **NOTE: This property will not be serialized. It can only be populated by the server.** + */ + readonly provisioningState?: string; + /** + * PrivateEndpoint of a remote private endpoint connection + */ + privateEndpoint?: ArmIdWrapper; + privateLinkServiceConnectionState?: PrivateLinkConnectionState; +} + +/** + * Private Endpoint Connection Approval ARM resource. + */ +export interface PrivateLinkConnectionApprovalRequestResource extends ProxyOnlyResource { + privateLinkServiceConnectionState?: PrivateLinkConnectionState; +} + +/** + * Properties of a private link resource + */ +export interface PrivateLinkResourceProperties { + /** + * GroupId of a private link resource + * **NOTE: This property will not be serialized. It can only be populated by the server.** + */ + readonly groupId?: string; + /** + * RequiredMembers of a private link resource + * **NOTE: This property will not be serialized. It can only be populated by the server.** + */ + readonly requiredMembers?: string[]; + /** + * RequiredZoneNames of a private link resource + * **NOTE: This property will not be serialized. It can only be populated by the server.** + */ + readonly requiredZoneNames?: string[]; +} + +/** + * A private link resource + */ +export interface PrivateLinkResource { + id: string; + /** + * Name of a private link resource + */ + name: string; + type: string; + /** + * Properties of a private link resource + */ + properties: PrivateLinkResourceProperties; +} + +/** + * Wrapper for a collection of private link resources + */ +export interface PrivateLinkResourcesWrapper { + value: PrivateLinkResource[]; +} + /** * Process Thread Information. */ @@ -6056,6 +6188,10 @@ export interface SiteConfigResource extends ProxyOnlyResource { * Version of Node.js. */ nodeVersion?: string; + /** + * Version of PowerShell. + */ + powerShellVersion?: string; /** * Linux App Framework and version */ @@ -6084,6 +6220,14 @@ export interface SiteConfigResource extends ProxyOnlyResource { * true if HTTP logging is enabled; otherwise, false. */ httpLoggingEnabled?: boolean; + /** + * Flag to use Managed Identity Creds for ACR pull + */ + acrUseManagedIdentityCreds?: boolean; + /** + * If using user managed identity, the user managed identity ClientId + */ + acrUserManagedIdentityID?: string; /** * HTTP logs directory size limit. */ @@ -7876,8 +8020,9 @@ export interface AppServicePlanPatchResource extends ProxyOnlyResource { */ readonly resourceGroup?: string; /** - * If Linux app service plan true, false otherwise. Default value: - * false. + * This needs to set to true when creating a Linux App Service Plan, along with + * kind set to Linux. It should be false otherwise. + * Default value: false. */ reserved?: boolean; /** @@ -9554,11 +9699,12 @@ export type RouteType = 'DEFAULT' | 'INHERITED' | 'STATIC'; /** * Defines values for ManagedServiceIdentityType. - * Possible values include: 'None', 'SystemAssigned', 'UserAssigned' + * Possible values include: 'SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned', + * 'None' * @readonly * @enum {string} */ -export type ManagedServiceIdentityType = 'None' | 'SystemAssigned' | 'UserAssigned'; +export type ManagedServiceIdentityType = 'SystemAssigned' | 'UserAssigned' | 'SystemAssigned, UserAssigned' | 'None'; /** * Defines values for IpFilterTag. @@ -12755,6 +12901,106 @@ export type WebAppsListBackupStatusSecretsResponse = BackupItem & { }; }; +/** + * Contains response data for the getBasicPublishingCredentialsPolicies operation. + */ +export type WebAppsGetBasicPublishingCredentialsPoliciesResponse = CsmPublishingCredentialsPoliciesCollection & { + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: CsmPublishingCredentialsPoliciesCollection; + }; +}; + +/** + * Contains response data for the getFtpAllowed operation. + */ +export type WebAppsGetFtpAllowedResponse = CsmPublishingCredentialsPoliciesEntity & { + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: CsmPublishingCredentialsPoliciesEntity; + }; +}; + +/** + * Contains response data for the updateFtpAllowed operation. + */ +export type WebAppsUpdateFtpAllowedResponse = CsmPublishingCredentialsPoliciesEntity & { + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: CsmPublishingCredentialsPoliciesEntity; + }; +}; + +/** + * Contains response data for the getScmAllowed operation. + */ +export type WebAppsGetScmAllowedResponse = CsmPublishingCredentialsPoliciesEntity & { + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: CsmPublishingCredentialsPoliciesEntity; + }; +}; + +/** + * Contains response data for the updateScmAllowed operation. + */ +export type WebAppsUpdateScmAllowedResponse = CsmPublishingCredentialsPoliciesEntity & { + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: CsmPublishingCredentialsPoliciesEntity; + }; +}; + /** * Contains response data for the listConfigurations operation. */ @@ -17063,6 +17309,91 @@ export type WebAppsPutPrivateAccessVnetSlotResponse = PrivateAccess & { }; }; +/** + * Contains response data for the getPrivateEndpointConnection operation. + */ +export type WebAppsGetPrivateEndpointConnectionResponse = PrivateEndpointConnectionResource & { + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: PrivateEndpointConnectionResource; + }; +}; + +/** + * Contains response data for the approveOrRejectPrivateEndpointConnection operation. + */ +export type WebAppsApproveOrRejectPrivateEndpointConnectionResponse = PrivateEndpointConnectionResource & { + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: PrivateEndpointConnectionResource; + }; +}; + +/** + * Contains response data for the deletePrivateEndpointConnection operation. + */ +export type WebAppsDeletePrivateEndpointConnectionResponse = { + /** + * The parsed response body. + */ + body: any; + + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: any; + }; +}; + +/** + * Contains response data for the getPrivateLinkResources operation. + */ +export type WebAppsGetPrivateLinkResourcesResponse = PrivateLinkResourcesWrapper & { + /** + * The underlying HTTP response. + */ + _response: msRest.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: PrivateLinkResourcesWrapper; + }; +}; + /** * Contains response data for the listProcessesSlot operation. */ @@ -18475,6 +18806,51 @@ export type WebAppsBeginStartWebSiteNetworkTraceOperationSlotResponse = Array lroPoller.pollUntilFinished()); } + /** + * Description for Returns whether Scm basic auth is allowed and whether Ftp is allowed for a given + * site. + * @summary Returns whether Scm basic auth is allowed and whether Ftp is allowed for a given site. + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param [options] The optional parameters + * @returns Promise + */ + getBasicPublishingCredentialsPolicies(resourceGroupName: string, name: string, options?: msRest.RequestOptionsBase): Promise; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param callback The callback + */ + getBasicPublishingCredentialsPolicies(resourceGroupName: string, name: string, callback: msRest.ServiceCallback): void; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param options The optional parameters + * @param callback The callback + */ + getBasicPublishingCredentialsPolicies(resourceGroupName: string, name: string, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + getBasicPublishingCredentialsPolicies(resourceGroupName: string, name: string, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + return this.client.sendOperationRequest( + { + resourceGroupName, + name, + options + }, + getBasicPublishingCredentialsPoliciesOperationSpec, + callback) as Promise; + } + + /** + * Description for Returns whether FTP is allowed on the site or not. + * @summary Returns whether FTP is allowed on the site or not. + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param [options] The optional parameters + * @returns Promise + */ + getFtpAllowed(resourceGroupName: string, name: string, options?: msRest.RequestOptionsBase): Promise; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param callback The callback + */ + getFtpAllowed(resourceGroupName: string, name: string, callback: msRest.ServiceCallback): void; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param options The optional parameters + * @param callback The callback + */ + getFtpAllowed(resourceGroupName: string, name: string, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + getFtpAllowed(resourceGroupName: string, name: string, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + return this.client.sendOperationRequest( + { + resourceGroupName, + name, + options + }, + getFtpAllowedOperationSpec, + callback) as Promise; + } + + /** + * Description for Updates whether FTP is allowed on the site or not. + * @summary Updates whether FTP is allowed on the site or not. + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param csmPublishingAccessPoliciesEntity + * @param [options] The optional parameters + * @returns Promise + */ + updateFtpAllowed(resourceGroupName: string, name: string, csmPublishingAccessPoliciesEntity: Models.CsmPublishingCredentialsPoliciesEntity, options?: msRest.RequestOptionsBase): Promise; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param csmPublishingAccessPoliciesEntity + * @param callback The callback + */ + updateFtpAllowed(resourceGroupName: string, name: string, csmPublishingAccessPoliciesEntity: Models.CsmPublishingCredentialsPoliciesEntity, callback: msRest.ServiceCallback): void; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param csmPublishingAccessPoliciesEntity + * @param options The optional parameters + * @param callback The callback + */ + updateFtpAllowed(resourceGroupName: string, name: string, csmPublishingAccessPoliciesEntity: Models.CsmPublishingCredentialsPoliciesEntity, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + updateFtpAllowed(resourceGroupName: string, name: string, csmPublishingAccessPoliciesEntity: Models.CsmPublishingCredentialsPoliciesEntity, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + return this.client.sendOperationRequest( + { + resourceGroupName, + name, + csmPublishingAccessPoliciesEntity, + options + }, + updateFtpAllowedOperationSpec, + callback) as Promise; + } + + /** + * Description for Returns whether Scm basic auth is allowed on the site or not. + * @summary Returns whether Scm basic auth is allowed on the site or not. + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param [options] The optional parameters + * @returns Promise + */ + getScmAllowed(resourceGroupName: string, name: string, options?: msRest.RequestOptionsBase): Promise; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param callback The callback + */ + getScmAllowed(resourceGroupName: string, name: string, callback: msRest.ServiceCallback): void; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param options The optional parameters + * @param callback The callback + */ + getScmAllowed(resourceGroupName: string, name: string, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + getScmAllowed(resourceGroupName: string, name: string, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + return this.client.sendOperationRequest( + { + resourceGroupName, + name, + options + }, + getScmAllowedOperationSpec, + callback) as Promise; + } + + /** + * Description for Updates whether user publishing credentials are allowed on the site or not. + * @summary Updates whether user publishing credentials are allowed on the site or not. + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param csmPublishingAccessPoliciesEntity + * @param [options] The optional parameters + * @returns Promise + */ + updateScmAllowed(resourceGroupName: string, name: string, csmPublishingAccessPoliciesEntity: Models.CsmPublishingCredentialsPoliciesEntity, options?: msRest.RequestOptionsBase): Promise; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param csmPublishingAccessPoliciesEntity + * @param callback The callback + */ + updateScmAllowed(resourceGroupName: string, name: string, csmPublishingAccessPoliciesEntity: Models.CsmPublishingCredentialsPoliciesEntity, callback: msRest.ServiceCallback): void; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the app. + * @param csmPublishingAccessPoliciesEntity + * @param options The optional parameters + * @param callback The callback + */ + updateScmAllowed(resourceGroupName: string, name: string, csmPublishingAccessPoliciesEntity: Models.CsmPublishingCredentialsPoliciesEntity, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + updateScmAllowed(resourceGroupName: string, name: string, csmPublishingAccessPoliciesEntity: Models.CsmPublishingCredentialsPoliciesEntity, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + return this.client.sendOperationRequest( + { + resourceGroupName, + name, + csmPublishingAccessPoliciesEntity, + options + }, + updateScmAllowedOperationSpec, + callback) as Promise; + } + /** * Description for List the configurations of an app * @summary List the configurations of an app @@ -10635,6 +10809,105 @@ export class WebApps { callback) as Promise; } + /** + * Description for Gets a private endpoint connection + * @summary Gets a private endpoint connection + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the site. + * @param privateEndpointConnectionName + * @param [options] The optional parameters + * @returns Promise + */ + getPrivateEndpointConnection(resourceGroupName: string, name: string, privateEndpointConnectionName: string, options?: msRest.RequestOptionsBase): Promise; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the site. + * @param privateEndpointConnectionName + * @param callback The callback + */ + getPrivateEndpointConnection(resourceGroupName: string, name: string, privateEndpointConnectionName: string, callback: msRest.ServiceCallback): void; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the site. + * @param privateEndpointConnectionName + * @param options The optional parameters + * @param callback The callback + */ + getPrivateEndpointConnection(resourceGroupName: string, name: string, privateEndpointConnectionName: string, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + getPrivateEndpointConnection(resourceGroupName: string, name: string, privateEndpointConnectionName: string, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + return this.client.sendOperationRequest( + { + resourceGroupName, + name, + privateEndpointConnectionName, + options + }, + getPrivateEndpointConnectionOperationSpec, + callback) as Promise; + } + + /** + * Description for Approves or rejects a private endpoint connection + * @summary Approves or rejects a private endpoint connection + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the site. + * @param privateEndpointConnectionName + * @param privateEndpointWrapper + * @param [options] The optional parameters + * @returns Promise + */ + approveOrRejectPrivateEndpointConnection(resourceGroupName: string, name: string, privateEndpointConnectionName: string, privateEndpointWrapper: Models.PrivateLinkConnectionApprovalRequestResource, options?: msRest.RequestOptionsBase): Promise { + return this.beginApproveOrRejectPrivateEndpointConnection(resourceGroupName,name,privateEndpointConnectionName,privateEndpointWrapper,options) + .then(lroPoller => lroPoller.pollUntilFinished()) as Promise; + } + + /** + * Description for Deletes a private endpoint connection + * @summary Deletes a private endpoint connection + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the site. + * @param privateEndpointConnectionName + * @param [options] The optional parameters + * @returns Promise + */ + deletePrivateEndpointConnection(resourceGroupName: string, name: string, privateEndpointConnectionName: string, options?: msRest.RequestOptionsBase): Promise { + return this.beginDeletePrivateEndpointConnection(resourceGroupName,name,privateEndpointConnectionName,options) + .then(lroPoller => lroPoller.pollUntilFinished()) as Promise; + } + + /** + * Description for Gets the private link resources + * @summary Gets the private link resources + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the site. + * @param [options] The optional parameters + * @returns Promise + */ + getPrivateLinkResources(resourceGroupName: string, name: string, options?: msRest.RequestOptionsBase): Promise; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the site. + * @param callback The callback + */ + getPrivateLinkResources(resourceGroupName: string, name: string, callback: msRest.ServiceCallback): void; + /** + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the site. + * @param options The optional parameters + * @param callback The callback + */ + getPrivateLinkResources(resourceGroupName: string, name: string, options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void; + getPrivateLinkResources(resourceGroupName: string, name: string, options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise { + return this.client.sendOperationRequest( + { + resourceGroupName, + name, + options + }, + getPrivateLinkResourcesOperationSpec, + callback) as Promise; + } + /** * Description for Get list of processes for a web site, or a deployment slot, or for a specific * scaled-out instance in a web site. @@ -14251,6 +14524,50 @@ export class WebApps { options); } + /** + * Description for Approves or rejects a private endpoint connection + * @summary Approves or rejects a private endpoint connection + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the site. + * @param privateEndpointConnectionName + * @param privateEndpointWrapper + * @param [options] The optional parameters + * @returns Promise + */ + beginApproveOrRejectPrivateEndpointConnection(resourceGroupName: string, name: string, privateEndpointConnectionName: string, privateEndpointWrapper: Models.PrivateLinkConnectionApprovalRequestResource, options?: msRest.RequestOptionsBase): Promise { + return this.client.sendLRORequest( + { + resourceGroupName, + name, + privateEndpointConnectionName, + privateEndpointWrapper, + options + }, + beginApproveOrRejectPrivateEndpointConnectionOperationSpec, + options); + } + + /** + * Description for Deletes a private endpoint connection + * @summary Deletes a private endpoint connection + * @param resourceGroupName Name of the resource group to which the resource belongs. + * @param name Name of the site. + * @param privateEndpointConnectionName + * @param [options] The optional parameters + * @returns Promise + */ + beginDeletePrivateEndpointConnection(resourceGroupName: string, name: string, privateEndpointConnectionName: string, options?: msRest.RequestOptionsBase): Promise { + return this.client.sendLRORequest( + { + resourceGroupName, + name, + privateEndpointConnectionName, + options + }, + beginDeletePrivateEndpointConnectionOperationSpec, + options); + } + /** * Description for Restores an app from a backup blob in Azure Storage. * @summary Restores an app from a backup blob in Azure Storage. @@ -16460,6 +16777,145 @@ const listBackupStatusSecretsOperationSpec: msRest.OperationSpec = { serializer }; +const getBasicPublishingCredentialsPoliciesOperationSpec: msRest.OperationSpec = { + httpMethod: "GET", + path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/basicPublishingCredentialsPolicies", + urlParameters: [ + Parameters.resourceGroupName, + Parameters.name, + Parameters.subscriptionId + ], + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + responses: { + 200: { + bodyMapper: Mappers.CsmPublishingCredentialsPoliciesCollection + }, + default: { + bodyMapper: Mappers.DefaultErrorResponse + } + }, + serializer +}; + +const getFtpAllowedOperationSpec: msRest.OperationSpec = { + httpMethod: "GET", + path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/basicPublishingCredentialsPolicies/ftp", + urlParameters: [ + Parameters.resourceGroupName, + Parameters.name, + Parameters.subscriptionId + ], + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + responses: { + 200: { + bodyMapper: Mappers.CsmPublishingCredentialsPoliciesEntity + }, + default: { + bodyMapper: Mappers.DefaultErrorResponse + } + }, + serializer +}; + +const updateFtpAllowedOperationSpec: msRest.OperationSpec = { + httpMethod: "PUT", + path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/basicPublishingCredentialsPolicies/ftp", + urlParameters: [ + Parameters.resourceGroupName, + Parameters.name, + Parameters.subscriptionId + ], + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + requestBody: { + parameterPath: "csmPublishingAccessPoliciesEntity", + mapper: { + ...Mappers.CsmPublishingCredentialsPoliciesEntity, + required: true + } + }, + responses: { + 200: { + bodyMapper: Mappers.CsmPublishingCredentialsPoliciesEntity + }, + default: { + bodyMapper: Mappers.DefaultErrorResponse + } + }, + serializer +}; + +const getScmAllowedOperationSpec: msRest.OperationSpec = { + httpMethod: "GET", + path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/basicPublishingCredentialsPolicies/scm", + urlParameters: [ + Parameters.resourceGroupName, + Parameters.name, + Parameters.subscriptionId + ], + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + responses: { + 200: { + bodyMapper: Mappers.CsmPublishingCredentialsPoliciesEntity + }, + default: { + bodyMapper: Mappers.DefaultErrorResponse + } + }, + serializer +}; + +const updateScmAllowedOperationSpec: msRest.OperationSpec = { + httpMethod: "PUT", + path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/basicPublishingCredentialsPolicies/scm", + urlParameters: [ + Parameters.resourceGroupName, + Parameters.name, + Parameters.subscriptionId + ], + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + requestBody: { + parameterPath: "csmPublishingAccessPoliciesEntity", + mapper: { + ...Mappers.CsmPublishingCredentialsPoliciesEntity, + required: true + } + }, + responses: { + 200: { + bodyMapper: Mappers.CsmPublishingCredentialsPoliciesEntity + }, + default: { + bodyMapper: Mappers.DefaultErrorResponse + } + }, + serializer +}; + const listConfigurationsOperationSpec: msRest.OperationSpec = { httpMethod: "GET", path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/config", @@ -23499,6 +23955,57 @@ const putPrivateAccessVnetSlotOperationSpec: msRest.OperationSpec = { serializer }; +const getPrivateEndpointConnectionOperationSpec: msRest.OperationSpec = { + httpMethod: "GET", + path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/privateEndpointConnections/{privateEndpointConnectionName}", + urlParameters: [ + Parameters.resourceGroupName, + Parameters.name, + Parameters.privateEndpointConnectionName, + Parameters.subscriptionId + ], + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + responses: { + 200: { + bodyMapper: Mappers.PrivateEndpointConnectionResource + }, + default: { + bodyMapper: Mappers.DefaultErrorResponse + } + }, + serializer +}; + +const getPrivateLinkResourcesOperationSpec: msRest.OperationSpec = { + httpMethod: "GET", + path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/privateLinkResources", + urlParameters: [ + Parameters.resourceGroupName, + Parameters.name, + Parameters.subscriptionId + ], + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + responses: { + 200: { + bodyMapper: Mappers.PrivateLinkResourcesWrapper + }, + default: { + bodyMapper: Mappers.DefaultErrorResponse + } + }, + serializer +}; + const listProcessesSlotOperationSpec: msRest.OperationSpec = { httpMethod: "GET", path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/slots/{slot}/processes", @@ -26274,6 +26781,89 @@ const beginStartWebSiteNetworkTraceOperationSlotOperationSpec: msRest.OperationS serializer }; +const beginApproveOrRejectPrivateEndpointConnectionOperationSpec: msRest.OperationSpec = { + httpMethod: "PUT", + path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/privateEndpointConnections/{privateEndpointConnectionName}", + urlParameters: [ + Parameters.resourceGroupName, + Parameters.name, + Parameters.privateEndpointConnectionName, + Parameters.subscriptionId + ], + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + requestBody: { + parameterPath: "privateEndpointWrapper", + mapper: { + ...Mappers.PrivateLinkConnectionApprovalRequestResource, + required: true + } + }, + responses: { + 200: { + bodyMapper: Mappers.PrivateEndpointConnectionResource + }, + 202: { + bodyMapper: Mappers.PrivateEndpointConnectionResource + }, + default: { + bodyMapper: Mappers.DefaultErrorResponse + } + }, + serializer +}; + +const beginDeletePrivateEndpointConnectionOperationSpec: msRest.OperationSpec = { + httpMethod: "DELETE", + path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/privateEndpointConnections/{privateEndpointConnectionName}", + urlParameters: [ + Parameters.resourceGroupName, + Parameters.name, + Parameters.privateEndpointConnectionName, + Parameters.subscriptionId + ], + queryParameters: [ + Parameters.apiVersion + ], + headerParameters: [ + Parameters.acceptLanguage + ], + responses: { + 200: { + bodyMapper: { + serializedName: "parsedResponse", + type: { + name: "Object" + } + } + }, + 202: { + bodyMapper: { + serializedName: "parsedResponse", + type: { + name: "Object" + } + } + }, + 204: { + bodyMapper: { + serializedName: "parsedResponse", + type: { + name: "Object" + } + } + }, + default: { + bodyMapper: Mappers.DefaultErrorResponse + } + }, + serializer +}; + const beginRestoreFromBackupBlobSlotOperationSpec: msRest.OperationSpec = { httpMethod: "POST", path: "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/slots/{slot}/restoreFromBackupBlob", diff --git a/sdk/appservice/arm-appservice/src/webSiteManagementClientContext.ts b/sdk/appservice/arm-appservice/src/webSiteManagementClientContext.ts index 937742eb5665..6313700b1278 100644 --- a/sdk/appservice/arm-appservice/src/webSiteManagementClientContext.ts +++ b/sdk/appservice/arm-appservice/src/webSiteManagementClientContext.ts @@ -13,7 +13,7 @@ import * as msRest from "@azure/ms-rest-js"; import * as msRestAzure from "@azure/ms-rest-azure-js"; const packageName = "@azure/arm-appservice"; -const packageVersion = "6.0.0"; +const packageVersion = "6.1.0"; export class WebSiteManagementClientContext extends msRestAzure.AzureServiceClient { credentials: msRest.ServiceClientCredentials; diff --git a/sdk/communication/ci.yml b/sdk/communication/ci.yml new file mode 100644 index 000000000000..07fa45913f7a --- /dev/null +++ b/sdk/communication/ci.yml @@ -0,0 +1,36 @@ +# NOTE: Please refer to https://aka.ms/azsdk/engsys/ci-yaml before editing this file. + +trigger: + branches: + include: + - master + - release/* + - hotfix/* + paths: + include: + - sdk/communication/ + +pr: + branches: + include: + - master + - feature/* + - release/* + - hotfix/* + paths: + include: + - sdk/communication/ + +extends: + template: ../../eng/pipelines/templates/stages/archetype-sdk-client.yml + parameters: + ServiceDirectory: communication + Artifacts: + - name: azure-communication-common + safeName: azurecommunicationcommon + - name: azure-communication-administration + safeName: azurecommunicationadministration + - name: azure-communication-sms + safeName: azurecommunicationsms + - name: azure-communication-chat + safeName: azurecommunicationchat diff --git a/sdk/communication/communication-administration/.gitignore b/sdk/communication/communication-administration/.gitignore new file mode 100644 index 000000000000..5480375639b4 --- /dev/null +++ b/sdk/communication/communication-administration/.gitignore @@ -0,0 +1,2 @@ +/**/code-model-v* +/docGen \ No newline at end of file diff --git a/sdk/communication/communication-administration/.vscode/launch.json b/sdk/communication/communication-administration/.vscode/launch.json new file mode 100644 index 000000000000..0838e97b6317 --- /dev/null +++ b/sdk/communication/communication-administration/.vscode/launch.json @@ -0,0 +1,42 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Debug Mocha Test [Without Rollup]", + "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", + "args": [ + "-r", + "ts-node/register", + "--timeout", + "999999", + "--colors", + "${workspaceFolder}/test/*.spec.ts" + ], + "env": { "TS_NODE_COMPILER_OPTIONS": "{\"module\": \"commonjs\"}" }, + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "protocol": "inspector" + }, + { + "type": "node", + "request": "launch", + "name": "Debug Unit Tests", + "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", + "args": [ + "-u", + "tdd", + "--timeout", + "999999", + "--colors", + "${workspaceFolder}/dist-test/index.node.js" + ], + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": "npm: build:test" + } + ] +} diff --git a/sdk/communication/communication-administration/CHANGELOG.md b/sdk/communication/communication-administration/CHANGELOG.md new file mode 100644 index 000000000000..18044cae1dcb --- /dev/null +++ b/sdk/communication/communication-administration/CHANGELOG.md @@ -0,0 +1,11 @@ +# Release History + +## 1.0.0-beta.3 (Unreleased) + +## 1.0.0-beta.2 (2020-10-06) + +Added support for phone number administration. + +## 1.0.0-beta.1 (2020-09-22) + +The Azure Communication Administration Client library contains code which facilitates user token administration. diff --git a/sdk/communication/communication-administration/LICENSE b/sdk/communication/communication-administration/LICENSE new file mode 100644 index 000000000000..ea8fb1516028 --- /dev/null +++ b/sdk/communication/communication-administration/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 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. diff --git a/sdk/communication/communication-administration/README.md b/sdk/communication/communication-administration/README.md new file mode 100644 index 000000000000..8d2299380d39 --- /dev/null +++ b/sdk/communication/communication-administration/README.md @@ -0,0 +1,254 @@ +# Azure Communication Administration client library for JavaScript + +The administration library is used for managing users and tokens for Azure Communication Services. This library also provides capabilities for phone number administration. + +Acquired phone numbers can come with many capabilities, depending on the country, number type and phone plan. Examples of capabilities are SMS inbound and outbound usage, PSTN inbound and outbound usage. Phone numbers can also be assigned to a bot via a webhook URL. + +## Getting started + +### Prerequisites + +- An [Azure subscription][azure_sub]. +- An existing Communication Services resource. If you need to create the resource, you can use the [Azure Portal][azure_portal] or [Azure CLI][azure_cli]. + +### Installing + +```bash +npm install @azure/communication-administration +``` + +## Key concepts + +### Clients + +The administration package exposes two clients. The `CommunicationIdentityClient` provides methods to manage users and their tokens. The `PhoneNumberAdministrationClient` provides methods to manage phone plans and numbers. + +### Phone plans overview + +Phone plans come in two types; Geographic and Toll-Free. Geographic phone plans are phone plans associated with a location, whose phone numbers' area codes are associated with the area code of a geographic location. Toll-Free phone plans are phone plans not associated location. For example, in the US, toll-free numbers can come with area codes such as 800 or 888. + +All geographic phone plans within the same country are grouped into a phone plan group with a Geographic phone number type. All Toll-Free phone plans within the same country are grouped into a phone plan group. + +### Searching and acquiring numbers + +Phone numbers can be search through the search creation API by providing a phone plan id, an area code and quantity of phone numbers. The provided quantity of phone numbers will be reserved for ten minutes. This search of phone numbers can either be cancelled or purchased. If the search is cancelled, then the phone numbers will become available to others. If the search is purchased, then the phone numbers are acquired for the Azure resources. + +### Configuring and assigning numbers + +Phone numbers can be assigned to a callback URL via the configure number API. As part of the configuration, you will need an acquired phone number, callback URL and application id. + +## Examples + +## Authentication + +You can get a key and/or connection string from your Communication Services resource in [Azure Portal][azure_portal]. Once you have a key, you can authenticate the `CommunicationIdentityClient` and `PhoneNumberAdministrationClient` with any of the following methods: + +### Create `KeyCredential` with `AzureKeyCredential` before initializing the client + +```typescript +import { AzureKeyCredential } from "@azure/core-auth"; +import { CommunicationIdentityClient } from "@azure/communication-administration"; + +const credential = new AzureKeyCredential(KEY); +const client = new CommunicationIdentityClient(HOST, credential); +``` + +### Using a connection string + +```typescript +import { PhoneNumberAdministrationClient } from "@azure/communication-administration"; + +const connectionString = `endpoint=HOST;accessKey=KEY`; +const client = new CommunicationIdentityClient(connectionString); +``` + +If you use a key to initialize the client you will also need to provide the appropriate endpoint. You can get this endpoint from your Communication Services resource in [Azure Portal][azure_portal]. + +## Usage + +### CommunicationIdentityClient + +### Creating an instance of CommunicationIdentityClient + +```typescript +import { CommunicationIdentityClient } from "@azure/communication-administration"; + +const client = new CommunicationIdentityClient(CONNECTION_STRING); +``` + +#### Creating a new user + +Use the `createUser` method to create a new user. + +```typescript +const user = await client.createUser(); +``` + +#### Creating and refreshing a user token + +Use the `issueToken` method to issue or refresh a token for an existing user. The method also takes in a list of communication token scopes. Scope options include: + +- `chat` (Chat) +- `pstn` (Public switched telephone network) +- `voip` (Voice over IP) + +```typescript +let { token } = await client.issueToken(user, ["chat"]); +``` + +To refresh the user token, issue another token with the same user. + +```typescript +{ token } = await client.issueToken(user, ["chat"]); +``` + +#### Revoking tokens for a user + +Use the `revokeTokens` method to revoke all the issued tokens of a user. + +```typescript +await client.revokeTokens(user); +``` + +`revokeTokens` takes an optional second argument, `tokensValidFrom`. If this date is provided, `revokeTokens` will revoke all tokens issued before it. Otherwise, all tokens will be revoked. + +#### Deleting a user + +Use the `deleteUser` method to delete a user. + +```typescript +await client.deleteUser(user); +``` + +### PhoneNumberAdministrationClient + +#### Creating an instance of PhoneNumberAdministrationClient + +```typescript +import { CommunicationIdentityClient } from "@azure/communication-administration"; + +const client = new CommunicationIdentityClient(CONNECTION_STRING); +``` + +#### Getting countries + +Use the `listSupportedCountries` method to get a list of the supported countries. + +```typescript +const countries = await client.listSupportedCountries(); + +for await (const country of countries) { + console.log(`Country code: ${country.countryCode}`); + console.log(`Country name: ${country.localizedName}`); +} +``` + +#### Getting phone plan groups + +Phone plan groups come in two types, Geographic and Toll-Free. Use the `listPhonePlanGroups` method to get them. + +```typescript +const countryCode = "US"; +const phonePlanGroups = await client.listPhonePlanGroups(countryCode); + +for await (const phonePlanGroup of phonePlanGroups) { + console.log(`Phone plan group id: ${phonePlanGroup.phonePlanGroupId}`); +} +``` + +#### Getting location options + +For Geographic phone plans, you can query the available geographic locations. The locations options are structured like the geographic hierarchy of a country. For example, the US has states and within each state are cities. + +Use the `getPhonePlanLocationOptions` method to get the options for a location. + +```typescript +const { locationOptions } = await client.getPhonePlanLocationOptions({ + countryCode: "US", + phonePlanGroupId: "phonePlanGroupId", + phonePlanId: "phonePlanId" +}); + +console.log(`Got location options for: ${locationOptions.labelId}`); +``` + +#### Getting area codes + +Fetching area codes for geographic phone plans will require the the location options queries set. You must include the chain of geographic locations traversing down the location options object returned by the `getPhonePlanLocationOptions`. + +Use the `getAreaCodes` method to get the area codes for geographic phone plans. + +```typescript +const { primaryAreaCodes } = await client.getAreaCodes( + { + locationType: "selection", + countryCode: "US", + phonePlanId: "phonePlanId", + locationOptionsQueries + } +); +``` + +#### Searching for phone numbers + +Use the `createSearch` method to search for phone numbers. This method returns a `searchId` which should be used to query the status of the search. + +```typescript +const { searchId } = await client.createSearch({ + name: "Phone number search 800", + description: "Search for 800 phone numbers" + phonePlanIds: ["phone-plan-id-1"], + areaCode: "800", + quantity: 1 +}); +``` + +To get the results of the search use the `searchId` to call the `getSearch` method. + +```typescript +const phoneNumberSearch = await client.getSearch(searchId); +``` + +#### Purchasing phone numbers from a search + +Use the `purchaseSearch` method to purchase the phone numbers from your search. + +```typescript +await client.purchaseSearch(searchId); +``` + +You also need to call the `getSearch` method to get the results of your purchase. + +#### Cancel a phone number search + +Phone numbers are reserved for 10 minutes when you create a new search. To cancel a search, and make numbers available to other users, call the `cancelSearch` method with the `searchId` of the search. + +```typescript +await client.cancelSearch(searchId); +``` + +Call the `getSearch` method to get the results. + +**Currently, you need to implement your own poller with `getSearch` to know when the search, purchase and cancel operations have reached a terminal status.** + +## Troubleshooting + +## Next steps + +Please take a look at the +[samples](https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/communication/communication-administration/samples) +directory for detailed examples on how to use this library. + +## Contributing + +If you'd like to contribute to this library, please read the [contributing guide](https://github.com/Azure/azure-sdk-for-js/blob/master/CONTRIBUTING.md) to learn more about how to build and test the code. + +## Related projects + +- [Microsoft Azure SDK for Javascript](https://github.com/Azure/azure-sdk-for-js) + +[azure_cli]: https://docs.microsoft.com/cli/azure +[azure_sub]: https://azure.microsoft.com/free/ +[azure_portal]: https://portal.azure.com + +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-js%2Fsdk%2Fcommunication%2Fcommunication-administration%2FREADME.png) diff --git a/sdk/communication/communication-administration/api-extractor.json b/sdk/communication/communication-administration/api-extractor.json new file mode 100644 index 000000000000..641582682b45 --- /dev/null +++ b/sdk/communication/communication-administration/api-extractor.json @@ -0,0 +1,35 @@ +{ + "$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" + }, + "dtsRollup": { + "enabled": true, + "untrimmedFilePath": "", + "publicTrimmedFilePath": "./types/communication-administration.d.ts" + }, + "messages": { + "tsdocMessageReporting": { + "default": { + "logLevel": "none" + } + }, + "extractorMessageReporting": { + "ae-forgotten-export": { + "logLevel": "error", + "addToApiReportFile": false + }, + "ae-missing-release-tag": { + "logLevel": "none" + }, + "ae-unresolved-link": { + "logLevel": "error" + } + } + } +} diff --git a/sdk/communication/communication-administration/karma.conf.js b/sdk/communication/communication-administration/karma.conf.js new file mode 100644 index 000000000000..b9e0eca4d597 --- /dev/null +++ b/sdk/communication/communication-administration/karma.conf.js @@ -0,0 +1,144 @@ +// https://github.com/karma-runner/karma-chrome-launcher +process.env.CHROME_BIN = require("puppeteer").executablePath(); +require("dotenv").config(); +const { + jsonRecordingFilterFunction, + isPlaybackMode, + isSoftRecordMode, + isRecordMode +} = require("@azure/test-utils-recorder"); + +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: ["mocha"], + + plugins: [ + "karma-mocha", + "karma-mocha-reporter", + "karma-chrome-launcher", + "karma-edge-launcher", + "karma-firefox-launcher", + "karma-ie-launcher", + "karma-env-preprocessor", + "karma-coverage", + "karma-remap-istanbul", + "karma-junit-reporter", + "karma-json-to-file-reporter", + "karma-json-preprocessor" + ], + + // list of files / patterns to load in the browser + files: [ + // Uncomment the cdn link below for the polyfill service to support IE11 missing features + // Promise,String.prototype.startsWith,String.prototype.endsWith,String.prototype.repeat,String.prototype.includes,Array.prototype.includes,Object.keys + // "https://cdn.polyfill.io/v2/polyfill.js?features=Symbol,Promise,String.prototype.startsWith,String.prototype.endsWith,String.prototype.repeat,String.prototype.includes,Array.prototype.includes,Object.keys|always", + "dist-test/index.browser.js" + ].concat(isPlaybackMode() || isSoftRecordMode() ? ["recordings/browsers/**/*.json"] : []), + + // 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": ["env"], + "recordings/browsers/**/*.json": ["json"] + // 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 + //"test-browser/index.js": ["coverage"] + }, + + // inject following environment values into browser testing with window.__env__ + // environment values MUST be exported or set with same console running "karma start" + // https://www.npmjs.com/package/karma-env-preprocessor + envPreprocessor: ["TEST_MODE", "COMMUNICATION_CONNECTION_STRING", "INCLUDE_PHONENUMBER_TESTS"], + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ["mocha", "coverage", "karma-remap-istanbul", "junit", "json-to-file"], + + coverageReporter: { + // specify a common output directory + dir: "coverage-browser/", + reporters: [ + { + type: "json", + subdir: ".", + file: "coverage.json" + } + ] + }, + + remapIstanbulReporter: { + src: "coverage-browser/coverage.json", + reports: { + lcovonly: "coverage-browser/lcov.info", + html: "coverage-browser/html/report", + "text-summary": null, + cobertura: "./coverage-browser/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 + }, + + jsonToFileReporter: { + filter: jsonRecordingFilterFunction, + outputPath: "." + }, + + // 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, + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + // 'ChromeHeadless', 'Chrome', 'Firefox', 'Edge', 'IE' + browsers: ["ChromeHeadless"], + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: true, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: 1, + + browserNoActivityTimeout: 600000, + browserDisconnectTimeout: 10000, + browserDisconnectTolerance: 3, + browserConsoleLogOptions: { + terminal: !isRecordMode() + }, + + client: { + mocha: { + // change Karma's debug.html to the mocha web reporter + reporter: "html", + timeout: "600000" + } + } + }); +}; diff --git a/sdk/communication/communication-administration/package.json b/sdk/communication/communication-administration/package.json new file mode 100644 index 000000000000..9c2b23dbe795 --- /dev/null +++ b/sdk/communication/communication-administration/package.json @@ -0,0 +1,120 @@ +{ + "name": "@azure/communication-administration", + "version": "1.0.0-beta.3", + "description": "SDK for Azure Communication service which facilitates user token administration.", + "sdk-type": "client", + "main": "dist/index.js", + "module": "dist-esm/src/index.js", + "types": "types/communication-administration.d.ts", + "scripts": { + "audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit", + "build": "tsc -p . && rollup -c 2>&1 && api-extractor run --local", + "build:autorest": "npm run build:autorest-identity && npm run build:autorest-phone", + "build:autorest-identity": "autorest --typescript --v3 ./swagger/CommunicationIdentity.md && rushx format", + "build:autorest-phone": "autorest --typescript --v3 ./swagger/PhoneNumber.md && rushx format", + "build:clean": "rush update --recheck && rush rebuild && npm run build", + "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 prep && cd dist-samples && tsc -p .", + "build:test": "tsc -p . && rollup -c rollup.test.config.js 2>&1", + "check-format": "prettier --list-different \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", + "clean": "rimraf dist dist-* types *.tgz *.log", + "execute:samples": "npm run build:samples && dev-tool samples run dist-samples/javascript dist-samples/typescript/dist/dist-samples/typescript/src/", + "extract-api": "tsc -p . && api-extractor run --local", + "format": "prettier --write \"recordings/**/*.{js,json}\" \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"", + "generate-doc": "api-documenter markdown -i temp -o docGen", + "integration-test:browser": "karma start --single-run", + "integration-test:node": "nyc mocha -r esm --require source-map-support/register --reporter ../../../common/tools/mocha-multi-reporter.js --full-trace -t 300000 dist-esm/test/*.spec.js dist-esm/test/node/*.spec.js", + "integration-test": "npm run integration-test:node && npm run integration-test:browser", + "lint:fix": "eslint package.json tsconfig.json api-extractor.json src test --ext .ts --fix --fix-type [problem,suggestion]", + "lint": "eslint package.json tsconfig.json api-extractor.json src test --ext .ts -f html -o communication-administration-lintReport.html || exit 0", + "pack": "npm pack 2>&1", + "prebuild": "npm run clean", + "test": "npm run build:test && npm run unit-test && npm run integration-test", + "test:browser": "npm run build:test && npm run unit-test:browser && npm run integration-test:browser", + "test:node": "npm run build:test && npm run unit-test:node && npm run integration-test:node", + "test:watch": "npm run test -- --watch --reporter min", + "unit-test:browser": "karma start --single-run", + "unit-test:node": "mocha --reporter ../../../common/tools/mocha-multi-reporter.js dist-test/index.node.js", + "unit-test": "npm run unit-test:node && npm run unit-test:browser" + }, + "files": [ + "dist/", + "dist-browser/", + "dist-esm/src/", + "types/communication-administration.d.ts", + "README.md", + "LICENSE" + ], + "keywords": [ + "Azure", + "cloud", + "communication" + ], + "author": "Microsoft Corporation", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + }, + "homepage": "https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/communication/communication-administration/", + "sideEffects": false, + "prettier": "@azure/eslint-plugin-azure-sdk/prettier.json", + "dependencies": { + "@azure/communication-common": "1.0.0-beta.3", + "@azure/core-auth": "^1.1.3", + "@azure/core-http": "^1.1.6", + "@azure/core-paging": "^1.1.1", + "@azure/logger": "^1.0.0", + "@azure/core-tracing": "1.0.0-preview.9", + "@opentelemetry/api": "^0.10.2", + "events": "^3.0.0", + "tslib": "^2.0.0" + }, + "devDependencies": { + "@azure/dev-tool": "^1.0.0", + "@azure/eslint-plugin-azure-sdk": "^3.0.0", + "@azure/test-utils-recorder": "^1.0.0", + "@microsoft/api-documenter": "~7.8.17", + "@microsoft/api-extractor": "7.7.11", + "@rollup/plugin-commonjs": "11.0.2", + "@rollup/plugin-json": "^4.0.0", + "@rollup/plugin-multi-entry": "^3.0.0", + "@rollup/plugin-node-resolve": "^8.0.0", + "@rollup/plugin-replace": "^2.2.0", + "@types/chai": "^4.1.6", + "@types/mocha": "^7.0.2", + "@types/sinon": "^9.0.4", + "@types/node": "^8.0.0", + "assert": "^1.4.1", + "chai": "^4.2.0", + "cross-env": "^7.0.2", + "dotenv": "^8.2.0", + "eslint": "^6.1.0", + "inherits": "^2.0.3", + "karma-chrome-launcher": "^3.0.0", + "karma-coverage": "^2.0.0", + "karma-edge-launcher": "^0.4.2", + "karma-env-preprocessor": "^0.1.1", + "karma-firefox-launcher": "^1.1.0", + "karma-ie-launcher": "^1.0.0", + "karma-json-preprocessor": "^0.3.3", + "karma-json-to-file-reporter": "^1.0.1", + "karma-junit-reporter": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", + "karma-mocha": "^2.0.1", + "karma-remap-istanbul": "^0.6.0", + "karma": "^5.1.0", + "mocha-junit-reporter": "^1.18.0", + "mocha": "^7.1.1", + "nyc": "^14.0.0", + "prettier": "^1.16.4", + "rimraf": "^3.0.0", + "rollup-plugin-sourcemaps": "^0.4.2", + "rollup-plugin-terser": "^5.1.1", + "rollup-plugin-visualizer": "^4.0.4", + "rollup-plugin-shim": "^1.0.0", + "rollup": "^1.16.3", + "sinon": "^9.0.2", + "typescript": "~3.9.3" + } +} diff --git a/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_creates_a_user.json b/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_creates_a_user.json new file mode 100644 index 000000000000..f44b55201cf3 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_creates_a_user.json @@ -0,0 +1,22 @@ +{ + "recordings": [ + { + "method": "POST", + "url": "https://endpoint/identities", + "query": { + "api-version": "2020-07-20-preview2" + }, + "requestBody": null, + "status": 200, + "response": "{\"id\":\"sanitized\"}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "27d09bb5f8e19a5b9a886691bbe0c28c" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_deletes_a_user.json b/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_deletes_a_user.json new file mode 100644 index 000000000000..6544834afeac --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_deletes_a_user.json @@ -0,0 +1,20 @@ +{ + "recordings": [ + { + "method": "DELETE", + "url": "https://endpoint/identities/sanitized", + "query": { + "api-version": "2020-07-20-preview2" + }, + "requestBody": null, + "status": 204, + "response": "", + "responseHeaders": {} + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "23307718ae010385eb18d4ce84eb95c9" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_multiple_scopes.json b/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_multiple_scopes.json new file mode 100644 index 000000000000..82e239ccb9a6 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_multiple_scopes.json @@ -0,0 +1,22 @@ +{ + "recordings": [ + { + "method": "POST", + "url": "https://endpoint/identities/sanitized/token", + "query": { + "api-version": "2020-07-20-preview2" + }, + "requestBody": "{\"scopes\":[\"chat\",\"pstn\"]}", + "status": 200, + "response": "{\"id\":\"sanitized\",\"token\":\"sanitized\",\"expiresOn\":\"2020-10-06T11:24:22.2857793+00:00\"}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "4fcce8a4b300bc164dbce1708fc9ef13" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_single_scope.json b/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_single_scope.json new file mode 100644 index 000000000000..2503de4d5e5c --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_single_scope.json @@ -0,0 +1,22 @@ +{ + "recordings": [ + { + "method": "POST", + "url": "https://endpoint/identities/sanitized/token", + "query": { + "api-version": "2020-07-20-preview2" + }, + "requestBody": "{\"scopes\":[\"chat\"]}", + "status": 200, + "response": "{\"id\":\"sanitized\",\"token\":\"sanitized\",\"expiresOn\":\"2020-10-06T11:24:22.2271506+00:00\"}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "778874dd07d653a79561fb2d94cb0b86" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_revokes_tokens_issued_for_a_user.json b/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_revokes_tokens_issued_for_a_user.json new file mode 100644 index 000000000000..7b52bb71a782 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/communicationidentityclient_playbacklive/recording_successfully_revokes_tokens_issued_for_a_user.json @@ -0,0 +1,20 @@ +{ + "recordings": [ + { + "method": "PATCH", + "url": "https://endpoint/identities/sanitized", + "query": { + "api-version": "2020-07-20-preview2" + }, + "requestBody": "{\"tokensValidFrom\":\"2020-10-10T00:00:00.000Z\"}", + "status": 204, + "response": "", + "responseHeaders": {} + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "568db7fa8e03c8fc44cc0f90faaa974f" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_numbers.json b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_numbers.json new file mode 100644 index 000000000000..a2de76a81d4a --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_numbers.json @@ -0,0 +1,25 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://endpoint/administration/phonenumbers/phonenumbers", + "query": { + "locale": "en-US", + "skip": "0", + "take": "100", + "api-version": "2020-07-20-preview1" + }, + "requestBody": null, + "status": 200, + "response": "{\"phoneNumbers\":[],\"nextLink\":null}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "231e1fc55369bbe8715c795b9e9f1ee2" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plan_groups.json b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plan_groups.json new file mode 100644 index 000000000000..0f5fa58b5de2 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plan_groups.json @@ -0,0 +1,26 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://endpoint/administration/phonenumbers/countries/US/phoneplangroups", + "query": { + "locale": "en-US", + "includeRateInformation": "false", + "skip": "0", + "take": "100", + "api-version": "2020-07-20-preview1" + }, + "requestBody": null, + "status": 200, + "response": "{\"phonePlanGroups\":[{\"phonePlanGroupId\":\"sanitized\",\"phoneNumberType\":\"Geographic\",\"localizedName\":\"Azure- User - Geographic\",\"localizedDescription\":\"These are numbers used by Azure resources.\"},{\"phonePlanGroupId\":\"sanitized\",\"phoneNumberType\":\"Geographic\",\"localizedName\":\"Azure - Geographic\",\"localizedDescription\":\"These are numbers used by Azure resources.\"},{\"phonePlanGroupId\":\"sanitized\",\"phoneNumberType\":\"TollFree\",\"localizedName\":\"Azure - Toll Free\",\"localizedDescription\":\"These are toll free numbers used by Azure resources.\"}],\"nextLink\":null}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "a6e19106ef129ebc3647fcb2d7881134" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plans.json b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plans.json new file mode 100644 index 000000000000..983fd3b6c012 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plans.json @@ -0,0 +1,25 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://endpoint/administration/phonenumbers/countries/US/phoneplangroups/sanitized/phoneplans", + "query": { + "locale": "en-US", + "skip": "0", + "take": "100", + "api-version": "2020-07-20-preview1" + }, + "requestBody": null, + "status": 200, + "response": "{\"phonePlans\":[{\"phonePlanId\":\"sanitized\",\"localizedName\":\"Outbound Only PSTN For User - Geographic\",\"locationType\":\"Selection\",\"areaCodes\":[],\"capabilities\":[\"Azure\",\"OutboundCalling\",\"UserAssignment\",\"Geographic\"],\"maximumSearchSize\":20},{\"phonePlanId\":\"sanitized\",\"localizedName\":\"Inbound Only PSTN For User - Geographic\",\"locationType\":\"Selection\",\"areaCodes\":[],\"capabilities\":[\"Azure\",\"InboundCalling\",\"UserAssignment\",\"Geographic\"],\"maximumSearchSize\":20}],\"nextLink\":null}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "4e9d843e0e55da7167af1ff09b2addb6" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_releases.json b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_releases.json new file mode 100644 index 000000000000..ded8e3d361c1 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_releases.json @@ -0,0 +1,24 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://endpoint/administration/phonenumbers/releases", + "query": { + "skip": "0", + "take": "100", + "api-version": "2020-07-20-preview1" + }, + "requestBody": null, + "status": 200, + "response": "{\"entities\":[{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:26:27.8090563+00:00\",\"displayName\":\"\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Failed\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:24:32.6798496+00:00\",\"displayName\":\"\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Failed\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:23:21.6530804+00:00\",\"displayName\":\"\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Failed\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:20:29.7346818+00:00\",\"displayName\":\"\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Failed\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:20:06.562253+00:00\",\"displayName\":\"\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Failed\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:14:24.6662992+00:00\",\"displayName\":\"\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Failed\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:14:17.7449264+00:00\",\"displayName\":\"\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Failed\"}],\"nextLink\":null}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "8ee9733a608b4eacfe34d7e8bb2ac5d1" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_searches.json b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_searches.json new file mode 100644 index 000000000000..cf233a56dc27 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_searches.json @@ -0,0 +1,24 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://endpoint/administration/phonenumbers/searches", + "query": { + "skip": "0", + "take": "100", + "api-version": "2020-07-20-preview1" + }, + "requestBody": null, + "status": 200, + "response": "{\"entities\":[{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:24:19.5300428+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"InProgress\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:19:44.6512373+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:17:42.2339373+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:16:26.840885+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:11:31.1721962+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:10:15.972062+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:09:55.1679502+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:08:42.6595109+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:08:24.1002569+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:06:54.2343273+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-05T11:06:25.2107221+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T23:38:19.9954612+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T23:38:06.7611932+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T23:18:12.9457549+00:00\",\"displayName\":\"LRO Test Search\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:26:18.4021562+00:00\",\"displayName\":\"testsearch20200014\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Expired\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:24:23.4785559+00:00\",\"displayName\":\"testsearch20200014\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Expired\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:23:11.5130462+00:00\",\"displayName\":\"testsearch20200014\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Expired\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:20:23.1161646+00:00\",\"displayName\":\"testsearch20200014\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Expired\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:08:55.5839557+00:00\",\"displayName\":\"testsearch20200014\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Expired\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T22:07:15.616762+00:00\",\"displayName\":\"testsearch20200014\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Expired\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T21:55:20.0749931+00:00\",\"displayName\":\"mysearch20200928\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Cancelled\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T21:52:58.1479456+00:00\",\"displayName\":\"testsearch20200014\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Expired\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T21:39:32.6878583+00:00\",\"displayName\":\"mysearch20200928\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Success\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T21:30:40.8466501+00:00\",\"displayName\":\"mysearch20200928\",\"quantity\":1,\"quantityObtained\":0,\"status\":\"Error\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T20:58:08.7137293+00:00\",\"displayName\":\"testsearch20200014\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Expired\"},{\"id\":\"sanitized\",\"createdAt\":\"2020-10-02T20:58:05.9896404+00:00\",\"displayName\":\"testsearch20200014\",\"quantity\":1,\"quantityObtained\":1,\"status\":\"Expired\"}],\"nextLink\":null}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "c47efafb8af5030fa3eccd566898e895" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_supported_countries.json b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_supported_countries.json new file mode 100644 index 000000000000..83c9f5fae7cb --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_lists_playbacklive/recording_can_list_supported_countries.json @@ -0,0 +1,25 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://endpoint/administration/phonenumbers/countries", + "query": { + "locale": "en-US", + "skip": "0", + "take": "100", + "api-version": "2020-07-20-preview1" + }, + "requestBody": null, + "status": 200, + "response": "{\"countries\":[{\"localizedName\":\"Australia\",\"countryCode\":\"AU\"},{\"localizedName\":\"Japan\",\"countryCode\":\"JP\"},{\"localizedName\":\"United States\",\"countryCode\":\"US\"}],\"nextLink\":null}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "a64778200ecc73a3a09c66c90365e4dd" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_get_area_codes.json b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_get_area_codes.json new file mode 100644 index 000000000000..71a5cade8ecd --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_get_area_codes.json @@ -0,0 +1,24 @@ +{ + "recordings": [ + { + "method": "POST", + "url": "https://endpoint/administration/phonenumbers/countries/US/areacodes", + "query": { + "locationType": "selection", + "phonePlanId": "sanitized", + "api-version": "2020-07-20-preview1" + }, + "requestBody": "{\"locationOptions\":[{\"labelId\":\"state\",\"optionsValue\":\"CA\"},{\"labelId\":\"city\",\"optionsValue\":\"NOAM-US-CA-LA\"}]}", + "status": 200, + "response": "{\"primaryAreaCodes\":[],\"secondaryAreaCodes\":[],\"nextLink\":null}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "3673b002ef2ebea06100d51b1e83fbe6" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_get_location_options.json b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_get_location_options.json new file mode 100644 index 000000000000..1287bb25f4c5 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_get_location_options.json @@ -0,0 +1,23 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://endpoint/administration/phonenumbers/countries/US/phoneplangroups/sanitized/phoneplans/sanitized/locationoptions", + "query": { + "locale": "en-US", + "api-version": "2020-07-20-preview1" + }, + "requestBody": null, + "status": 200, + "response": "{\"locationOptions\":{\"labelId\":\"state\",\"labelName\":\"State\",\"options\":[{\"name\":\"AL\",\"value\":\"AL\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Birmingham\",\"value\":\"NOAM-US-AL-BI\",\"locationOptions\":[]},{\"name\":\"Huntsville\",\"value\":\"NOAM-US-AL-HN\",\"locationOptions\":[]},{\"name\":\"Mobile\",\"value\":\"NOAM-US-AL-MO\",\"locationOptions\":[]},{\"name\":\"Montgomery\",\"value\":\"NOAM-US-AL-MN\",\"locationOptions\":[]}]}]},{\"name\":\"AR\",\"value\":\"AR\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Fort Smith\",\"value\":\"NOAM-US-AR-FS\",\"locationOptions\":[]},{\"name\":\"Jonesboro\",\"value\":\"NOAM-US-AR-JO\",\"locationOptions\":[]},{\"name\":\"Little Rock\",\"value\":\"NOAM-US-AR-LR\",\"locationOptions\":[]}]}]},{\"name\":\"AZ\",\"value\":\"AZ\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Phoenix\",\"value\":\"NOAM-US-AZ-PH\",\"locationOptions\":[]}]}]},{\"name\":\"CA\",\"value\":\"CA\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Burbank\",\"value\":\"NOAM-US-CA-BU\",\"locationOptions\":[]},{\"name\":\"Concord\",\"value\":\"NOAM-US-CA-CO\",\"locationOptions\":[]},{\"name\":\"Irvine\",\"value\":\"NOAM-US-CA-IR\",\"locationOptions\":[]},{\"name\":\"Salinas\",\"value\":\"NOAM-US-CA-SL\",\"locationOptions\":[]},{\"name\":\"San Diego\",\"value\":\"NOAM-US-CA-SD\",\"locationOptions\":[]},{\"name\":\"San Francisco\",\"value\":\"NOAM-US-CA-SF\",\"locationOptions\":[]},{\"name\":\"San Jose\",\"value\":\"NOAM-US-CA-SJ\",\"locationOptions\":[]},{\"name\":\"Santa Barbara\",\"value\":\"NOAM-US-CA-SB\",\"locationOptions\":[]},{\"name\":\"Santa Clarita\",\"value\":\"NOAM-US-CA-SC\",\"locationOptions\":[]},{\"name\":\"Santa Rosa\",\"value\":\"NOAM-US-CA-SR\",\"locationOptions\":[]},{\"name\":\"Stockton\",\"value\":\"NOAM-US-CA-ST\",\"locationOptions\":[]}]}]},{\"name\":\"CL\",\"value\":\"CL\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Washington DC\",\"value\":\"NOAM-US-CL-DC\",\"locationOptions\":[]}]}]},{\"name\":\"CO\",\"value\":\"CO\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Grand Junction\",\"value\":\"NOAM-US-CO-GJ\",\"locationOptions\":[]},{\"name\":\"Pueblo\",\"value\":\"NOAM-US-CO-PU\",\"locationOptions\":[]}]}]},{\"name\":\"CT\",\"value\":\"CT\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Bridgeport\",\"value\":\"NOAM-US-CT-BR\",\"locationOptions\":[]},{\"name\":\"Hartford\",\"value\":\"NOAM-US-CT-HA\",\"locationOptions\":[]}]}]},{\"name\":\"DE\",\"value\":\"DE\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Wilmington\",\"value\":\"NOAM-US-DE-WI\",\"locationOptions\":[]}]}]},{\"name\":\"FL\",\"value\":\"FL\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Cape Coral\",\"value\":\"NOAM-US-FL-CC\",\"locationOptions\":[]},{\"name\":\"Gainesville\",\"value\":\"NOAM-US-FL-GA\",\"locationOptions\":[]},{\"name\":\"Jacksonville\",\"value\":\"NOAM-US-FL-JA\",\"locationOptions\":[]},{\"name\":\"Lakeland\",\"value\":\"NOAM-US-FL-LA\",\"locationOptions\":[]},{\"name\":\"Miami\",\"value\":\"NOAM-US-FL-MI\",\"locationOptions\":[]},{\"name\":\"Orlando\",\"value\":\"NOAM-US-FL-OR\",\"locationOptions\":[]},{\"name\":\"Port St Lucie\",\"value\":\"NOAM-US-FL-PS\",\"locationOptions\":[]},{\"name\":\"Sarasota\",\"value\":\"NOAM-US-FL-SA\",\"locationOptions\":[]},{\"name\":\"St. Petersburg\",\"value\":\"NOAM-US-FL-SP\",\"locationOptions\":[]},{\"name\":\"Tallahassee\",\"value\":\"NOAM-US-FL-TA\",\"locationOptions\":[]},{\"name\":\"West Palm Beach\",\"value\":\"NOAM-US-FL-WP\",\"locationOptions\":[]}]}]},{\"name\":\"GA\",\"value\":\"GA\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Albany\",\"value\":\"NOAM-US-GA-AL\",\"locationOptions\":[]},{\"name\":\"Atlanta\",\"value\":\"NOAM-US-GA-AT\",\"locationOptions\":[]},{\"name\":\"Augusta\",\"value\":\"NOAM-US-GA-AU\",\"locationOptions\":[]},{\"name\":\"Macon\",\"value\":\"NOAM-US-GA-MA\",\"locationOptions\":[]},{\"name\":\"Savannah\",\"value\":\"NOAM-US-GA-SA\",\"locationOptions\":[]}]}]},{\"name\":\"HI\",\"value\":\"HI\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Honolulu\",\"value\":\"NOAM-US-HI-HO\",\"locationOptions\":[]}]}]},{\"name\":\"IA\",\"value\":\"IA\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Cedar Rapids\",\"value\":\"NOAM-US-IA-CR\",\"locationOptions\":[]},{\"name\":\"Davenport\",\"value\":\"NOAM-US-IA-DA\",\"locationOptions\":[]},{\"name\":\"Mason City\",\"value\":\"NOAM-US-IA-MC\",\"locationOptions\":[]},{\"name\":\"Sioux City\",\"value\":\"NOAM-US-IA-SC\",\"locationOptions\":[]}]}]},{\"name\":\"ID\",\"value\":\"ID\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Boise\",\"value\":\"NOAM-US-ID-BO\",\"locationOptions\":[]}]}]},{\"name\":\"IL\",\"value\":\"IL\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Alton\",\"value\":\"NOAM-US-IL-AL\",\"locationOptions\":[]},{\"name\":\"Aurora\",\"value\":\"NOAM-US-IL-AU\",\"locationOptions\":[]},{\"name\":\"Big Rock\",\"value\":\"NOAM-US-IL-BK\",\"locationOptions\":[]},{\"name\":\"Champaign\",\"value\":\"NOAM-US-IL-CA\",\"locationOptions\":[]},{\"name\":\"Chicago\",\"value\":\"NOAM-US-IL-CH\",\"locationOptions\":[]},{\"name\":\"Rock Island\",\"value\":\"NOAM-US-IL-RI\",\"locationOptions\":[]},{\"name\":\"Rockford\",\"value\":\"NOAM-US-IL-RO\",\"locationOptions\":[]},{\"name\":\"Waukegan\",\"value\":\"NOAM-US-IL-WK\",\"locationOptions\":[]}]}]},{\"name\":\"IN\",\"value\":\"IN\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Evansville\",\"value\":\"NOAM-US-IN-EV\",\"locationOptions\":[]},{\"name\":\"Fort Wayne\",\"value\":\"NOAM-US-IN-FW\",\"locationOptions\":[]},{\"name\":\"Gary\",\"value\":\"NOAM-US-IN-GA\",\"locationOptions\":[]},{\"name\":\"Indianapolis\",\"value\":\"NOAM-US-IN-IN\",\"locationOptions\":[]},{\"name\":\"South Bend\",\"value\":\"NOAM-US-IN-SB\",\"locationOptions\":[]}]}]},{\"name\":\"KS\",\"value\":\"KS\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Kansas City\",\"value\":\"NOAM-US-KS-KS\",\"locationOptions\":[]},{\"name\":\"Topeka\",\"value\":\"NOAM-US-KS-TO\",\"locationOptions\":[]},{\"name\":\"Wichita\",\"value\":\"NOAM-US-KS-WI\",\"locationOptions\":[]}]}]},{\"name\":\"KY\",\"value\":\"KY\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Ashland\",\"value\":\"NOAM-US-KY-AS\",\"locationOptions\":[]},{\"name\":\"Lexington\",\"value\":\"NOAM-US-KY-LE\",\"locationOptions\":[]},{\"name\":\"Louisville\",\"value\":\"NOAM-US-KY-LO\",\"locationOptions\":[]},{\"name\":\"Owensboro\",\"value\":\"NOAM-US-KY-OW\",\"locationOptions\":[]}]}]},{\"name\":\"LA\",\"value\":\"LA\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Baton Rouge\",\"value\":\"NOAM-US-LA-BR\",\"locationOptions\":[]},{\"name\":\"Lafayette\",\"value\":\"NOAM-US-LA-LA\",\"locationOptions\":[]},{\"name\":\"New Orleans\",\"value\":\"NOAM-US-LA-NO\",\"locationOptions\":[]},{\"name\":\"Shreveport\",\"value\":\"NOAM-US-LA-SH\",\"locationOptions\":[]}]}]},{\"name\":\"MA\",\"value\":\"MA\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Boston\",\"value\":\"NOAM-US-MA-BO\",\"locationOptions\":[]},{\"name\":\"Lowell\",\"value\":\"NOAM-US-MA-LO\",\"locationOptions\":[]},{\"name\":\"Lynn\",\"value\":\"NOAM-US-MA-LY\",\"locationOptions\":[]}]}]},{\"name\":\"MD\",\"value\":\"MD\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Bethesda\",\"value\":\"NOAM-US-MD-BE\",\"locationOptions\":[]}]}]},{\"name\":\"ME\",\"value\":\"ME\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Portland\",\"value\":\"NOAM-US-ME-PO\",\"locationOptions\":[]}]}]},{\"name\":\"MI\",\"value\":\"MI\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Ann Arbor\",\"value\":\"NOAM-US-MI-AA\",\"locationOptions\":[]},{\"name\":\"Detroit\",\"value\":\"NOAM-US-MI-DE\",\"locationOptions\":[]},{\"name\":\"Flint\",\"value\":\"NOAM-US-MI-FL\",\"locationOptions\":[]},{\"name\":\"Grand Rapids\",\"value\":\"NOAM-US-MI-GP\",\"locationOptions\":[]},{\"name\":\"Grant\",\"value\":\"NOAM-US-MI-GR\",\"locationOptions\":[]},{\"name\":\"Lansing\",\"value\":\"NOAM-US-MI-LA\",\"locationOptions\":[]},{\"name\":\"Otsego\",\"value\":\"NOAM-US-MI-OT\",\"locationOptions\":[]},{\"name\":\"Saginaw\",\"value\":\"NOAM-US-MI-SA\",\"locationOptions\":[]},{\"name\":\"Sault Ste Marie\",\"value\":\"NOAM-US-MI-SS\",\"locationOptions\":[]},{\"name\":\"Troy\",\"value\":\"NOAM-US-MI-TR\",\"locationOptions\":[]},{\"name\":\"Warren\",\"value\":\"NOAM-US-MI-WA\",\"locationOptions\":[]}]}]},{\"name\":\"MN\",\"value\":\"MN\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Alexandria\",\"value\":\"NOAM-US-MN-AL\",\"locationOptions\":[]},{\"name\":\"Bloomington\",\"value\":\"NOAM-US-MN-BL\",\"locationOptions\":[]},{\"name\":\"Duluth\",\"value\":\"NOAM-US-MN-DU\",\"locationOptions\":[]}]}]},{\"name\":\"MO\",\"value\":\"MO\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Columbia\",\"value\":\"NOAM-US-MO-CO\",\"locationOptions\":[]},{\"name\":\"Kansas City\",\"value\":\"NOAM-US-MO-KS\",\"locationOptions\":[]},{\"name\":\"Marshall\",\"value\":\"NOAM-US-MO-MA\",\"locationOptions\":[]},{\"name\":\"Springfield\",\"value\":\"NOAM-US-MO-SP\",\"locationOptions\":[]},{\"name\":\"St. Charles\",\"value\":\"NOAM-US-MO-SC\",\"locationOptions\":[]},{\"name\":\"St. Louis\",\"value\":\"NOAM-US-MO-SL\",\"locationOptions\":[]}]}]},{\"name\":\"MS\",\"value\":\"MS\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Biloxi\",\"value\":\"NOAM-US-MS-BI\",\"locationOptions\":[]},{\"name\":\"Jackson\",\"value\":\"NOAM-US-MS-JA\",\"locationOptions\":[]},{\"name\":\"Starkville\",\"value\":\"NOAM-US-MS-ST\",\"locationOptions\":[]}]}]},{\"name\":\"MT\",\"value\":\"MT\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Billings\",\"value\":\"NOAM-US-MT-BI\",\"locationOptions\":[]}]}]},{\"name\":\"NC\",\"value\":\"NC\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Charlotte\",\"value\":\"NOAM-US-NC-CH\",\"locationOptions\":[]},{\"name\":\"Fayetteville\",\"value\":\"NOAM-US-NC-FA\",\"locationOptions\":[]},{\"name\":\"Greensboro\",\"value\":\"NOAM-US-NC-GR\",\"locationOptions\":[]},{\"name\":\"Raleigh\",\"value\":\"NOAM-US-NC-RA\",\"locationOptions\":[]},{\"name\":\"Rocky Mount\",\"value\":\"NOAM-US-NC-RM\",\"locationOptions\":[]}]}]},{\"name\":\"ND\",\"value\":\"ND\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Fargo\",\"value\":\"NOAM-US-ND-FA\",\"locationOptions\":[]}]}]},{\"name\":\"NE\",\"value\":\"NE\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Kearney\",\"value\":\"NOAM-US-NE-KE\",\"locationOptions\":[]},{\"name\":\"Omaha\",\"value\":\"NOAM-US-NE-OM\",\"locationOptions\":[]}]}]},{\"name\":\"NJ\",\"value\":\"NJ\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Atlantic City\",\"value\":\"NOAM-US-NJ-AC\",\"locationOptions\":[]},{\"name\":\"Camden\",\"value\":\"NOAM-US-NJ-CA\",\"locationOptions\":[]},{\"name\":\"Edison\",\"value\":\"NOAM-US-NJ-ED\",\"locationOptions\":[]},{\"name\":\"Elizabeth\",\"value\":\"NOAM-US-NJ-EL\",\"locationOptions\":[]},{\"name\":\"Newark\",\"value\":\"NOAM-US-NJ-NE\",\"locationOptions\":[]}]}]},{\"name\":\"NM\",\"value\":\"NM\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Albuquerque\",\"value\":\"NOAM-US-NM-AL\",\"locationOptions\":[]},{\"name\":\"Las Cruces\",\"value\":\"NOAM-US-NM-LC\",\"locationOptions\":[]}]}]},{\"name\":\"NV\",\"value\":\"NV\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Las Vegas\",\"value\":\"NOAM-US-NV-LV\",\"locationOptions\":[]},{\"name\":\"Reno\",\"value\":\"NOAM-US-NV-RE\",\"locationOptions\":[]}]}]},{\"name\":\"NY\",\"value\":\"NY\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Albany\",\"value\":\"NOAM-US-NY-AL\",\"locationOptions\":[]},{\"name\":\"Brentwood\",\"value\":\"NOAM-US-NY-BR\",\"locationOptions\":[]},{\"name\":\"Elmira\",\"value\":\"NOAM-US-NY-EL\",\"locationOptions\":[]},{\"name\":\"Hempstead\",\"value\":\"NOAM-US-NY-HE\",\"locationOptions\":[]},{\"name\":\"Kingston\",\"value\":\"NOAM-US-NY-KI\",\"locationOptions\":[]},{\"name\":\"New York City\",\"value\":\"NOAM-US-NY-NY\",\"locationOptions\":[]},{\"name\":\"Niagara Falls\",\"value\":\"NOAM-US-NY-NF\",\"locationOptions\":[]},{\"name\":\"Rochester\",\"value\":\"NOAM-US-NY-RO\",\"locationOptions\":[]},{\"name\":\"Yonkers\",\"value\":\"NOAM-US-NY-YO\",\"locationOptions\":[]}]}]},{\"name\":\"OH\",\"value\":\"OH\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Akron\",\"value\":\"NOAM-US-OH-AK\",\"locationOptions\":[]},{\"name\":\"Cincinnati\",\"value\":\"NOAM-US-OH-CI\",\"locationOptions\":[]},{\"name\":\"Cleveland\",\"value\":\"NOAM-US-OH-CL\",\"locationOptions\":[]},{\"name\":\"Columbus\",\"value\":\"NOAM-US-OH-CO\",\"locationOptions\":[]},{\"name\":\"Dayton\",\"value\":\"NOAM-US-OH-DA\",\"locationOptions\":[]},{\"name\":\"Toledo\",\"value\":\"NOAM-US-OH-TO\",\"locationOptions\":[]}]}]},{\"name\":\"OK\",\"value\":\"OK\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Lawton\",\"value\":\"NOAM-US-OK-LA\",\"locationOptions\":[]},{\"name\":\"Oklahoma City\",\"value\":\"NOAM-US-OK-OC\",\"locationOptions\":[]},{\"name\":\"Tulsa\",\"value\":\"NOAM-US-OK-TU\",\"locationOptions\":[]}]}]},{\"name\":\"PA\",\"value\":\"PA\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Erie\",\"value\":\"NOAM-US-PA-ER\",\"locationOptions\":[]},{\"name\":\"Lancaster\",\"value\":\"NOAM-US-PA-LA\",\"locationOptions\":[]},{\"name\":\"Philadelphia\",\"value\":\"NOAM-US-PA-PI\",\"locationOptions\":[]},{\"name\":\"Pittsburgh\",\"value\":\"NOAM-US-PA-PT\",\"locationOptions\":[]},{\"name\":\"Scranton\",\"value\":\"NOAM-US-PA-SC\",\"locationOptions\":[]}]}]},{\"name\":\"RI\",\"value\":\"RI\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Providence\",\"value\":\"NOAM-US-RI-PR\",\"locationOptions\":[]}]}]},{\"name\":\"SC\",\"value\":\"SC\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Charleston\",\"value\":\"NOAM-US-SC-CH\",\"locationOptions\":[]},{\"name\":\"Columbia\",\"value\":\"NOAM-US-SC-CO\",\"locationOptions\":[]},{\"name\":\"Greenville\",\"value\":\"NOAM-US-SC-GR\",\"locationOptions\":[]}]}]},{\"name\":\"SD\",\"value\":\"SD\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Sioux Falls\",\"value\":\"NOAM-US-SD-SF\",\"locationOptions\":[]}]}]},{\"name\":\"TN\",\"value\":\"TN\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Chattanooga\",\"value\":\"NOAM-US-TN-CH\",\"locationOptions\":[]},{\"name\":\"Clarksville\",\"value\":\"NOAM-US-TN-CL\",\"locationOptions\":[]},{\"name\":\"Jackson\",\"value\":\"NOAM-US-TN-JA\",\"locationOptions\":[]},{\"name\":\"Knoxville\",\"value\":\"NOAM-US-TN-KN\",\"locationOptions\":[]},{\"name\":\"Memphis\",\"value\":\"NOAM-US-TN-ME\",\"locationOptions\":[]},{\"name\":\"Nashville\",\"value\":\"NOAM-US-TN-NA\",\"locationOptions\":[]}]}]},{\"name\":\"TX\",\"value\":\"TX\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Abilene\",\"value\":\"NOAM-US-TX-AB\",\"locationOptions\":[]},{\"name\":\"Austin\",\"value\":\"NOAM-US-TX-AU\",\"locationOptions\":[]},{\"name\":\"Bryan\",\"value\":\"NOAM-US-TX-BR\",\"locationOptions\":[]},{\"name\":\"Corpus Christi\",\"value\":\"NOAM-US-TX-CC\",\"locationOptions\":[]},{\"name\":\"Dallas\",\"value\":\"NOAM-US-TX-DA\",\"locationOptions\":[]},{\"name\":\"Denton\",\"value\":\"NOAM-US-TX-DE\",\"locationOptions\":[]},{\"name\":\"El Paso\",\"value\":\"NOAM-US-TX-EP\",\"locationOptions\":[]},{\"name\":\"Fort Worth\",\"value\":\"NOAM-US-TX-FW\",\"locationOptions\":[]},{\"name\":\"Galveston\",\"value\":\"NOAM-US-TX-GA\",\"locationOptions\":[]},{\"name\":\"Hamilton\",\"value\":\"NOAM-US-TX-HA\",\"locationOptions\":[]},{\"name\":\"Houston\",\"value\":\"NOAM-US-TX-HO\",\"locationOptions\":[]},{\"name\":\"Huntsville\",\"value\":\"NOAM-US-TX-HU\",\"locationOptions\":[]},{\"name\":\"Laredo\",\"value\":\"NOAM-US-TX-LA\",\"locationOptions\":[]},{\"name\":\"Lubbock\",\"value\":\"NOAM-US-TX-LU\",\"locationOptions\":[]},{\"name\":\"Odessa\",\"value\":\"NOAM-US-TX-OD\",\"locationOptions\":[]},{\"name\":\"San Antonio\",\"value\":\"NOAM-US-TX-SA\",\"locationOptions\":[]},{\"name\":\"Tyler\",\"value\":\"NOAM-US-TX-TY\",\"locationOptions\":[]}]}]},{\"name\":\"UT\",\"value\":\"UT\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Salt Lake City\",\"value\":\"NOAM-US-UT-SL\",\"locationOptions\":[]},{\"name\":\"St. George\",\"value\":\"NOAM-US-UT-SG\",\"locationOptions\":[]}]}]},{\"name\":\"VA\",\"value\":\"VA\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Arlington\",\"value\":\"NOAM-US-VA-AR\",\"locationOptions\":[]},{\"name\":\"Lynchburg\",\"value\":\"NOAM-US-VA-LY\",\"locationOptions\":[]},{\"name\":\"Richmond\",\"value\":\"NOAM-US-VA-RI\",\"locationOptions\":[]},{\"name\":\"Roanoke\",\"value\":\"NOAM-US-VA-RO\",\"locationOptions\":[]},{\"name\":\"Virginia Beach\",\"value\":\"NOAM-US-VA-VB\",\"locationOptions\":[]}]}]},{\"name\":\"VT\",\"value\":\"VT\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Brattleboro\",\"value\":\"NOAM-US-VT-BR\",\"locationOptions\":[]},{\"name\":\"Burlington\",\"value\":\"NOAM-US-VT-BU\",\"locationOptions\":[]},{\"name\":\"Newport\",\"value\":\"NOAM-US-VT-NE\",\"locationOptions\":[]}]}]},{\"name\":\"WI\",\"value\":\"WI\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Eau Claire\",\"value\":\"NOAM-US-WI-EC\",\"locationOptions\":[]},{\"name\":\"Green Bay\",\"value\":\"NOAM-US-WI-GB\",\"locationOptions\":[]},{\"name\":\"Kenosha\",\"value\":\"NOAM-US-WI-KE\",\"locationOptions\":[]},{\"name\":\"Madison\",\"value\":\"NOAM-US-WI-MA\",\"locationOptions\":[]},{\"name\":\"Milwaukee\",\"value\":\"NOAM-US-WI-MI\",\"locationOptions\":[]}]}]},{\"name\":\"WV\",\"value\":\"WV\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Charleston\",\"value\":\"NOAM-US-WV-CH\",\"locationOptions\":[]}]}]},{\"name\":\"WY\",\"value\":\"WY\",\"locationOptions\":[{\"labelId\":\"city\",\"labelName\":\"City\",\"options\":[{\"name\":\"Laramie\",\"value\":\"NOAM-US-WY-LA\",\"locationOptions\":[]}]}]}]}}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "ff376714d4935165339035b118c09fbe" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_get_phoneplangroupid_and_phoneplanid_for_other_tests.json b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_get_phoneplangroupid_and_phoneplanid_for_other_tests.json new file mode 100644 index 000000000000..9c7f69de5981 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_get_phoneplangroupid_and_phoneplanid_for_other_tests.json @@ -0,0 +1,42 @@ +{ + "recordings": [ + { + "method": "GET", + "url": "https://endpoint/administration/phonenumbers/countries/US/phoneplangroups", + "query": { + "locale": "en-US", + "includeRateInformation": "false", + "skip": "0", + "take": "100", + "api-version": "2020-07-20-preview1" + }, + "requestBody": null, + "status": 200, + "response": "{\"phonePlanGroups\":[{\"phonePlanGroupId\":\"sanitized\",\"phoneNumberType\":\"Geographic\",\"localizedName\":\"Azure- User - Geographic\",\"localizedDescription\":\"These are numbers used by Azure resources.\"},{\"phonePlanGroupId\":\"sanitized\",\"phoneNumberType\":\"Geographic\",\"localizedName\":\"Azure - Geographic\",\"localizedDescription\":\"These are numbers used by Azure resources.\"},{\"phonePlanGroupId\":\"sanitized\",\"phoneNumberType\":\"TollFree\",\"localizedName\":\"Azure - Toll Free\",\"localizedDescription\":\"These are toll free numbers used by Azure resources.\"}],\"nextLink\":null}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + }, + { + "method": "GET", + "url": "https://endpoint/administration/phonenumbers/countries/US/phoneplangroups/sanitized/phoneplans", + "query": { + "locale": "en-US", + "skip": "0", + "take": "100", + "api-version": "2020-07-20-preview1" + }, + "requestBody": null, + "status": 200, + "response": "{\"phonePlans\":[{\"phonePlanId\":\"sanitized\",\"localizedName\":\"Outbound Only PSTN For User - Geographic\",\"locationType\":\"Selection\",\"areaCodes\":[],\"capabilities\":[\"Azure\",\"OutboundCalling\",\"UserAssignment\",\"Geographic\"],\"maximumSearchSize\":20},{\"phonePlanId\":\"sanitized\",\"localizedName\":\"Inbound Only PSTN For User - Geographic\",\"locationType\":\"Selection\",\"areaCodes\":[],\"capabilities\":[\"Azure\",\"InboundCalling\",\"UserAssignment\",\"Geographic\"],\"maximumSearchSize\":20}],\"nextLink\":null}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "6b833b3df860aa09fa8c96312c3a9c9c" +} diff --git a/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_start_a_phone_number_search.json b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_start_a_phone_number_search.json new file mode 100644 index 000000000000..737479fa2129 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/browsers/phonenumberadministrationclient_playbacklive/recording_can_start_a_phone_number_search.json @@ -0,0 +1,22 @@ +{ + "recordings": [ + { + "method": "POST", + "url": "https://endpoint/administration/phonenumbers/searches", + "query": { + "api-version": "2020-07-20-preview1" + }, + "requestBody": "{\"displayName\":\"LRO Test Search\",\"description\":\"Test search for JS phone number admin SDK.\",\"phonePlanIds\":[\"sanitized\"],\"areaCode\":\"800\",\"quantity\":1}", + "status": 201, + "response": "{\"searchId\":\"sanitized\"}", + "responseHeaders": { + "content-type": "application/json; charset=utf-8" + } + } + ], + "uniqueTestInfo": { + "uniqueName": {}, + "newDate": {} + }, + "hash": "f2be4e05756bff8eba76fbf17c7fc502" +} diff --git a/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_creates_a_user.js b/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_creates_a_user.js new file mode 100644 index 000000000000..0e3f3de99755 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_creates_a_user.js @@ -0,0 +1,29 @@ +let nock = require("nock"); + +module.exports.hash = "71dd63e8f90b2c2eb44bc15618466368"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .post("/identities") + .query(true) + .reply(200, { id: "sanitized" }, [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "tNqMEzQsqEa1rF+a1tiTkg.0", + "Strict-Transport-Security", + "max-age=2592000", + "x-ms-client-request-id", + "sanitized", + "api-supported-versions", + "2020-07-20-preview1, 2020-07-20-preview2", + "X-Processing-Time", + "16ms", + "X-Azure-Ref", + "0WQJ7XwAAAACSylTsTUvWSq9zw6WB7cIFWVZSMzBFREdFMDQyMQA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:09 GMT" + ]); diff --git a/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_deletes_a_user.js b/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_deletes_a_user.js new file mode 100644 index 000000000000..afe6c716c12a --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_deletes_a_user.js @@ -0,0 +1,25 @@ +let nock = require("nock"); + +module.exports.hash = "c32f7ebc5af64d902e3e080cc228e00f"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .delete("/identities/sanitized") + .query(true) + .reply(204, "", [ + "MS-CV", + "QW2qEVRR70iQpmShaJ6m2A.0", + "Strict-Transport-Security", + "max-age=2592000", + "x-ms-client-request-id", + "sanitized", + "api-supported-versions", + "2020-07-20-preview1, 2020-07-20-preview2", + "X-Processing-Time", + "1317ms", + "X-Azure-Ref", + "0WgJ7XwAAAAAAV4cmlMkVQa+0xmAcW1DDWVZSMzBFREdFMDQxOQA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:11 GMT" + ]); diff --git a/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_multiple_scopes.js b/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_multiple_scopes.js new file mode 100644 index 000000000000..3361be59145a --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_multiple_scopes.js @@ -0,0 +1,33 @@ +let nock = require("nock"); + +module.exports.hash = "f30fde667c7b7a14ab32826e4d83a221"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .post("/identities/sanitized/token", { scopes: ["chat", "pstn"] }) + .query(true) + .reply( + 200, + { id: "sanitized", token: "sanitized", expiresOn: "2020-10-06T11:24:09.0551068+00:00" }, + [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "7s8M3COwTEecqn0oiJEfRQ.0", + "Strict-Transport-Security", + "max-age=2592000", + "x-ms-client-request-id", + "sanitized", + "api-supported-versions", + "2020-07-20-preview1, 2020-07-20-preview2", + "X-Processing-Time", + "27ms", + "X-Azure-Ref", + "0WQJ7XwAAAAAppZPbQL18TIb18yefacV6WVZSMzBFREdFMDQxNwA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:09 GMT" + ] + ); diff --git a/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_single_scope.js b/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_single_scope.js new file mode 100644 index 000000000000..416f7c785912 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_issues_a_token_for_a_user_single_scope.js @@ -0,0 +1,33 @@ +let nock = require("nock"); + +module.exports.hash = "1c880cc35f2f3b240445a35a012e7bab"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .post("/identities/sanitized/token", { scopes: ["chat"] }) + .query(true) + .reply( + 200, + { id: "sanitized", token: "sanitized", expiresOn: "2020-10-06T11:24:08.9389962+00:00" }, + [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "/roQfp84i0KcvGGMdn+pLw.0", + "Strict-Transport-Security", + "max-age=2592000", + "x-ms-client-request-id", + "sanitized", + "api-supported-versions", + "2020-07-20-preview1, 2020-07-20-preview2", + "X-Processing-Time", + "30ms", + "X-Azure-Ref", + "0WQJ7XwAAAAB5UyEqtKEpRY4HQnMmDarNWVZSMzBFREdFMDQxNAA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:09 GMT" + ] + ); diff --git a/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_revokes_tokens_issued_for_a_user.js b/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_revokes_tokens_issued_for_a_user.js new file mode 100644 index 000000000000..eca8d70a0896 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/communicationidentityclient_playbacklive/recording_successfully_revokes_tokens_issued_for_a_user.js @@ -0,0 +1,25 @@ +let nock = require("nock"); + +module.exports.hash = "e10098ac22e2857510889e9c31a45559"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .patch("/identities/sanitized", { tokensValidFrom: "2020-10-10T00:00:00.000Z" }) + .query(true) + .reply(204, "", [ + "MS-CV", + "kPxTJwPVEEKxAca5PaSm1g.0", + "Strict-Transport-Security", + "max-age=2592000", + "x-ms-client-request-id", + "sanitized", + "api-supported-versions", + "2020-07-20-preview1, 2020-07-20-preview2", + "X-Processing-Time", + "711ms", + "X-Azure-Ref", + "0WgJ7XwAAAABJojMofhVrQJCXD9EMEzVEWVZSMzBFREdFMDMxMwA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:10 GMT" + ]); diff --git a/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_numbers.js b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_numbers.js new file mode 100644 index 000000000000..349fadd795ab --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_numbers.js @@ -0,0 +1,23 @@ +let nock = require("nock"); + +module.exports.hash = "0dde52a1c1f5e4fdd7568981ca731f49"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .get("/administration/phonenumbers/phonenumbers") + .query(true) + .reply(200, { phoneNumbers: [], nextLink: null }, [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "NEdoQgLFDkiMDwN1tqZ1ag.0", + "X-Processing-Time", + "1142ms", + "X-Azure-Ref", + "0XAJ7XwAAAAD7io0/pxeDTrgSMvKicOmVWVZSMzBFREdFMDQxNQA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:12 GMT" + ]); diff --git a/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plan_groups.js b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plan_groups.js new file mode 100644 index 000000000000..7d6daa94078a --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plan_groups.js @@ -0,0 +1,49 @@ +let nock = require("nock"); + +module.exports.hash = "e96a3b7844be3e24fcea1b314a74af26"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .get("/administration/phonenumbers/countries/US/phoneplangroups") + .query(true) + .reply( + 200, + { + phonePlanGroups: [ + { + phonePlanGroupId: "sanitized", + phoneNumberType: "Geographic", + localizedName: "Azure- User - Geographic", + localizedDescription: "These are numbers used by Azure resources." + }, + { + phonePlanGroupId: "sanitized", + phoneNumberType: "Geographic", + localizedName: "Azure - Geographic", + localizedDescription: "These are numbers used by Azure resources." + }, + { + phonePlanGroupId: "sanitized", + phoneNumberType: "TollFree", + localizedName: "Azure - Toll Free", + localizedDescription: "These are toll free numbers used by Azure resources." + } + ], + nextLink: null + }, + [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "b/JqQzpvV0WHoBBD3kx44A.0", + "X-Processing-Time", + "774ms", + "X-Azure-Ref", + "0XgJ7XwAAAAC6BT1pHHoCRIKcxgtl/O8UWVZSMzBFREdFMDQwNgA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:15 GMT" + ] + ); diff --git a/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plans.js b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plans.js new file mode 100644 index 000000000000..95d049314e12 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_phone_plans.js @@ -0,0 +1,47 @@ +let nock = require("nock"); + +module.exports.hash = "3cdc938169a6df415554f9d5e6aef39b"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .get("/administration/phonenumbers/countries/US/phoneplangroups/sanitized/phoneplans") + .query(true) + .reply( + 200, + { + phonePlans: [ + { + phonePlanId: "sanitized", + localizedName: "Outbound Only PSTN For User - Geographic", + locationType: "Selection", + areaCodes: [], + capabilities: ["Azure", "OutboundCalling", "UserAssignment", "Geographic"], + maximumSearchSize: 20 + }, + { + phonePlanId: "sanitized", + localizedName: "Inbound Only PSTN For User - Geographic", + locationType: "Selection", + areaCodes: [], + capabilities: ["Azure", "InboundCalling", "UserAssignment", "Geographic"], + maximumSearchSize: 20 + } + ], + nextLink: null + }, + [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "dBoCEDukuEOYgrlJiZt+hQ.0", + "X-Processing-Time", + "591ms", + "X-Azure-Ref", + "0XwJ7XwAAAACmAAAStS0+RL34KH7QHdEyWVZSMzBFREdFMDQwOQA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:15 GMT" + ] + ); diff --git a/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_releases.js b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_releases.js new file mode 100644 index 000000000000..0a5ec13cfda6 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_releases.js @@ -0,0 +1,87 @@ +let nock = require("nock"); + +module.exports.hash = "29a008ab06588dc49ccef34434f34962"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .get("/administration/phonenumbers/releases") + .query(true) + .reply( + 200, + { + entities: [ + { + id: "sanitized", + createdAt: "2020-10-02T22:26:27.8090563+00:00", + displayName: "", + quantity: 1, + quantityObtained: 1, + status: "Failed" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:24:32.6798496+00:00", + displayName: "", + quantity: 1, + quantityObtained: 1, + status: "Failed" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:23:21.6530804+00:00", + displayName: "", + quantity: 1, + quantityObtained: 1, + status: "Failed" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:20:29.7346818+00:00", + displayName: "", + quantity: 1, + quantityObtained: 1, + status: "Failed" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:20:06.562253+00:00", + displayName: "", + quantity: 1, + quantityObtained: 1, + status: "Failed" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:14:24.6662992+00:00", + displayName: "", + quantity: 1, + quantityObtained: 1, + status: "Failed" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:14:17.7449264+00:00", + displayName: "", + quantity: 1, + quantityObtained: 1, + status: "Failed" + } + ], + nextLink: null + }, + [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "42rP8QoU3kyub480QPsRYg.0", + "X-Processing-Time", + "261ms", + "X-Azure-Ref", + "0YAJ7XwAAAABlVlhkgT8tR6sjasSHsotCWVZSMzBFREdFMDMwNgA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:15 GMT" + ] + ); diff --git a/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_searches.js b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_searches.js new file mode 100644 index 000000000000..218374c4ad26 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_searches.js @@ -0,0 +1,231 @@ +let nock = require("nock"); + +module.exports.hash = "beed9b0365f6e3637112bab5192991e5"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .get("/administration/phonenumbers/searches") + .query(true) + .reply( + 200, + { + entities: [ + { + id: "sanitized", + createdAt: "2020-10-05T11:19:44.6512373+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-05T11:17:42.2339373+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-05T11:16:26.840885+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-05T11:11:31.1721962+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-05T11:10:15.972062+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-05T11:09:55.1679502+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-05T11:08:42.6595109+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-05T11:08:24.1002569+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-05T11:06:54.2343273+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-05T11:06:25.2107221+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-02T23:38:19.9954612+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-02T23:38:06.7611932+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-02T23:18:12.9457549+00:00", + displayName: "LRO Test Search", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:26:18.4021562+00:00", + displayName: "testsearch20200014", + quantity: 1, + quantityObtained: 1, + status: "Expired" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:24:23.4785559+00:00", + displayName: "testsearch20200014", + quantity: 1, + quantityObtained: 1, + status: "Expired" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:23:11.5130462+00:00", + displayName: "testsearch20200014", + quantity: 1, + quantityObtained: 1, + status: "Expired" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:20:23.1161646+00:00", + displayName: "testsearch20200014", + quantity: 1, + quantityObtained: 1, + status: "Expired" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:08:55.5839557+00:00", + displayName: "testsearch20200014", + quantity: 1, + quantityObtained: 1, + status: "Expired" + }, + { + id: "sanitized", + createdAt: "2020-10-02T22:07:15.616762+00:00", + displayName: "testsearch20200014", + quantity: 1, + quantityObtained: 1, + status: "Expired" + }, + { + id: "sanitized", + createdAt: "2020-10-02T21:55:20.0749931+00:00", + displayName: "mysearch20200928", + quantity: 1, + quantityObtained: 1, + status: "Cancelled" + }, + { + id: "sanitized", + createdAt: "2020-10-02T21:52:58.1479456+00:00", + displayName: "testsearch20200014", + quantity: 1, + quantityObtained: 1, + status: "Expired" + }, + { + id: "sanitized", + createdAt: "2020-10-02T21:39:32.6878583+00:00", + displayName: "mysearch20200928", + quantity: 1, + quantityObtained: 1, + status: "Success" + }, + { + id: "sanitized", + createdAt: "2020-10-02T21:30:40.8466501+00:00", + displayName: "mysearch20200928", + quantity: 1, + quantityObtained: 0, + status: "Error" + }, + { + id: "sanitized", + createdAt: "2020-10-02T20:58:08.7137293+00:00", + displayName: "testsearch20200014", + quantity: 1, + quantityObtained: 1, + status: "Expired" + }, + { + id: "sanitized", + createdAt: "2020-10-02T20:58:05.9896404+00:00", + displayName: "testsearch20200014", + quantity: 1, + quantityObtained: 1, + status: "Expired" + } + ], + nextLink: null + }, + [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "I17NSpJzB0qYl8OV/XgpIQ.0", + "X-Processing-Time", + "285ms", + "X-Azure-Ref", + "0YAJ7XwAAAAD2wTDeML+0QL/Gl2KVoZnIWVZSMzBFREdFMDQwOQA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:16 GMT" + ] + ); diff --git a/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_supported_countries.js b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_supported_countries.js new file mode 100644 index 000000000000..4df23df475e1 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_lists_playbacklive/recording_can_list_supported_countries.js @@ -0,0 +1,34 @@ +let nock = require("nock"); + +module.exports.hash = "63210f723fc2dda20fd80ea70727d02f"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .get("/administration/phonenumbers/countries") + .query(true) + .reply( + 200, + { + countries: [ + { localizedName: "Australia", countryCode: "AU" }, + { localizedName: "Japan", countryCode: "JP" }, + { localizedName: "United States", countryCode: "US" } + ], + nextLink: null + }, + [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "al0NvPKtKEiKR7odBJnJ6w.0", + "X-Processing-Time", + "1039ms", + "X-Azure-Ref", + "0XQJ7XwAAAAAsLUxsKDQGTpl5m3wU4auFWVZSMzBFREdFMDMyMAA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:14 GMT" + ] + ); diff --git a/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_get_area_codes.js b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_get_area_codes.js new file mode 100644 index 000000000000..c0af92525adc --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_get_area_codes.js @@ -0,0 +1,28 @@ +let nock = require("nock"); + +module.exports.hash = "d47a0b2d40ed297062396a68f1cb2e3f"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .post("/administration/phonenumbers/countries/US/areacodes", { + locationOptions: [ + { labelId: "state", optionsValue: "CA" }, + { labelId: "city", optionsValue: "NOAM-US-CA-LA" } + ] + }) + .query(true) + .reply(200, { primaryAreaCodes: [], secondaryAreaCodes: [], nextLink: null }, [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "Pi8oc2hf5EGf5nY/pP/x7g.0", + "X-Processing-Time", + "529ms", + "X-Azure-Ref", + "0YgJ7XwAAAABpUq6INWDlTYQX/XrU15KiWVZSMzBFREdFMDQxOAA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:18 GMT" + ]); diff --git a/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_get_location_options.js b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_get_location_options.js new file mode 100644 index 000000000000..76c948779548 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_get_location_options.js @@ -0,0 +1,759 @@ +let nock = require("nock"); + +module.exports.hash = "4b6cf5373e97938c5a43411f3e831ff2"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .get( + "/administration/phonenumbers/countries/US/phoneplangroups/sanitized/phoneplans/sanitized/locationoptions" + ) + .query(true) + .reply( + 200, + { + locationOptions: { + labelId: "state", + labelName: "State", + options: [ + { + name: "AL", + value: "AL", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Birmingham", value: "NOAM-US-AL-BI", locationOptions: [] }, + { name: "Huntsville", value: "NOAM-US-AL-HN", locationOptions: [] }, + { name: "Mobile", value: "NOAM-US-AL-MO", locationOptions: [] }, + { name: "Montgomery", value: "NOAM-US-AL-MN", locationOptions: [] } + ] + } + ] + }, + { + name: "AR", + value: "AR", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Fort Smith", value: "NOAM-US-AR-FS", locationOptions: [] }, + { name: "Jonesboro", value: "NOAM-US-AR-JO", locationOptions: [] }, + { name: "Little Rock", value: "NOAM-US-AR-LR", locationOptions: [] } + ] + } + ] + }, + { + name: "AZ", + value: "AZ", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Phoenix", value: "NOAM-US-AZ-PH", locationOptions: [] }] + } + ] + }, + { + name: "CA", + value: "CA", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Burbank", value: "NOAM-US-CA-BU", locationOptions: [] }, + { name: "Concord", value: "NOAM-US-CA-CO", locationOptions: [] }, + { name: "Irvine", value: "NOAM-US-CA-IR", locationOptions: [] }, + { name: "Salinas", value: "NOAM-US-CA-SL", locationOptions: [] }, + { name: "San Diego", value: "NOAM-US-CA-SD", locationOptions: [] }, + { name: "San Francisco", value: "NOAM-US-CA-SF", locationOptions: [] }, + { name: "San Jose", value: "NOAM-US-CA-SJ", locationOptions: [] }, + { name: "Santa Barbara", value: "NOAM-US-CA-SB", locationOptions: [] }, + { name: "Santa Clarita", value: "NOAM-US-CA-SC", locationOptions: [] }, + { name: "Santa Rosa", value: "NOAM-US-CA-SR", locationOptions: [] }, + { name: "Stockton", value: "NOAM-US-CA-ST", locationOptions: [] } + ] + } + ] + }, + { + name: "CL", + value: "CL", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Washington DC", value: "NOAM-US-CL-DC", locationOptions: [] }] + } + ] + }, + { + name: "CO", + value: "CO", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Grand Junction", value: "NOAM-US-CO-GJ", locationOptions: [] }, + { name: "Pueblo", value: "NOAM-US-CO-PU", locationOptions: [] } + ] + } + ] + }, + { + name: "CT", + value: "CT", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Bridgeport", value: "NOAM-US-CT-BR", locationOptions: [] }, + { name: "Hartford", value: "NOAM-US-CT-HA", locationOptions: [] } + ] + } + ] + }, + { + name: "DE", + value: "DE", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Wilmington", value: "NOAM-US-DE-WI", locationOptions: [] }] + } + ] + }, + { + name: "FL", + value: "FL", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Cape Coral", value: "NOAM-US-FL-CC", locationOptions: [] }, + { name: "Gainesville", value: "NOAM-US-FL-GA", locationOptions: [] }, + { name: "Jacksonville", value: "NOAM-US-FL-JA", locationOptions: [] }, + { name: "Lakeland", value: "NOAM-US-FL-LA", locationOptions: [] }, + { name: "Miami", value: "NOAM-US-FL-MI", locationOptions: [] }, + { name: "Orlando", value: "NOAM-US-FL-OR", locationOptions: [] }, + { name: "Port St Lucie", value: "NOAM-US-FL-PS", locationOptions: [] }, + { name: "Sarasota", value: "NOAM-US-FL-SA", locationOptions: [] }, + { name: "St. Petersburg", value: "NOAM-US-FL-SP", locationOptions: [] }, + { name: "Tallahassee", value: "NOAM-US-FL-TA", locationOptions: [] }, + { name: "West Palm Beach", value: "NOAM-US-FL-WP", locationOptions: [] } + ] + } + ] + }, + { + name: "GA", + value: "GA", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Albany", value: "NOAM-US-GA-AL", locationOptions: [] }, + { name: "Atlanta", value: "NOAM-US-GA-AT", locationOptions: [] }, + { name: "Augusta", value: "NOAM-US-GA-AU", locationOptions: [] }, + { name: "Macon", value: "NOAM-US-GA-MA", locationOptions: [] }, + { name: "Savannah", value: "NOAM-US-GA-SA", locationOptions: [] } + ] + } + ] + }, + { + name: "HI", + value: "HI", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Honolulu", value: "NOAM-US-HI-HO", locationOptions: [] }] + } + ] + }, + { + name: "IA", + value: "IA", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Cedar Rapids", value: "NOAM-US-IA-CR", locationOptions: [] }, + { name: "Davenport", value: "NOAM-US-IA-DA", locationOptions: [] }, + { name: "Mason City", value: "NOAM-US-IA-MC", locationOptions: [] }, + { name: "Sioux City", value: "NOAM-US-IA-SC", locationOptions: [] } + ] + } + ] + }, + { + name: "ID", + value: "ID", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Boise", value: "NOAM-US-ID-BO", locationOptions: [] }] + } + ] + }, + { + name: "IL", + value: "IL", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Alton", value: "NOAM-US-IL-AL", locationOptions: [] }, + { name: "Aurora", value: "NOAM-US-IL-AU", locationOptions: [] }, + { name: "Big Rock", value: "NOAM-US-IL-BK", locationOptions: [] }, + { name: "Champaign", value: "NOAM-US-IL-CA", locationOptions: [] }, + { name: "Chicago", value: "NOAM-US-IL-CH", locationOptions: [] }, + { name: "Rock Island", value: "NOAM-US-IL-RI", locationOptions: [] }, + { name: "Rockford", value: "NOAM-US-IL-RO", locationOptions: [] }, + { name: "Waukegan", value: "NOAM-US-IL-WK", locationOptions: [] } + ] + } + ] + }, + { + name: "IN", + value: "IN", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Evansville", value: "NOAM-US-IN-EV", locationOptions: [] }, + { name: "Fort Wayne", value: "NOAM-US-IN-FW", locationOptions: [] }, + { name: "Gary", value: "NOAM-US-IN-GA", locationOptions: [] }, + { name: "Indianapolis", value: "NOAM-US-IN-IN", locationOptions: [] }, + { name: "South Bend", value: "NOAM-US-IN-SB", locationOptions: [] } + ] + } + ] + }, + { + name: "KS", + value: "KS", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Kansas City", value: "NOAM-US-KS-KS", locationOptions: [] }, + { name: "Topeka", value: "NOAM-US-KS-TO", locationOptions: [] }, + { name: "Wichita", value: "NOAM-US-KS-WI", locationOptions: [] } + ] + } + ] + }, + { + name: "KY", + value: "KY", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Ashland", value: "NOAM-US-KY-AS", locationOptions: [] }, + { name: "Lexington", value: "NOAM-US-KY-LE", locationOptions: [] }, + { name: "Louisville", value: "NOAM-US-KY-LO", locationOptions: [] }, + { name: "Owensboro", value: "NOAM-US-KY-OW", locationOptions: [] } + ] + } + ] + }, + { + name: "LA", + value: "LA", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Baton Rouge", value: "NOAM-US-LA-BR", locationOptions: [] }, + { name: "Lafayette", value: "NOAM-US-LA-LA", locationOptions: [] }, + { name: "New Orleans", value: "NOAM-US-LA-NO", locationOptions: [] }, + { name: "Shreveport", value: "NOAM-US-LA-SH", locationOptions: [] } + ] + } + ] + }, + { + name: "MA", + value: "MA", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Boston", value: "NOAM-US-MA-BO", locationOptions: [] }, + { name: "Lowell", value: "NOAM-US-MA-LO", locationOptions: [] }, + { name: "Lynn", value: "NOAM-US-MA-LY", locationOptions: [] } + ] + } + ] + }, + { + name: "MD", + value: "MD", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Bethesda", value: "NOAM-US-MD-BE", locationOptions: [] }] + } + ] + }, + { + name: "ME", + value: "ME", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Portland", value: "NOAM-US-ME-PO", locationOptions: [] }] + } + ] + }, + { + name: "MI", + value: "MI", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Ann Arbor", value: "NOAM-US-MI-AA", locationOptions: [] }, + { name: "Detroit", value: "NOAM-US-MI-DE", locationOptions: [] }, + { name: "Flint", value: "NOAM-US-MI-FL", locationOptions: [] }, + { name: "Grand Rapids", value: "NOAM-US-MI-GP", locationOptions: [] }, + { name: "Grant", value: "NOAM-US-MI-GR", locationOptions: [] }, + { name: "Lansing", value: "NOAM-US-MI-LA", locationOptions: [] }, + { name: "Otsego", value: "NOAM-US-MI-OT", locationOptions: [] }, + { name: "Saginaw", value: "NOAM-US-MI-SA", locationOptions: [] }, + { name: "Sault Ste Marie", value: "NOAM-US-MI-SS", locationOptions: [] }, + { name: "Troy", value: "NOAM-US-MI-TR", locationOptions: [] }, + { name: "Warren", value: "NOAM-US-MI-WA", locationOptions: [] } + ] + } + ] + }, + { + name: "MN", + value: "MN", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Alexandria", value: "NOAM-US-MN-AL", locationOptions: [] }, + { name: "Bloomington", value: "NOAM-US-MN-BL", locationOptions: [] }, + { name: "Duluth", value: "NOAM-US-MN-DU", locationOptions: [] } + ] + } + ] + }, + { + name: "MO", + value: "MO", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Columbia", value: "NOAM-US-MO-CO", locationOptions: [] }, + { name: "Kansas City", value: "NOAM-US-MO-KS", locationOptions: [] }, + { name: "Marshall", value: "NOAM-US-MO-MA", locationOptions: [] }, + { name: "Springfield", value: "NOAM-US-MO-SP", locationOptions: [] }, + { name: "St. Charles", value: "NOAM-US-MO-SC", locationOptions: [] }, + { name: "St. Louis", value: "NOAM-US-MO-SL", locationOptions: [] } + ] + } + ] + }, + { + name: "MS", + value: "MS", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Biloxi", value: "NOAM-US-MS-BI", locationOptions: [] }, + { name: "Jackson", value: "NOAM-US-MS-JA", locationOptions: [] }, + { name: "Starkville", value: "NOAM-US-MS-ST", locationOptions: [] } + ] + } + ] + }, + { + name: "MT", + value: "MT", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Billings", value: "NOAM-US-MT-BI", locationOptions: [] }] + } + ] + }, + { + name: "NC", + value: "NC", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Charlotte", value: "NOAM-US-NC-CH", locationOptions: [] }, + { name: "Fayetteville", value: "NOAM-US-NC-FA", locationOptions: [] }, + { name: "Greensboro", value: "NOAM-US-NC-GR", locationOptions: [] }, + { name: "Raleigh", value: "NOAM-US-NC-RA", locationOptions: [] }, + { name: "Rocky Mount", value: "NOAM-US-NC-RM", locationOptions: [] } + ] + } + ] + }, + { + name: "ND", + value: "ND", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Fargo", value: "NOAM-US-ND-FA", locationOptions: [] }] + } + ] + }, + { + name: "NE", + value: "NE", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Kearney", value: "NOAM-US-NE-KE", locationOptions: [] }, + { name: "Omaha", value: "NOAM-US-NE-OM", locationOptions: [] } + ] + } + ] + }, + { + name: "NJ", + value: "NJ", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Atlantic City", value: "NOAM-US-NJ-AC", locationOptions: [] }, + { name: "Camden", value: "NOAM-US-NJ-CA", locationOptions: [] }, + { name: "Edison", value: "NOAM-US-NJ-ED", locationOptions: [] }, + { name: "Elizabeth", value: "NOAM-US-NJ-EL", locationOptions: [] }, + { name: "Newark", value: "NOAM-US-NJ-NE", locationOptions: [] } + ] + } + ] + }, + { + name: "NM", + value: "NM", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Albuquerque", value: "NOAM-US-NM-AL", locationOptions: [] }, + { name: "Las Cruces", value: "NOAM-US-NM-LC", locationOptions: [] } + ] + } + ] + }, + { + name: "NV", + value: "NV", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Las Vegas", value: "NOAM-US-NV-LV", locationOptions: [] }, + { name: "Reno", value: "NOAM-US-NV-RE", locationOptions: [] } + ] + } + ] + }, + { + name: "NY", + value: "NY", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Albany", value: "NOAM-US-NY-AL", locationOptions: [] }, + { name: "Brentwood", value: "NOAM-US-NY-BR", locationOptions: [] }, + { name: "Elmira", value: "NOAM-US-NY-EL", locationOptions: [] }, + { name: "Hempstead", value: "NOAM-US-NY-HE", locationOptions: [] }, + { name: "Kingston", value: "NOAM-US-NY-KI", locationOptions: [] }, + { name: "New York City", value: "NOAM-US-NY-NY", locationOptions: [] }, + { name: "Niagara Falls", value: "NOAM-US-NY-NF", locationOptions: [] }, + { name: "Rochester", value: "NOAM-US-NY-RO", locationOptions: [] }, + { name: "Yonkers", value: "NOAM-US-NY-YO", locationOptions: [] } + ] + } + ] + }, + { + name: "OH", + value: "OH", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Akron", value: "NOAM-US-OH-AK", locationOptions: [] }, + { name: "Cincinnati", value: "NOAM-US-OH-CI", locationOptions: [] }, + { name: "Cleveland", value: "NOAM-US-OH-CL", locationOptions: [] }, + { name: "Columbus", value: "NOAM-US-OH-CO", locationOptions: [] }, + { name: "Dayton", value: "NOAM-US-OH-DA", locationOptions: [] }, + { name: "Toledo", value: "NOAM-US-OH-TO", locationOptions: [] } + ] + } + ] + }, + { + name: "OK", + value: "OK", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Lawton", value: "NOAM-US-OK-LA", locationOptions: [] }, + { name: "Oklahoma City", value: "NOAM-US-OK-OC", locationOptions: [] }, + { name: "Tulsa", value: "NOAM-US-OK-TU", locationOptions: [] } + ] + } + ] + }, + { + name: "PA", + value: "PA", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Erie", value: "NOAM-US-PA-ER", locationOptions: [] }, + { name: "Lancaster", value: "NOAM-US-PA-LA", locationOptions: [] }, + { name: "Philadelphia", value: "NOAM-US-PA-PI", locationOptions: [] }, + { name: "Pittsburgh", value: "NOAM-US-PA-PT", locationOptions: [] }, + { name: "Scranton", value: "NOAM-US-PA-SC", locationOptions: [] } + ] + } + ] + }, + { + name: "RI", + value: "RI", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Providence", value: "NOAM-US-RI-PR", locationOptions: [] }] + } + ] + }, + { + name: "SC", + value: "SC", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Charleston", value: "NOAM-US-SC-CH", locationOptions: [] }, + { name: "Columbia", value: "NOAM-US-SC-CO", locationOptions: [] }, + { name: "Greenville", value: "NOAM-US-SC-GR", locationOptions: [] } + ] + } + ] + }, + { + name: "SD", + value: "SD", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Sioux Falls", value: "NOAM-US-SD-SF", locationOptions: [] }] + } + ] + }, + { + name: "TN", + value: "TN", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Chattanooga", value: "NOAM-US-TN-CH", locationOptions: [] }, + { name: "Clarksville", value: "NOAM-US-TN-CL", locationOptions: [] }, + { name: "Jackson", value: "NOAM-US-TN-JA", locationOptions: [] }, + { name: "Knoxville", value: "NOAM-US-TN-KN", locationOptions: [] }, + { name: "Memphis", value: "NOAM-US-TN-ME", locationOptions: [] }, + { name: "Nashville", value: "NOAM-US-TN-NA", locationOptions: [] } + ] + } + ] + }, + { + name: "TX", + value: "TX", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Abilene", value: "NOAM-US-TX-AB", locationOptions: [] }, + { name: "Austin", value: "NOAM-US-TX-AU", locationOptions: [] }, + { name: "Bryan", value: "NOAM-US-TX-BR", locationOptions: [] }, + { name: "Corpus Christi", value: "NOAM-US-TX-CC", locationOptions: [] }, + { name: "Dallas", value: "NOAM-US-TX-DA", locationOptions: [] }, + { name: "Denton", value: "NOAM-US-TX-DE", locationOptions: [] }, + { name: "El Paso", value: "NOAM-US-TX-EP", locationOptions: [] }, + { name: "Fort Worth", value: "NOAM-US-TX-FW", locationOptions: [] }, + { name: "Galveston", value: "NOAM-US-TX-GA", locationOptions: [] }, + { name: "Hamilton", value: "NOAM-US-TX-HA", locationOptions: [] }, + { name: "Houston", value: "NOAM-US-TX-HO", locationOptions: [] }, + { name: "Huntsville", value: "NOAM-US-TX-HU", locationOptions: [] }, + { name: "Laredo", value: "NOAM-US-TX-LA", locationOptions: [] }, + { name: "Lubbock", value: "NOAM-US-TX-LU", locationOptions: [] }, + { name: "Odessa", value: "NOAM-US-TX-OD", locationOptions: [] }, + { name: "San Antonio", value: "NOAM-US-TX-SA", locationOptions: [] }, + { name: "Tyler", value: "NOAM-US-TX-TY", locationOptions: [] } + ] + } + ] + }, + { + name: "UT", + value: "UT", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Salt Lake City", value: "NOAM-US-UT-SL", locationOptions: [] }, + { name: "St. George", value: "NOAM-US-UT-SG", locationOptions: [] } + ] + } + ] + }, + { + name: "VA", + value: "VA", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Arlington", value: "NOAM-US-VA-AR", locationOptions: [] }, + { name: "Lynchburg", value: "NOAM-US-VA-LY", locationOptions: [] }, + { name: "Richmond", value: "NOAM-US-VA-RI", locationOptions: [] }, + { name: "Roanoke", value: "NOAM-US-VA-RO", locationOptions: [] }, + { name: "Virginia Beach", value: "NOAM-US-VA-VB", locationOptions: [] } + ] + } + ] + }, + { + name: "VT", + value: "VT", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Brattleboro", value: "NOAM-US-VT-BR", locationOptions: [] }, + { name: "Burlington", value: "NOAM-US-VT-BU", locationOptions: [] }, + { name: "Newport", value: "NOAM-US-VT-NE", locationOptions: [] } + ] + } + ] + }, + { + name: "WI", + value: "WI", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [ + { name: "Eau Claire", value: "NOAM-US-WI-EC", locationOptions: [] }, + { name: "Green Bay", value: "NOAM-US-WI-GB", locationOptions: [] }, + { name: "Kenosha", value: "NOAM-US-WI-KE", locationOptions: [] }, + { name: "Madison", value: "NOAM-US-WI-MA", locationOptions: [] }, + { name: "Milwaukee", value: "NOAM-US-WI-MI", locationOptions: [] } + ] + } + ] + }, + { + name: "WV", + value: "WV", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Charleston", value: "NOAM-US-WV-CH", locationOptions: [] }] + } + ] + }, + { + name: "WY", + value: "WY", + locationOptions: [ + { + labelId: "city", + labelName: "City", + options: [{ name: "Laramie", value: "NOAM-US-WY-LA", locationOptions: [] }] + } + ] + } + ] + } + }, + [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "BTM2pp3U/06t6aZLTLdVLA.0", + "X-Processing-Time", + "371ms", + "X-Azure-Ref", + "0YQJ7XwAAAAAp9Ql4TZhyQLwtRZl2nBkuWVZSMzBFREdFMDMwOQA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:17 GMT" + ] + ); diff --git a/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_get_phoneplangroupid_and_phoneplanid_for_other_tests.js b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_get_phoneplangroupid_and_phoneplanid_for_other_tests.js new file mode 100644 index 000000000000..4c231dd9ba8a --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_get_phoneplangroupid_and_phoneplanid_for_other_tests.js @@ -0,0 +1,91 @@ +let nock = require("nock"); + +module.exports.hash = "1a4ba6af0469e1a931c49a965aadd8cd"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .get("/administration/phonenumbers/countries/US/phoneplangroups") + .query(true) + .reply( + 200, + { + phonePlanGroups: [ + { + phonePlanGroupId: "sanitized", + phoneNumberType: "Geographic", + localizedName: "Azure- User - Geographic", + localizedDescription: "These are numbers used by Azure resources." + }, + { + phonePlanGroupId: "sanitized", + phoneNumberType: "Geographic", + localizedName: "Azure - Geographic", + localizedDescription: "These are numbers used by Azure resources." + }, + { + phonePlanGroupId: "sanitized", + phoneNumberType: "TollFree", + localizedName: "Azure - Toll Free", + localizedDescription: "These are toll free numbers used by Azure resources." + } + ], + nextLink: null + }, + [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "3vx9b8g4b0OqOnJKX4ozlg.0", + "X-Processing-Time", + "574ms", + "X-Azure-Ref", + "0YAJ7XwAAAADx7ubmJawrT6lgonp+HaakWVZSMzBFREdFMDMxMwA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:17 GMT" + ] + ); + +nock("https://endpoint", { encodedQueryParams: true }) + .get("/administration/phonenumbers/countries/US/phoneplangroups/sanitized/phoneplans") + .query(true) + .reply( + 200, + { + phonePlans: [ + { + phonePlanId: "sanitized", + localizedName: "Outbound Only PSTN For User - Geographic", + locationType: "Selection", + areaCodes: [], + capabilities: ["Azure", "OutboundCalling", "UserAssignment", "Geographic"], + maximumSearchSize: 20 + }, + { + phonePlanId: "sanitized", + localizedName: "Inbound Only PSTN For User - Geographic", + locationType: "Selection", + areaCodes: [], + capabilities: ["Azure", "InboundCalling", "UserAssignment", "Geographic"], + maximumSearchSize: 20 + } + ], + nextLink: null + }, + [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "11tk5qm1CU66iBONzurrPg.0", + "X-Processing-Time", + "316ms", + "X-Azure-Ref", + "0YQJ7XwAAAADplBhPT9YaS7uuM+vcWgzFWVZSMzBFREdFMDMxMwA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:17 GMT" + ] + ); diff --git a/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_start_a_phone_number_search.js b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_start_a_phone_number_search.js new file mode 100644 index 000000000000..39434c2dd6a9 --- /dev/null +++ b/sdk/communication/communication-administration/recordings/node/phonenumberadministrationclient_playbacklive/recording_can_start_a_phone_number_search.js @@ -0,0 +1,29 @@ +let nock = require("nock"); + +module.exports.hash = "adb2deb4a6bd41676e1bba523a0f29ec"; + +module.exports.testInfo = { uniqueName: {}, newDate: {} }; + +nock("https://endpoint", { encodedQueryParams: true }) + .post("/administration/phonenumbers/searches", { + displayName: "LRO Test Search", + description: "Test search for JS phone number admin SDK.", + phonePlanIds: ["sanitized"], + areaCode: "800", + quantity: 1 + }) + .query(true) + .reply(201, { searchId: "sanitized" }, [ + "Transfer-Encoding", + "chunked", + "Content-Type", + "application/json; charset=utf-8", + "MS-CV", + "jUqg0zB9YEuElNZCvo4MnA.0", + "X-Processing-Time", + "1560ms", + "X-Azure-Ref", + "0YgJ7XwAAAACMuosAtoA/Qp5dKSethnztWVZSMzBFREdFMDMxNAA5ZmM3YjUxOS1hOGNjLTRmODktOTM1ZS1jOTE0OGFlMDllODE=", + "Date", + "Mon, 05 Oct 2020 11:24:20 GMT" + ]); diff --git a/sdk/communication/communication-administration/review/communication-administration.api.md b/sdk/communication/communication-administration/review/communication-administration.api.md new file mode 100644 index 000000000000..f914618f6254 --- /dev/null +++ b/sdk/communication/communication-administration/review/communication-administration.api.md @@ -0,0 +1,550 @@ +## API Report File for "@azure/communication-administration" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CommunicationUser } from '@azure/communication-common'; +import * as coreHttp from '@azure/core-http'; +import { HttpResponse } from '@azure/core-http'; +import { KeyCredential } from '@azure/core-auth'; +import { OperationOptions } from '@azure/core-http'; +import { PagedAsyncIterableIterator } from '@azure/core-paging'; +import { PipelineOptions } from '@azure/core-http'; + +// @public +export interface AcquiredPhoneNumber { + acquiredCapabilities: Capability[]; + activationState?: ActivationState; + assignmentStatus?: AssignmentStatus; + availableCapabilities: Capability[]; + phoneNumber: string; + placeName?: string; +} + +// @public +export interface AcquiredPhoneNumbers { + nextLink?: string; + phoneNumbers?: AcquiredPhoneNumber[]; +} + +// @public +export type ActivationState = "Activated" | "AssignmentPending" | "AssignmentFailed" | "UpdatePending" | "UpdateFailed"; + +// @public +export interface AreaCodes { + nextLink?: string; + primaryAreaCodes?: string[]; + secondaryAreaCodes?: string[]; +} + +// @public +export type AssignmentStatus = "Unassigned" | "Unknown" | "UserAssigned" | "ConferenceAssigned" | "FirstPartyAppAssigned" | "ThirdPartyAppAssigned"; + +// @public +export type CancelSearchOptions = OperationOptions; + +// @public +export type CapabilitiesUpdateStatus = "Pending" | "InProgress" | "Complete" | "Error"; + +// @public +export type Capability = "UserAssignment" | "FirstPartyVoiceAppAssignment" | "ConferenceAssignment" | "P2PSmsEnabled" | "Geographic" | "NonGeographic" | "TollCalling" | "TollFreeCalling" | "Premium" | "P2PSmsCapable" | "A2PSmsCapable" | "A2PSmsEnabled" | "Calling" | "TollFree" | "FirstPartyAppAssignment" | "ThirdPartyAppAssignment" | "Azure" | "Office365" | "InboundCalling" | "OutboundCalling" | "InboundA2PSms" | "OutboundA2PSms" | "InboundP2PSms" | "OutboundP2PSms"; + +// @public +export interface CarrierDetails { + localizedName?: string; + name?: string; +} + +// @public +export class CommunicationIdentityClient { + constructor(connectionString: string, options?: CommunicationIdentityOptions); + constructor(url: string, credential: KeyCredential, options?: CommunicationIdentityOptions); + createUser(options?: OperationOptions): Promise; + deleteUser(user: CommunicationUser, options?: OperationOptions): Promise; + issueToken(user: CommunicationUser, scopes: TokenScope[], options?: OperationOptions): Promise; + revokeTokens(user: CommunicationUser, tokensValidFrom?: Date, options?: OperationOptions): Promise; +} + +// @public +export interface CommunicationIdentityOptions extends PipelineOptions { +} + +// @public +export interface CommunicationIdentityToken { + expiresOn: Date; + id: string; + token: string; +} + +// @public +export interface CommunicationTokenRequest { + scopes: string[]; +} + +// @public +export interface CommunicationUserToken extends Pick { + user: CommunicationUser; +} + +// @public +export interface ConfigurePhoneNumberOptions extends OperationOptions { + applicationId?: string; + azurePstnTargetId?: string; +} + +// @public +export interface ConfigurePhoneNumberRequest { + callbackUrl: string; + phoneNumber: string; +} + +// @public +export type CreatePhoneNumberSearchResponse = WithResponse; + +// @public +export interface CreateSearchOptions extends OperationOptions { + locationOptions?: LocationOptionsDetails[]; +} + +// @public +export interface CreateSearchRequest { + areaCode: string; + description: string; + name: string; + phonePlanIds: string[]; + quantity: number; +} + +// @public +export interface CreateSearchResponse { + searchId: string; +} + +// @public +export type CreateUserResponse = WithResponse; + +// @public +export type CurrencyType = "USD"; + +// @public +export type GetAreaCodesOptions = OperationOptions; + +// @public +export interface GetAreaCodesRequest { + countryCode: string; + locationOptionsQueries: LocationOptionsQueries; + locationType: string; + phonePlanId: string; +} + +// @public +export type GetAreaCodesResponse = WithResponse; + +// @public +export type GetCapabilitiesUpdateOptions = OperationOptions; + +// @public +export type GetCapabilitiesUpdateResponse = WithResponse; + +// @public +export type GetPhoneNumberConfigurationOptions = OperationOptions; + +// @public +export type GetPhoneNumberConfigurationResponse = WithResponse; + +// @public +export type GetPhonePlanLocationOptionsOptions = PageableLocalizationOptions; + +// @public (undocumented) +export interface GetPhonePlanLocationOptionsRequest extends PageableLocalizationOptions { + countryCode: string; + phonePlanGroupId: string; + phonePlanId: string; +} + +// @public +export type GetPhonePlanLocationOptionsResponse = WithResponse; + +// @public +export type GetReleaseOptions = OperationOptions; + +// @public +export type GetReleaseResponse = WithResponse; + +// @public +export type GetSearchOptions = OperationOptions; + +// @public +export type GetSearchResponse = WithResponse; + +// @public +export type IssueTokenResponse = WithResponse; + +// @public +export type ListPhoneNumbersOptions = PageableLocalizationOptions; + +// @public +export interface ListPhonePlanGroupsOptions extends PageableLocalizationOptions { + // (undocumented) + includeRateInformation?: boolean; +} + +// @public +export type ListPhonePlansOptions = PageableLocalizationOptions; + +// @public (undocumented) +export interface ListPhonePlansRequest { + countryCode: string; + phonePlanGroupId: string; +} + +// @public +export type ListSupportedCountriesOptions = PageableLocalizationOptions; + +// @public +export interface LocalizationOptions extends OperationOptions { + locale?: string; +} + +// @public +export interface LocationOptions { + labelId?: string; + labelName?: string; + options?: LocationOptionsDetails[]; +} + +// @public +export interface LocationOptionsDetails { + locationOptions?: LocationOptions[]; + name?: string; + value?: string; +} + +// @public +export interface LocationOptionsQueries { + locationOptions?: LocationOptionsQuery[]; +} + +// @public +export interface LocationOptionsQuery { + labelId?: string; + optionsValue?: string; +} + +// @public +export interface LocationOptionsResponse { + // (undocumented) + locationOptions?: LocationOptions; +} + +// @public +export type LocationType = "CivicAddress" | "NotRequired" | "Selection"; + +// @public +export interface NumberConfiguration { + phoneNumber: string; + // (undocumented) + pstnConfiguration: PstnConfiguration; +} + +// @public +export interface NumberConfigurationResponse { + // (undocumented) + pstnConfiguration: PstnConfiguration; +} + +// @public +export interface NumberUpdateCapabilities { + add?: Capability[]; + remove?: Capability[]; +} + +// @public +export interface PageableLocalizationOptions extends PageableOptions, LocalizationOptions { +} + +// @public +export interface PageableOptions extends OperationOptions { + skip?: number; + take?: number; +} + +// @public +export class PhoneNumberAdministrationClient { + constructor(connectionString: string, options?: PhoneNumberAdministrationClientOptions); + constructor(url: string, credential: KeyCredential, options?: PhoneNumberAdministrationClientOptions); + cancelSearch(searchId: string, options?: CancelSearchOptions): Promise; + configurePhoneNumber(config: ConfigurePhoneNumberRequest, options?: ConfigurePhoneNumberOptions): Promise; + createSearch(searchRequest: CreateSearchRequest, options?: CreateSearchOptions): Promise; + getAreaCodes(request: GetAreaCodesRequest, options?: GetAreaCodesOptions): Promise; + getCapabilitiesUpdate(capabilitiesUpdateId: string, options?: GetCapabilitiesUpdateOptions): Promise; + getPhoneNumberConfiguration(phoneNumber: string, options?: GetPhoneNumberConfigurationOptions): Promise; + getPhonePlanLocationOptions(request: GetPhonePlanLocationOptionsRequest, options?: GetPhonePlanLocationOptionsOptions): Promise; + getRelease(releaseId: string, options?: GetReleaseOptions): Promise; + getSearch(searchId: string, options?: GetSearchOptions): Promise; + listPhoneNumbers(options?: ListPhoneNumbersOptions): PagedAsyncIterableIterator; + listPhonePlanGroups(countryCode: string, options?: ListPhonePlanGroupsOptions): PagedAsyncIterableIterator; + listPhonePlans(planGroupInfo: ListPhonePlansRequest, options?: ListPhonePlansOptions): PagedAsyncIterableIterator; + listReleases(options?: PageableOptions): PagedAsyncIterableIterator; + listSearches(options?: PageableOptions): PagedAsyncIterableIterator; + listSupportedCountries(options?: ListSupportedCountriesOptions): PagedAsyncIterableIterator; + purchaseSearch(searchId: string, options?: PurchaseSearchOptions): Promise; + releasePhoneNumbers(phoneNumbers: string[], options?: ReleasePhoneNumberOptions): Promise; + unconfigurePhoneNumber(phoneNumber: string, options?: UnconfigurePhoneNumberOptions): Promise; + updatePhoneNumbersCapabilities(phoneNumberCapabilitiesUpdates: PhoneNumberCapabilitiesUpdates, options?: UpdateCapabilitiesOptions): Promise; +} + +// @public +export interface PhoneNumberAdministrationClientOptions extends PipelineOptions { +} + +// @public +export type PhoneNumberAdministrationCreateSearchResponse = CreateSearchResponse & { + _response: coreHttp.HttpResponse & { + bodyAsText: string; + parsedBody: CreateSearchResponse; + }; +}; + +// @public +export type PhoneNumberAdministrationGetAllAreaCodesResponse = AreaCodes & { + _response: coreHttp.HttpResponse & { + bodyAsText: string; + parsedBody: AreaCodes; + }; +}; + +// @public +export type PhoneNumberAdministrationGetCapabilitiesUpdateResponse = UpdatePhoneNumberCapabilitiesResponse & { + _response: coreHttp.HttpResponse & { + bodyAsText: string; + parsedBody: UpdatePhoneNumberCapabilitiesResponse; + }; +}; + +// @public +export type PhoneNumberAdministrationGetNumberConfigurationResponse = NumberConfigurationResponse & { + _response: coreHttp.HttpResponse & { + bodyAsText: string; + parsedBody: NumberConfigurationResponse; + }; +}; + +// @public +export type PhoneNumberAdministrationGetPhonePlanLocationOptionsResponse = LocationOptionsResponse & { + _response: coreHttp.HttpResponse & { + bodyAsText: string; + parsedBody: LocationOptionsResponse; + }; +}; + +// @public +export type PhoneNumberAdministrationGetReleaseByIdResponse = PhoneNumberRelease & { + _response: coreHttp.HttpResponse & { + bodyAsText: string; + parsedBody: PhoneNumberRelease; + }; +}; + +// @public +export type PhoneNumberAdministrationGetSearchByIdResponse = PhoneNumberSearch & { + _response: coreHttp.HttpResponse & { + bodyAsText: string; + parsedBody: PhoneNumberSearch; + }; +}; + +// @public +export type PhoneNumberAdministrationReleasePhoneNumbersResponse = ReleaseResponse & { + _response: coreHttp.HttpResponse & { + bodyAsText: string; + parsedBody: ReleaseResponse; + }; +}; + +// @public +export type PhoneNumberCapabilitiesUpdates = { + [propertyName: string]: NumberUpdateCapabilities; +}; + +// @public +export interface PhoneNumberCountries { + countries?: PhoneNumberCountry[]; + nextLink?: string; +} + +// @public +export interface PhoneNumberCountry { + countryCode: string; + localizedName: string; +} + +// @public +export interface PhoneNumberEntities { + entities?: PhoneNumberEntity[]; + nextLink?: string; +} + +// @public +export interface PhoneNumberEntity { + createdAt?: Date; + displayName?: string; + focDate?: Date; + id?: string; + quantity?: number; + quantityObtained?: number; + status?: string; +} + +// @public +export interface PhoneNumberRelease { + createdAt?: Date; + errorMessage?: string; + phoneNumberReleaseStatusDetails?: { + [propertyName: string]: PhoneNumberReleaseDetails; + }; + releaseId?: string; + status?: ReleaseStatus; +} + +// @public +export interface PhoneNumberReleaseDetails { + errorCode?: number; + status?: PhoneNumberReleaseStatus; +} + +// @public +export type PhoneNumberReleaseStatus = "Pending" | "Success" | "Error" | "InProgress"; + +// @public +export interface PhoneNumberSearch { + areaCode?: string; + createdAt?: Date; + description?: string; + displayName?: string; + errorCode?: number; + locationOptions?: LocationOptionsDetails[]; + phoneNumbers?: string[]; + phonePlanIds?: string[]; + quantity?: number; + reservationExpiryDate?: Date; + searchId?: string; + status?: SearchStatus; +} + +// @public +export type PhoneNumberType = "Unknown" | "Geographic" | "TollFree" | "Indirect"; + +// @public +export interface PhonePlan { + areaCodes?: string[]; + capabilities?: Capability[]; + localizedName: string; + locationType: LocationType; + maximumSearchSize?: number; + phonePlanId: string; +} + +// @public +export interface PhonePlanGroup { + // (undocumented) + carrierDetails?: CarrierDetails; + localizedDescription: string; + localizedName: string; + phoneNumberType?: PhoneNumberType; + phonePlanGroupId: string; + // (undocumented) + rateInformation?: RateInformation; +} + +// @public +export interface PhonePlanGroups { + nextLink?: string; + phonePlanGroups?: PhonePlanGroup[]; +} + +// @public +export interface PhonePlansResponse { + nextLink?: string; + phonePlans?: PhonePlan[]; +} + +// @public +export interface PstnConfiguration { + applicationId?: string; + callbackUrl: string; +} + +// @public +export type PurchaseSearchOptions = OperationOptions; + +// @public +export interface RateInformation { + currencyType?: CurrencyType; + monthlyRate?: number; + rateErrorMessage?: string; +} + +// @public +export type RefreshSearchOptions = OperationOptions; + +// @public +export type ReleasePhoneNumberOptions = OperationOptions; + +// @public +export type ReleasePhoneNumbersResponse = WithResponse; + +// @public +export interface ReleaseResponse { + releaseId: string; +} + +// @public +export type ReleaseStatus = "Pending" | "InProgress" | "Complete" | "Failed" | "Expired"; + +// @public +export type SearchStatus = "Pending" | "InProgress" | "Reserved" | "Expired" | "Expiring" | "Completing" | "Refreshing" | "Success" | "Manual" | "Cancelled" | "Cancelling" | "Error" | "PurchasePending"; + +// @public +export type TokenScope = "chat" | "voip" | "pstn"; + +// @public +export type UnconfigurePhoneNumberOptions = OperationOptions; + +// @public +export interface UpdateCapabilitiesOptions extends OperationOptions { + // (undocumented) + phoneNumbers?: PhoneNumberCapabilitiesUpdates; +} + +// @public +export interface UpdateNumberCapabilitiesResponse { + capabilitiesUpdateId: string; +} + +// @public +export type UpdateNumbersCapabilitiesResponse = WithResponse; + +// @public +export interface UpdatePhoneNumberCapabilitiesResponse { + capabilitiesUpdateId?: string; + capabilitiesUpdateStatus?: CapabilitiesUpdateStatus; + createdAt?: Date; + phoneNumberCapabilitiesUpdates?: { + [propertyName: string]: NumberUpdateCapabilities; + }; +} + +// @public +export type VoidResponse = WithResponse<{}>; + +// @public +export type WithResponse = T & { + _response: HttpResponse; +}; + + +// (No @packageDocumentation comment for this package) + +``` diff --git a/sdk/textanalytics/ai-text-analytics/rollup.base.config.js b/sdk/communication/communication-administration/rollup.base.config.js similarity index 80% rename from sdk/textanalytics/ai-text-analytics/rollup.base.config.js rename to sdk/communication/communication-administration/rollup.base.config.js index 0dd357fc91b3..0e556ce1f12e 100644 --- a/sdk/textanalytics/ai-text-analytics/rollup.base.config.js +++ b/sdk/communication/communication-administration/rollup.base.config.js @@ -3,10 +3,10 @@ import nodeResolve from "@rollup/plugin-node-resolve"; import multiEntry from "@rollup/plugin-multi-entry"; import cjs from "@rollup/plugin-commonjs"; import replace from "@rollup/plugin-replace"; -import shim from "rollup-plugin-shim"; import { terser } from "rollup-plugin-terser"; import sourcemaps from "rollup-plugin-sourcemaps"; import viz from "rollup-plugin-visualizer"; +import shim from "rollup-plugin-shim"; const pkg = require("./package.json"); const depNames = Object.keys(pkg.dependencies); @@ -15,7 +15,7 @@ const input = "dist-esm/src/index.js"; const production = process.env.NODE_ENV === "production"; export function nodeConfig(test = false) { - const externalNodeBuiltins = []; + const externalNodeBuiltins = ["events", "crypto"]; const baseConfig = { input: input, external: depNames.concat(externalNodeBuiltins), @@ -25,9 +25,11 @@ export function nodeConfig(test = false) { sourcemaps(), replace({ delimiters: ["", ""], - // replace dynamic checks with if (true) since this is for node only. - // Allows rollup's dead code elimination to be more aggressive. - "if (isNode)": "if (true)" + values: { + // replace dynamic checks with if (true) since this is for node only. + // Allows rollup's dead code elimination to be more aggressive. + "if (isNode)": "if (true)" + } }), nodeResolve({ preferBuiltins: true }), cjs() @@ -42,8 +44,8 @@ export function nodeConfig(test = false) { // different output file baseConfig.output.file = "dist-test/index.node.js"; - // mark devdeps as external - baseConfig.external.push(...devDepNames); + // mark assert as external + baseConfig.external.push("assert", ...devDepNames); // Disable tree-shaking of test code. In rollup-plugin-node-resolve@5.0.0, rollup started respecting // the "sideEffects" field in package.json. Since our package.json sets "sideEffects=false", this also @@ -56,26 +58,28 @@ export function nodeConfig(test = false) { return baseConfig; } -export function browserConfig(test = false, production = false) { +export function browserConfig(test = false) { const baseConfig = { input: input, + external: ["crypto", "fs-extra"], output: { - file: "dist-browser/azure-ai-text-analytics.js", + file: "dist-browser/azure-communication-administration.js", format: "umd", - name: "Azure.CognitiveServicesTextAnalytics", + name: "Azure.Communication.Administration", sourcemap: true, globals: { "@azure/core-http": "Azure.Core.HTTP" } }, preserveSymlinks: false, - external: ["fs-extra"], plugins: [ sourcemaps(), replace({ delimiters: ["", ""], - // replace dynamic checks with if (false) since this is for - // browser only. Rollup's dead code elimination will remove - // any code guarded by if (isNode) { ... } - "if (isNode)": "if (false)" + values: { + // replace dynamic checks with if (false) since this is for + // browser only. Rollup's dead code elimination will remove + // any code guarded by if (isNode) { ... } + "if (isNode)": "if (false)" + } }), shim({ constants: `export default {}`, @@ -90,7 +94,7 @@ export function browserConfig(test = false, production = false) { }), cjs({ namedExports: { - chai: ["assert", "expect", "use"], + chai: ["assert"], events: ["EventEmitter"], "@opentelemetry/api": ["CanonicalCode", "SpanKind", "TraceFlags"] } @@ -121,9 +125,6 @@ export function browserConfig(test = false, production = false) { // the "sideEffects" field in package.json. Since our package.json sets "sideEffects=false", this also // applies to test code, which causes all tests to be removed by tree-shaking. baseConfig.treeshake = false; - } else if (production) { - baseConfig.output.file = "dist-browser/azure-ai-text-analytics.min.js"; - baseConfig.plugins.push(terser()); } return baseConfig; diff --git a/sdk/communication/communication-administration/rollup.config.js b/sdk/communication/communication-administration/rollup.config.js new file mode 100644 index 000000000000..14652aa67ed8 --- /dev/null +++ b/sdk/communication/communication-administration/rollup.config.js @@ -0,0 +1,13 @@ +import * as base from "./rollup.base.config"; + +const inputs = []; + +if (!process.env.ONLY_BROWSER) { + inputs.push(base.nodeConfig()); +} + +if (!process.env.ONLY_NODE) { + inputs.push(base.browserConfig()); +} + +export default inputs; diff --git a/sdk/formrecognizer/ai-form-recognizer/rollup.test.config.js b/sdk/communication/communication-administration/rollup.test.config.js similarity index 100% rename from sdk/formrecognizer/ai-form-recognizer/rollup.test.config.js rename to sdk/communication/communication-administration/rollup.test.config.js diff --git a/sdk/communication/communication-administration/sample.env b/sdk/communication/communication-administration/sample.env new file mode 100644 index 000000000000..587c69bb3fdf --- /dev/null +++ b/sdk/communication/communication-administration/sample.env @@ -0,0 +1,7 @@ +# Used in most samples. Retrieve these values from a Communication Services resource +# in the Azure Portal. +COMMUNICATION_CONNECTION_STRING="endpoint=;accessKey=" + +# Our tests assume that TEST_MODE is "playback" by default. You can +# change it to "record" to generate new recordings, or "live" to bypass the recorder entirely. +# TEST_MODE=playback diff --git a/sdk/communication/communication-administration/samples/.gitignore b/sdk/communication/communication-administration/samples/.gitignore new file mode 100644 index 000000000000..0c348f50aebf --- /dev/null +++ b/sdk/communication/communication-administration/samples/.gitignore @@ -0,0 +1 @@ +.npmrc \ No newline at end of file diff --git a/sdk/communication/communication-administration/samples/javascript/README.md b/sdk/communication/communication-administration/samples/javascript/README.md new file mode 100644 index 000000000000..d16305e747ac --- /dev/null +++ b/sdk/communication/communication-administration/samples/javascript/README.md @@ -0,0 +1,62 @@ +--- +page_type: sample +languages: + - javascript +products: + - azure + - azure-communication-service + - azure-communication-administration +urlFragment: communication-administration-identity-javascript +--- + +# Azure Communication Service Administration Identity client library sample for JavaScript + +These sample programs show how to use the JavaScript client libraries for Azure Communication Service Administration Identity to issue and refresh tokens. + +| **File Name** | **Description** | +| -------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| [issueToken.js][issuetoken] | uses the CommunicationIdentityClient to create a user and issue a token for this user | +| [revokeTokens.js][= 8.0.0. + +You need [an Azure subscription][freesub] and [an Azure Communication Service Instance][azcomsvc] to run these sample program. + +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 sample 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 issueToken.js +``` + +Alternatively, run a single sample with the correct environment variables set (step 3 is not required if you do this), for example (cross-platform): + +```bash +npx cross-env CONNECTION_STRING="" node issueToken.js +``` + +## Next Steps + +Take a look at our [API Documentation][apiref] for more information about the APIs that are available in the clients. + +[issuetoken]: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/communication/communication-administration/samples/javascript/issueToken.js +[revoketokens]: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/communication/communication-administration/samples/javascript/revokeTokens.js +[apiref]: https://docs.microsoft.com/javascript/api/@azure/communication-administration +[azcomsvc]: https://docs.microsoft.com/azure/communication-services/quickstarts/create-communication-resource?tabs=windows&pivots=platform-azp +[freesub]: https://azure.microsoft.com/free/ +[package]: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/communication/communication-administration/README.md diff --git a/sdk/communication/communication-administration/samples/javascript/issueToken.js b/sdk/communication/communication-administration/samples/javascript/issueToken.js new file mode 100644 index 000000000000..db295a7913c7 --- /dev/null +++ b/sdk/communication/communication-administration/samples/javascript/issueToken.js @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Demonstrates how to use the CommunicationIdentityClient to + * issue a user token. + */ + +const { CommunicationIdentityClient } = require("@azure/communication-administration"); + +// Load the .env file if it exists +const dotenv = require("dotenv"); +dotenv.config(); + +// You will need to set this environment variables or edit the following values +const connectionString = + process.env["CONNECTION_STRING"] || ""; + +async function main() { + console.log("== Issue Token Sample =="); + + const client = new CommunicationIdentityClient(connectionString); + const scopes = ["chat"]; + + // Create user + console.log("Creating User"); + + const user = await client.createUser(); + + console.log(`Created user with id: ${user.communicationUserId}`); + console.log("Issuing Token"); + + // Issue token and get token from response + const { token } = await client.issueToken(user, scopes); + + console.log(`Issued token: ${token}`); +} + +main().catch((error) => { + console.error("Encountered an error while issuing token: "); + console.error("Request: \n", error.request); + console.error("\nResponse: \n", error.response); + console.error(error); +}); diff --git a/sdk/communication/communication-administration/samples/javascript/package.json b/sdk/communication/communication-administration/samples/javascript/package.json new file mode 100644 index 000000000000..268ddee07c85 --- /dev/null +++ b/sdk/communication/communication-administration/samples/javascript/package.json @@ -0,0 +1,29 @@ +{ + "name": "azure-communication-configuration-user-token-samples-js", + "version": "0.1.0", + "description": "Azure Communication Service User Token Management client library samples for JavaScript", + "engine": { + "node": ">=8.0.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Azure/azure-sdk-for-js.git" + }, + "keywords": [ + "Azure", + "Communication", + "Node.js", + "JavaScript" + ], + "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/master/sdk/communication/communication-configuration", + "sideEffects": false, + "dependencies": { + "@azure/communication-administration": "latest", + "dotenv": "^8.2.0" + } +} diff --git a/sdk/communication/communication-administration/samples/javascript/revokeTokens.js b/sdk/communication/communication-administration/samples/javascript/revokeTokens.js new file mode 100644 index 000000000000..13dabb722451 --- /dev/null +++ b/sdk/communication/communication-administration/samples/javascript/revokeTokens.js @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Demonstrates how to use the CommunicationIdentityClient to + * revoke a user's tokens. + */ + +const { CommunicationIdentityClient } = require("@azure/communication-administration"); + +// Load the .env file if it exists +const dotenv = require("dotenv"); +dotenv.config(); + +// You will need to set this environment variables or edit the following values +const connectionString = + process.env["CONNECTION_STRING"] || ""; + +async function main() { + console.log("== Issue Token Sample =="); + + const client = new CommunicationIdentityClient(connectionString); + const scopes = ["chat"]; + + // Create user + console.log("Creating User"); + + const user = await client.createUser(); + + console.log(`Created user with id: ${user.communicationUserId}`); + + console.log("Issuing Tokens"); + + // Issue tokens + const { token: token1 } = await client.issueToken(user, scopes); + const { token: token2 } = await client.issueToken(user, scopes); + const { token: token3 } = await client.issueToken(user, scopes); + + console.log("Issued tokens:"); + console.log(token1); + console.log(token2); + console.log(token3); + + // Revoke tokens + console.log("Revoking Tokens"); + + await client.revokeTokens(user, new Date()); + + console.log("Tokens Revoked"); +} + +main().catch((error) => { + console.error("Encountered an error while revoking tokens: "); + console.error("Request: \n", error.request); + console.error("\nResponse: \n", error.response); + console.error(error); +}); diff --git a/sdk/communication/communication-administration/samples/javascript/sample.env b/sdk/communication/communication-administration/samples/javascript/sample.env new file mode 100644 index 000000000000..1ba7d7b92f1f --- /dev/null +++ b/sdk/communication/communication-administration/samples/javascript/sample.env @@ -0,0 +1,3 @@ +# Used in most samples. Retrieve these values from a Communication Service instance +# in the Azure Portal. +CONNECTION_STRING="endpoint=https://.communication.azure.net/;accessKey=" \ No newline at end of file diff --git a/sdk/communication/communication-administration/samples/tsconfig.json b/sdk/communication/communication-administration/samples/tsconfig.json new file mode 100644 index 000000000000..8c89eac7173a --- /dev/null +++ b/sdk/communication/communication-administration/samples/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "typescript/dist", + "lib": ["DOM", "ES6"] + }, + "include": ["typescript/src/**.ts"], + "exclude": ["typescript/*.json", "**/node_modules/", "../node_modules", "../typings"] +} diff --git a/sdk/communication/communication-administration/samples/typescript/README.md b/sdk/communication/communication-administration/samples/typescript/README.md new file mode 100644 index 000000000000..5a42c036f75c --- /dev/null +++ b/sdk/communication/communication-administration/samples/typescript/README.md @@ -0,0 +1,68 @@ +--- +page_type: sample +languages: + - typescript +products: + - azure + - azure-communication-service + - azure-communication-administration +urlFragment: communication-administration-identity-typescript +--- + +# Azure Communication Service Communication Identity client library sample for TypeScript + +These sample programs show how to use the TypeScript client libraries for Azure Communication Service Communication Identity to issue and refresh tokens. + +| **File Name** | **Description** | +| ------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| [issueToken.ts][issuetoken] | uses the CommunicationIdentityClient to create a user and issue a token for this user | +| [revokeTokens.ts][revoketokens] | uses the CommunicationIdentityClient to create a user, issue tokens for this user, and revoke these tokens | + +## Prerequisites + +The sample is compatible with Node.js >= 8.0.0. + +You need [an Azure subscription][freesub] and [an Azure Communication Service Instance][azcomsvc] to run these sample program. + +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 sample using the published version of the package: + +1. Install the dependencies using `npm`: + +```bash +npm install +``` + +2. Compile the sample + +```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/issueToken.js +``` + +Alternatively, run a single sample with the correct environment variables set (step 3 is not required if you do this), for example (cross-platform): + +```bash +npx cross-env CONNECTION_STRING="" node dist/issueToken.js +``` + +## Next Steps + +Take a look at our [API Documentation][apiref] for more information about the APIs that are available in the clients. + +[issuetoken]: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/communication/communication-administration/samples/typescript/src/issueToken.ts +[revoketokens]: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/communication/communication-administration/samples/typescript/src/revokeTokens.ts +[apiref]: https://docs.microsoft.com/javascript/api/@azure/communication-administration +[azcomsvc]: https://docs.microsoft.com/azure/communication-services/quickstarts/create-communication-resource?tabs=windows&pivots=platform-azp +[freesub]: https://azure.microsoft.com/free/ +[package]: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/communication/communication-administration/README.md diff --git a/sdk/communication/communication-administration/samples/typescript/package.json b/sdk/communication/communication-administration/samples/typescript/package.json new file mode 100644 index 000000000000..a2a3941de76d --- /dev/null +++ b/sdk/communication/communication-administration/samples/typescript/package.json @@ -0,0 +1,38 @@ +{ + "name": "azure-communication-configuration-user-token-samples-ts", + "version": "0.1.0", + "description": "Azure Communication Service User Token Management client library samples for TypeScript", + "engine": { + "node": ">=8.0.0" + }, + "scripts": { + "build": "tsc", + "prebuild": "rimraf dist/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Azure/azure-sdk-for-js.git" + }, + "keywords": [ + "Azure", + "Communication", + "Node.js", + "JavaScript" + ], + "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/master/sdk/communication/communication-configuration", + "sideEffects": false, + "dependencies": { + "@azure/communication-administration": "latest", + "dotenv": "^8.2.0" + }, + "devDependencies": { + "@types/node": "^8.0.0", + "rimraf": "^3.0.0", + "typescript": "~3.6.4" + } +} diff --git a/sdk/communication/communication-administration/samples/typescript/sample.env b/sdk/communication/communication-administration/samples/typescript/sample.env new file mode 100644 index 000000000000..1ba7d7b92f1f --- /dev/null +++ b/sdk/communication/communication-administration/samples/typescript/sample.env @@ -0,0 +1,3 @@ +# Used in most samples. Retrieve these values from a Communication Service instance +# in the Azure Portal. +CONNECTION_STRING="endpoint=https://.communication.azure.net/;accessKey=" \ No newline at end of file diff --git a/sdk/communication/communication-administration/samples/typescript/src/issueToken.ts b/sdk/communication/communication-administration/samples/typescript/src/issueToken.ts new file mode 100644 index 000000000000..a185e04adfd5 --- /dev/null +++ b/sdk/communication/communication-administration/samples/typescript/src/issueToken.ts @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Demonstrates how to use the CommunicationIdentityClient to + * issue a new user token. + */ + +import { CommunicationIdentityClient, TokenScope } from "@azure/communication-administration"; + +// Load the .env file if it exists +import * as dotenv from "dotenv"; +dotenv.config(); + +// You will need to set this environment variables or edit the following values +const connectionString = + process.env["CONNECTION_STRING"] || ""; + +export const main = async () => { + console.log("== Issue Token Sample =="); + + const client = new CommunicationIdentityClient(connectionString); + const scopes: TokenScope[] = ["chat"]; + + // Create user + console.log("Creating User"); + + const user = await client.createUser(); + + console.log(`Created user with id: ${user.communicationUserId}`); + console.log("Issuing Token"); + + // Issue token and get token from response + const { token } = await client.issueToken(user, scopes); + + console.log(`Issued token: ${token}`); +}; + +main().catch((error) => { + console.error("Encountered an error while issuing token: "); + console.error("Request: \n", error.request); + console.error("\nResponse: \n", error.response); + console.error(error); +}); diff --git a/sdk/communication/communication-administration/samples/typescript/src/revokeTokens.ts b/sdk/communication/communication-administration/samples/typescript/src/revokeTokens.ts new file mode 100644 index 000000000000..4e4e6cbf0255 --- /dev/null +++ b/sdk/communication/communication-administration/samples/typescript/src/revokeTokens.ts @@ -0,0 +1,56 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * Demonstrates how to use the CommunicationIdentityClient to + * issue a new user token. + */ + +import { CommunicationIdentityClient } from "@azure/communication-administration"; + +// Load the .env file if it exists +import * as dotenv from "dotenv"; +dotenv.config(); + +// You will need to set this environment variables or edit the following values +const connectionString = + process.env["CONNECTION_STRING"] || ""; + +export const main = async () => { + console.log("== Issue Token Sample =="); + + const client = new CommunicationIdentityClient(connectionString); + + // Create user + console.log("Creating User"); + + const user = await client.createUser(); + + console.log(`Created user with id: ${user.communicationUserId}`); + + console.log("Issuing Tokens"); + + // Issue tokens + const { token: token1 } = await client.issueToken(user, ["chat"]); + const { token: token2 } = await client.issueToken(user, ["pstn"]); + const { token: token3 } = await client.issueToken(user, ["voip"]); + + console.log("Issued tokens:"); + console.log(token1); + console.log(token2); + console.log(token3); + + // Revoke tokens + console.log("Revoking Tokens"); + + await client.revokeTokens(user, new Date()); + + console.log("Tokens Revoked"); +}; + +main().catch((error) => { + console.error("Encountered an error while issuing/refreshing token: "); + console.error("Request: \n", error.request); + console.error("\nResponse: \n", error.response); + console.error(error); +}); diff --git a/sdk/communication/communication-administration/samples/typescript/tsconfig.json b/sdk/communication/communication-administration/samples/typescript/tsconfig.json new file mode 100644 index 000000000000..9e7ca6c9974b --- /dev/null +++ b/sdk/communication/communication-administration/samples/typescript/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "strict": true, + "alwaysStrict": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**.ts"], + "exclude": ["node_modules"] +} diff --git a/sdk/communication/communication-administration/src/common/logger.ts b/sdk/communication/communication-administration/src/common/logger.ts new file mode 100644 index 000000000000..ea6fd2a63671 --- /dev/null +++ b/sdk/communication/communication-administration/src/common/logger.ts @@ -0,0 +1,9 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { createClientLogger } from "@azure/logger"; + +/** + * The @azure/logger configuration for this package. + */ +export const logger = createClientLogger("communication-administration"); diff --git a/sdk/communication/communication-administration/src/common/mappers.ts b/sdk/communication/communication-administration/src/common/mappers.ts new file mode 100644 index 000000000000..52c5be668df3 --- /dev/null +++ b/sdk/communication/communication-administration/src/common/mappers.ts @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { HttpOperationResponse, HttpResponse } from "@azure/core-http"; +import { WithResponse } from ".."; + +/** + * Attach http response to a model + */ +export const attachHttpResponse = ( + model: T, + httpResponse: (HttpResponse & { bodyAsText: string; parsedBody: any }) | HttpOperationResponse +): WithResponse => { + const { parsedBody, bodyAsText, ...r } = httpResponse; + return Object.defineProperty(model, "_response", { + value: r + }); +}; diff --git a/sdk/communication/communication-administration/src/common/models.ts b/sdk/communication/communication-administration/src/common/models.ts new file mode 100644 index 000000000000..539ef1bc6083 --- /dev/null +++ b/sdk/communication/communication-administration/src/common/models.ts @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { HttpResponse } from "@azure/core-http"; + +/** + * Represents an object with a non-enumerable _response property which provides + * information about the HTTP response. + */ +export type WithResponse = T & { _response: HttpResponse }; + +/** + * Represents a generic HTTP response + */ +export type VoidResponse = WithResponse<{}>; diff --git a/sdk/communication/communication-administration/src/common/tracing.ts b/sdk/communication/communication-administration/src/common/tracing.ts new file mode 100644 index 000000000000..bd42a3471fb5 --- /dev/null +++ b/sdk/communication/communication-administration/src/common/tracing.ts @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { OperationOptions } from "@azure/core-http"; +import { getTracer } from "@azure/core-tracing"; +import { Span, SpanOptions, SpanKind } from "@opentelemetry/api"; + +type OperationTracingOptions = OperationOptions["tracingOptions"]; + +/** + * Creates a span using the global tracer. + * @ignore + * @param name The name of the operation being performed. + * @param tracingOptions The options for the underlying http request. + */ +export function createSpan( + operationName: string, + operationOptions: T +): { span: Span; updatedOptions: T } { + const tracer = getTracer(); + const tracingOptions = operationOptions.tracingOptions || {}; + const spanOptions: SpanOptions = { + ...tracingOptions.spanOptions, + kind: SpanKind.INTERNAL + }; + + const span = tracer.startSpan(`Azure.Communication.${operationName}`, spanOptions); + + span.setAttribute("az.namespace", "Microsoft.Communication"); + + let newSpanOptions = tracingOptions.spanOptions || {}; + if (span.isRecording()) { + newSpanOptions = { + ...tracingOptions.spanOptions, + parent: span.context(), + attributes: { + ...spanOptions.attributes, + "az.namespace": "Microsoft.Communication" + } + }; + } + + const newTracingOptions: OperationTracingOptions = { + ...tracingOptions, + spanOptions: newSpanOptions + }; + + const newOperationOptions: T = { + ...operationOptions, + tracingOptions: newTracingOptions + }; + + return { + span, + updatedOptions: newOperationOptions + }; +} diff --git a/sdk/communication/communication-administration/src/communicationIdentity/communicationIdentityClient.ts b/sdk/communication/communication-administration/src/communicationIdentity/communicationIdentityClient.ts new file mode 100644 index 000000000000..ed5869f7f8a1 --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/communicationIdentityClient.ts @@ -0,0 +1,237 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { + createCommunicationAccessKeyCredentialPolicy, + parseClientArguments, + isKeyCredential, + CommunicationUser +} from "@azure/communication-common"; +import { KeyCredential } from "@azure/core-auth"; +import { + InternalPipelineOptions, + createPipelineFromOptions, + OperationOptions, + operationOptionsToRequestOptionsBase +} from "@azure/core-http"; +import { CanonicalCode } from "@opentelemetry/api"; +import { GeneratedCommunicationIdentityClient } from "./generated/src/generatedCommunicationIdentityClient"; +import { CommunicationIdentityOperations } from "./generated/src/operations/communicationIdentityOperations"; +import { SDK_VERSION } from "./constants"; +import { logger } from "../common/logger"; +import { createSpan } from "../common/tracing"; +import { + CommunicationIdentityOptions, + TokenScope, + IssueTokenResponse, + CreateUserResponse, + CommunicationUserToken +} from "./models"; +import { VoidResponse } from "../common/models"; +import { attachHttpResponse } from "../common/mappers"; + +const isCommunicationIdentityOptions = (options: any): options is CommunicationIdentityOptions => + options && !isKeyCredential(options); + +/** + * Client class for interacting with Azure Communication Services User Token Management. + */ +export class CommunicationIdentityClient { + /** + * A reference to the auto-generated UserToken HTTP client. + */ + private readonly client: CommunicationIdentityOperations; + + /** + * The base URL to which requests are made + */ + private readonly endpoint: string; + + /** + * Initializes a new instance of the CommunicationIdentity class. + * @param connectionString Connection string to connect to an Azure Communication Service resource. + * Example: "endpoint=https://contoso.eastus.communications.azure.net/;accesskey=secret"; + * @param options Optional. Options to configure the HTTP pipeline. + */ + public constructor(connectionString: string, options?: CommunicationIdentityOptions); + + /** + * Initializes a new instance of the CommunicationIdentity class using an Azure KeyCredential. + * @param url The endpoint of the service (ex: https://contoso.eastus.communications.azure.net). + * @param credential An object that is used to authenticate requests to the service. Use the AzureKeyCredential or `@azure/identity` to create a credential. + * @param options Optional. Options to configure the HTTP pipeline. + */ + public constructor( + url: string, + credential: KeyCredential, + options?: CommunicationIdentityOptions + ); + + /** + * Creates an instance of CommunicationIdentity. + * + * @param {string} url The endpoint to the service + * @param {KeyCredential} credential An object that is used to authenticate requests to the service. Use the AzureKeyCredential or `@azure/identity` to create a credential. + * @param {CommunicationIdentityOptions} [options={}] Options to configure the HTTP pipeline. + */ + public constructor( + connectionStringOrUrl: string, + credentialOrOptions?: KeyCredential | CommunicationIdentityOptions, + maybeOptions: CommunicationIdentityOptions = {} + ) { + const { url, credential } = parseClientArguments(connectionStringOrUrl, credentialOrOptions); + const options = isCommunicationIdentityOptions(credentialOrOptions) + ? credentialOrOptions + : maybeOptions; + const libInfo = `azsdk-js-communication-administration/${SDK_VERSION}`; + + if (!options.userAgentOptions) { + options.userAgentOptions = {}; + } + + if (options.userAgentOptions.userAgentPrefix) { + options.userAgentOptions.userAgentPrefix = `${options.userAgentOptions.userAgentPrefix} ${libInfo}`; + } else { + options.userAgentOptions.userAgentPrefix = libInfo; + } + + const internalPipelineOptions: InternalPipelineOptions = { + ...options, + ...{ + loggingOptions: { + logger: logger.info + } + } + }; + + const authPolicy = createCommunicationAccessKeyCredentialPolicy(credential); + const pipeline = createPipelineFromOptions(internalPipelineOptions, authPolicy); + + this.endpoint = url; + this.client = new GeneratedCommunicationIdentityClient(pipeline).communicationIdentity; + } + + /** + * Creates a scoped user token. + * + * @param {CommunicationUser} user The user whose tokens are being revoked. + * @param {TokenScope[]} scopes Scopes to include in the token. + * @param {OperationOptions} [options={}] Additional options for the request. + */ + public async issueToken( + user: CommunicationUser, + scopes: TokenScope[], + options: OperationOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan("CommunicationIdentity-issueToken", options); + try { + const { token, id, expiresOn, _response } = await this.client.issueToken( + this.endpoint, + user.communicationUserId, + scopes, + { ...operationOptionsToRequestOptionsBase(updatedOptions) } + ); + const results: CommunicationUserToken = { + token, + expiresOn, + user: { communicationUserId: id } + }; + return attachHttpResponse(results, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Revokes all data and tokens created for a user. + * + * @param {CommunicationUser} user The user whose tokens are being revoked. + * @param {Date} tokensValidFrom Tokens issued before this time will be revoked. + * @param {OperationOptions} [options={}] Additional options for the request. + */ + public async revokeTokens( + user: CommunicationUser, + tokensValidFrom: Date = new Date(), + options: OperationOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan("CommunicationIdentity-revokeTokens", options); + try { + const { _response } = await this.client.update(this.endpoint, user.communicationUserId, { + tokensValidFrom, + ...operationOptionsToRequestOptionsBase(updatedOptions) + }); + return attachHttpResponse({}, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Creates a single user. + * + * @param {OperationOptions} [options={}] Additional options for the request. + */ + public async createUser(options: OperationOptions = {}): Promise { + const { span, updatedOptions } = createSpan("CommunicationIdentity-createUser", options); + try { + const { id, _response } = await this.client.create(this.endpoint, { + ...operationOptionsToRequestOptionsBase(updatedOptions) + }); + const user: CommunicationUser = { communicationUserId: id }; + return attachHttpResponse(user, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Triggers revocation event for user and deletes all its data. + * + * @param {CommunicationUser} user The user being deleted. + * @param {OperationOptions} [options={}] Additional options for the request. + */ + public async deleteUser( + user: CommunicationUser, + options: OperationOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan("CommunicationIdentity-deleteUser", options); + try { + const { _response } = await this.client.deleteMethod( + this.endpoint, + user.communicationUserId, + { + ...operationOptionsToRequestOptionsBase(updatedOptions) + } + ); + return attachHttpResponse({}, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } +} + +export { CommunicationTokenRequest, CommunicationIdentityToken } from "./generated/src/models"; diff --git a/sdk/communication/communication-administration/src/communicationIdentity/constants.ts b/sdk/communication/communication-administration/src/communicationIdentity/constants.ts new file mode 100644 index 000000000000..d95eaa576529 --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/constants.ts @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { apiVersion } from "./generated/src/models/parameters"; + +export const SDK_VERSION: string = apiVersion.mapper.defaultValue; diff --git a/sdk/communication/communication-administration/src/communicationIdentity/generated/src/generatedCommunicationIdentityClient.ts b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/generatedCommunicationIdentityClient.ts new file mode 100644 index 000000000000..c359cfc5a5b5 --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/generatedCommunicationIdentityClient.ts @@ -0,0 +1,39 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +import * as coreHttp from "@azure/core-http"; +import * as Models from "./models"; +import * as Mappers from "./models/mappers"; +import * as operations from "./operations"; +import { GeneratedCommunicationIdentityClientContext } from "./generatedCommunicationIdentityClientContext"; + +class GeneratedCommunicationIdentityClient extends GeneratedCommunicationIdentityClientContext { + // Operation groups + communicationIdentity: operations.CommunicationIdentityOperations; + + /** + * Initializes a new instance of the GeneratedCommunicationIdentityClient class. + * @param [options] The parameter options + */ + constructor(options?: coreHttp.ServiceClientOptions) { + super(options); + this.communicationIdentity = new operations.CommunicationIdentityOperations(this); + } +} + +// Operation Specifications + +export { + GeneratedCommunicationIdentityClient, + GeneratedCommunicationIdentityClientContext, + Models as GeneratedCommunicationIdentityModels, + Mappers as GeneratedCommunicationIdentityMappers +}; +export * from "./operations"; diff --git a/sdk/communication/communication-administration/src/communicationIdentity/generated/src/generatedCommunicationIdentityClientContext.ts b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/generatedCommunicationIdentityClientContext.ts new file mode 100644 index 000000000000..9152ad2a290a --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/generatedCommunicationIdentityClientContext.ts @@ -0,0 +1,36 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +import * as coreHttp from "@azure/core-http"; + +const packageName = "azure-communication-administration-identity"; +const packageVersion = "1.0.0-beta.3"; + +export class GeneratedCommunicationIdentityClientContext extends coreHttp.ServiceClient { + /** + * Initializes a new instance of the GeneratedCommunicationIdentityClientContext class. + * @param [options] The parameter options + */ + constructor(options?: coreHttp.ServiceClientOptions) { + if (!options) { + options = {}; + } + + if (!options.userAgent) { + const defaultUserAgent = coreHttp.getDefaultUserAgentValue(); + options.userAgent = `${packageName}/${packageVersion} ${defaultUserAgent}`; + } + + super(undefined, options); + + this.baseUri = "{endpoint}"; + this.requestContentType = "application/json; charset=utf-8"; + } +} diff --git a/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/communicationIdentityOperationsMappers.ts b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/communicationIdentityOperationsMappers.ts new file mode 100644 index 000000000000..36b7cd50c0b3 --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/communicationIdentityOperationsMappers.ts @@ -0,0 +1,14 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. + */ + +export { + CommunicationIdentity, + CommunicationIdentityToken, + CommunicationIdentityUpdateRequest, + CommunicationTokenRequest +} from "../models/mappers"; diff --git a/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/index.ts b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/index.ts new file mode 100644 index 000000000000..86d8f18d964b --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/index.ts @@ -0,0 +1,107 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. + */ + +import * as coreHttp from "@azure/core-http"; + +/** + * A communication identity. + */ +export interface CommunicationIdentity { + /** + * Identifier of the identity. + */ + id: string; +} + +/** + * An interface representing CommunicationIdentityUpdateRequest. + */ +export interface CommunicationIdentityUpdateRequest { + /** + * All tokens that are issued prior to this time will be revoked. + */ + tokensValidFrom?: Date; +} + +/** + * An interface representing CommunicationTokenRequest. + */ +export interface CommunicationTokenRequest { + /** + * List of scopes attached to the token. + */ + scopes: string[]; +} + +/** + * An interface representing CommunicationIdentityToken. + */ +export interface CommunicationIdentityToken { + /** + * Identifier of the identity owning the token. + */ + id: string; + /** + * The token issued for the identity. + */ + token: string; + /** + * The expiry time of the token. + */ + expiresOn: Date; +} + +/** + * Optional Parameters. + */ +export interface CommunicationIdentityUpdateOptionalParams extends coreHttp.RequestOptionsBase { + /** + * All tokens that are issued prior to this time will be revoked. + */ + tokensValidFrom?: Date; +} + +/** + * Contains response data for the create operation. + */ +export type CommunicationIdentityCreateResponse = CommunicationIdentity & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: CommunicationIdentity; + }; +}; + +/** + * Contains response data for the issueToken operation. + */ +export type CommunicationIdentityIssueTokenResponse = CommunicationIdentityToken & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: CommunicationIdentityToken; + }; +}; diff --git a/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/mappers.ts b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/mappers.ts new file mode 100644 index 000000000000..dbcc264adfac --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/mappers.ts @@ -0,0 +1,95 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. + */ + +import * as coreHttp from "@azure/core-http"; + +export const CommunicationIdentity: coreHttp.CompositeMapper = { + serializedName: "CommunicationIdentity", + type: { + name: "Composite", + className: "CommunicationIdentity", + modelProperties: { + id: { + required: true, + serializedName: "id", + type: { + name: "String" + } + } + } + } +}; + +export const CommunicationIdentityUpdateRequest: coreHttp.CompositeMapper = { + serializedName: "CommunicationIdentityUpdateRequest", + type: { + name: "Composite", + className: "CommunicationIdentityUpdateRequest", + modelProperties: { + tokensValidFrom: { + serializedName: "tokensValidFrom", + type: { + name: "DateTime" + } + } + } + } +}; + +export const CommunicationTokenRequest: coreHttp.CompositeMapper = { + serializedName: "CommunicationTokenRequest", + type: { + name: "Composite", + className: "CommunicationTokenRequest", + modelProperties: { + scopes: { + required: true, + serializedName: "scopes", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; + +export const CommunicationIdentityToken: coreHttp.CompositeMapper = { + serializedName: "CommunicationIdentityToken", + type: { + name: "Composite", + className: "CommunicationIdentityToken", + modelProperties: { + id: { + required: true, + serializedName: "id", + type: { + name: "String" + } + }, + token: { + required: true, + serializedName: "token", + type: { + name: "String" + } + }, + expiresOn: { + required: true, + serializedName: "expiresOn", + type: { + name: "DateTime" + } + } + } + } +}; diff --git a/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/parameters.ts b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/parameters.ts new file mode 100644 index 000000000000..f7ac50fdfb24 --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/models/parameters.ts @@ -0,0 +1,46 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +import * as coreHttp from "@azure/core-http"; + +export const apiVersion: coreHttp.OperationQueryParameter = { + parameterPath: "apiVersion", + mapper: { + required: true, + isConstant: true, + serializedName: "api-version", + defaultValue: "2020-07-20-preview2", + type: { + name: "String" + } + } +}; +export const endpoint: coreHttp.OperationURLParameter = { + parameterPath: "endpoint", + mapper: { + required: true, + serializedName: "endpoint", + defaultValue: "", + type: { + name: "String" + } + }, + skipEncoding: true +}; +export const id: coreHttp.OperationURLParameter = { + parameterPath: "id", + mapper: { + required: true, + serializedName: "id", + type: { + name: "String" + } + } +}; diff --git a/sdk/communication/communication-administration/src/communicationIdentity/generated/src/operations/communicationIdentityOperations.ts b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/operations/communicationIdentityOperations.ts new file mode 100644 index 000000000000..a033787129b6 --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/operations/communicationIdentityOperations.ts @@ -0,0 +1,296 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +import * as coreHttp from "@azure/core-http"; +import * as Models from "../models"; +import * as Mappers from "../models/communicationIdentityOperationsMappers"; +import * as Parameters from "../models/parameters"; +import { GeneratedCommunicationIdentityClientContext } from "../generatedCommunicationIdentityClientContext"; + +/** Class representing a CommunicationIdentityOperations. */ +export class CommunicationIdentityOperations { + private readonly client: GeneratedCommunicationIdentityClientContext; + + /** + * Create a CommunicationIdentityOperations. + * @param {GeneratedCommunicationIdentityClientContext} client Reference to the service client. + */ + constructor(client: GeneratedCommunicationIdentityClientContext) { + this.client = client; + } + + /** + * @summary Create a new identity. + * @param endpoint Auth and Identity endpoint + * @param [options] The optional parameters + * @returns Promise + */ + create( + endpoint: string, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param endpoint Auth and Identity endpoint + * @param callback The callback + */ + create(endpoint: string, callback: coreHttp.ServiceCallback): void; + /** + * @param endpoint Auth and Identity endpoint + * @param options The optional parameters + * @param callback The callback + */ + create( + endpoint: string, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + create( + endpoint: string, + options?: coreHttp.RequestOptionsBase | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + endpoint, + options + }, + createOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Delete the identity, revoke all tokens of the identity and delete all associated data. + * @param endpoint Auth and Identity endpoint + * @param id Identifier of the identity to be deleted. + * @param [options] The optional parameters + * @returns Promise + */ + deleteMethod( + endpoint: string, + id: string, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param endpoint Auth and Identity endpoint + * @param id Identifier of the identity to be deleted. + * @param callback The callback + */ + deleteMethod(endpoint: string, id: string, callback: coreHttp.ServiceCallback): void; + /** + * @param endpoint Auth and Identity endpoint + * @param id Identifier of the identity to be deleted. + * @param options The optional parameters + * @param callback The callback + */ + deleteMethod( + endpoint: string, + id: string, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + deleteMethod( + endpoint: string, + id: string, + options?: coreHttp.RequestOptionsBase | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + endpoint, + id, + options + }, + deleteMethodOperationSpec, + callback + ); + } + + /** + * @summary Update an Identity. + * @param endpoint Auth and Identity endpoint + * @param id Identifier of the identity. + * @param [options] The optional parameters + * @returns Promise + */ + update( + endpoint: string, + id: string, + options?: Models.CommunicationIdentityUpdateOptionalParams + ): Promise; + /** + * @param endpoint Auth and Identity endpoint + * @param id Identifier of the identity. + * @param callback The callback + */ + update(endpoint: string, id: string, callback: coreHttp.ServiceCallback): void; + /** + * @param endpoint Auth and Identity endpoint + * @param id Identifier of the identity. + * @param options The optional parameters + * @param callback The callback + */ + update( + endpoint: string, + id: string, + options: Models.CommunicationIdentityUpdateOptionalParams, + callback: coreHttp.ServiceCallback + ): void; + update( + endpoint: string, + id: string, + options?: Models.CommunicationIdentityUpdateOptionalParams | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + endpoint, + id, + options + }, + updateOperationSpec, + callback + ); + } + + /** + * @summary Generate a new token for an identity. + * @param endpoint Auth and Identity endpoint + * @param id Identifier of the identity to issue token for. + * @param scopes List of scopes attached to the token. + * @param [options] The optional parameters + * @returns Promise + */ + issueToken( + endpoint: string, + id: string, + scopes: string[], + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param endpoint Auth and Identity endpoint + * @param id Identifier of the identity to issue token for. + * @param scopes List of scopes attached to the token. + * @param callback The callback + */ + issueToken( + endpoint: string, + id: string, + scopes: string[], + callback: coreHttp.ServiceCallback + ): void; + /** + * @param endpoint Auth and Identity endpoint + * @param id Identifier of the identity to issue token for. + * @param scopes List of scopes attached to the token. + * @param options The optional parameters + * @param callback The callback + */ + issueToken( + endpoint: string, + id: string, + scopes: string[], + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + issueToken( + endpoint: string, + id: string, + scopes: string[], + options?: + | coreHttp.RequestOptionsBase + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + endpoint, + id, + scopes, + options + }, + issueTokenOperationSpec, + callback + ) as Promise; + } +} + +// Operation Specifications +const serializer = new coreHttp.Serializer(Mappers); +const createOperationSpec: coreHttp.OperationSpec = { + httpMethod: "POST", + path: "identities", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.apiVersion], + responses: { + 200: { + bodyMapper: Mappers.CommunicationIdentity + }, + default: {} + }, + serializer +}; + +const deleteMethodOperationSpec: coreHttp.OperationSpec = { + httpMethod: "DELETE", + path: "identities/{id}", + urlParameters: [Parameters.endpoint, Parameters.id], + queryParameters: [Parameters.apiVersion], + responses: { + 204: {}, + default: {} + }, + serializer +}; + +const updateOperationSpec: coreHttp.OperationSpec = { + httpMethod: "PATCH", + path: "identities/{id}", + urlParameters: [Parameters.endpoint, Parameters.id], + queryParameters: [Parameters.apiVersion], + requestBody: { + parameterPath: { + tokensValidFrom: ["options", "tokensValidFrom"] + }, + mapper: { + ...Mappers.CommunicationIdentityUpdateRequest, + required: true + } + }, + contentType: "application/merge-patch+json", + responses: { + 204: {}, + default: {} + }, + serializer +}; + +const issueTokenOperationSpec: coreHttp.OperationSpec = { + httpMethod: "POST", + path: "identities/{id}/token", + urlParameters: [Parameters.endpoint, Parameters.id], + queryParameters: [Parameters.apiVersion], + requestBody: { + parameterPath: { + scopes: "scopes" + }, + mapper: { + ...Mappers.CommunicationTokenRequest, + required: true + } + }, + responses: { + 200: { + bodyMapper: Mappers.CommunicationIdentityToken + }, + default: {} + }, + serializer +}; diff --git a/sdk/communication/communication-administration/src/communicationIdentity/generated/src/operations/index.ts b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/operations/index.ts new file mode 100644 index 000000000000..bda865874f7c --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/generated/src/operations/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +export * from "./communicationIdentityOperations"; diff --git a/sdk/communication/communication-administration/src/communicationIdentity/models.ts b/sdk/communication/communication-administration/src/communicationIdentity/models.ts new file mode 100644 index 000000000000..f21babf19491 --- /dev/null +++ b/sdk/communication/communication-administration/src/communicationIdentity/models.ts @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { PipelineOptions } from "@azure/core-http"; +import { CommunicationUser } from "@azure/communication-common"; +import { CommunicationIdentityToken } from "./generated/src/models"; +import { WithResponse } from "../common/models"; + +/** + * Represents the scope of the token. + */ +export type TokenScope = "chat" | "voip" | "pstn"; + +/** + * Client options used to configure the CommunicationIdentity API requests. + */ +export interface CommunicationIdentityOptions extends PipelineOptions {} + +/** + * The issued token and the user it was issued for. + */ +export interface CommunicationUserToken + extends Pick { + /** + * Represents the user the token was issued for + */ + user: CommunicationUser; +} + +/** + * Represents the response from creating a user + */ +export type CreateUserResponse = WithResponse; + +/** + * Represents the response from issuing a token + */ +export type IssueTokenResponse = WithResponse; diff --git a/sdk/communication/communication-administration/src/index.ts b/sdk/communication/communication-administration/src/index.ts new file mode 100644 index 000000000000..8e8f01312b91 --- /dev/null +++ b/sdk/communication/communication-administration/src/index.ts @@ -0,0 +1,8 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +export * from "./common/models"; +export * from "./communicationIdentity/communicationIdentityClient"; +export * from "./communicationIdentity/models"; +export * from "./phoneNumber/phoneNumberAdministrationClient"; +export * from "./phoneNumber/models"; diff --git a/sdk/communication/communication-administration/src/phoneNumber/constants.ts b/sdk/communication/communication-administration/src/phoneNumber/constants.ts new file mode 100644 index 000000000000..d95eaa576529 --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/constants.ts @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { apiVersion } from "./generated/src/models/parameters"; + +export const SDK_VERSION: string = apiVersion.mapper.defaultValue; diff --git a/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/index.ts b/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/index.ts new file mode 100644 index 000000000000..f517458aee17 --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/index.ts @@ -0,0 +1,1209 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. + */ + +import * as coreHttp from "@azure/core-http"; + +/** + * Represents an acquired phone number. + */ +export interface AcquiredPhoneNumber { + /** + * String of the E.164 format of the phone number + */ + phoneNumber: string; + /** + * The set of all acquired capabilities of the phone number. + */ + acquiredCapabilities: Capability[]; + /** + * The set of all available capabilities that can be acquired for this phone number. + */ + availableCapabilities: Capability[]; + /** + * The assignment status of the phone number. Conveys what type of entity the number is assigned + * to. Possible values include: 'Unassigned', 'Unknown', 'UserAssigned', 'ConferenceAssigned', + * 'FirstPartyAppAssigned', 'ThirdPartyAppAssigned' + */ + assignmentStatus?: AssignmentStatus; + /** + * The name of the place of the phone number. + */ + placeName?: string; + /** + * The activation state of the phone number. Can be "Activated", "AssignmentPending", + * "AssignmentFailed", "UpdatePending", "UpdateFailed". Possible values include: 'Activated', + * 'AssignmentPending', 'AssignmentFailed', 'UpdatePending', 'UpdateFailed' + */ + activationState?: ActivationState; +} + +/** + * A wrapper of list of phone numbers + */ +export interface AcquiredPhoneNumbers { + /** + * Represents a list of phone numbers + */ + phoneNumbers?: AcquiredPhoneNumber[]; + /** + * Represents the URL link to the next page + */ + nextLink?: string; +} + +/** + * Represents a service error response body. + */ +export interface ErrorBody { + /** + * The error code in the error response. + */ + code?: string; + /** + * The error message in the error response. + */ + message?: string; +} + +/** + * Represents a service error response. + */ +export interface ErrorResponse { + error?: ErrorBody; +} + +/** + * Represents a location options parameter, used for fetching area codes. + */ +export interface LocationOptionsQuery { + /** + * Represents the location option label id, returned from the GetLocationOptions API. + */ + labelId?: string; + /** + * Represents the location options value, returned from the GetLocationOptions API. + */ + optionsValue?: string; +} + +/** + * Represents a list of location option queries, used for fetching area codes. + */ +export interface LocationOptionsQueries { + /** + * Represents the underlying list of countries. + */ + locationOptions?: LocationOptionsQuery[]; +} + +/** + * Represents a list of area codes. + */ +export interface AreaCodes { + /** + * Represents the list of primary area codes. + */ + primaryAreaCodes?: string[]; + /** + * Represents the list of secondary area codes. + */ + secondaryAreaCodes?: string[]; + /** + * Represents the URL link to the next page + */ + nextLink?: string; +} + +/** + * Represents an individual number capabilities update request + */ +export interface NumberUpdateCapabilities { + /** + * Capabilities to be added to a phone number + */ + add?: Capability[]; + /** + * Capabilities to be removed from a phone number + */ + remove?: Capability[]; +} + +/** + * Response for getting a phone number update capabilities. + */ +export interface UpdatePhoneNumberCapabilitiesResponse { + /** + * The id of the phone number capabilities update + */ + capabilitiesUpdateId?: string; + /** + * The time the capabilities update was created + */ + createdAt?: Date; + /** + * Status of the capabilities update. Possible values include: 'Pending', 'InProgress', + * 'Complete', 'Error' + */ + capabilitiesUpdateStatus?: CapabilitiesUpdateStatus; + /** + * The capabilities update for each of a set of phone numbers. + */ + phoneNumberCapabilitiesUpdates?: { [propertyName: string]: NumberUpdateCapabilities }; +} + +/** + * Represents a numbers capabilities update request + */ +export interface UpdateNumberCapabilitiesRequest { + /** + * The map of phone numbers to the capabilities update applied to the phone number. + */ + phoneNumberCapabilitiesUpdate: { [propertyName: string]: NumberUpdateCapabilities }; +} + +/** + * Represents a number capability update response. + */ +export interface UpdateNumberCapabilitiesResponse { + /** + * The capabilities id + */ + capabilitiesUpdateId: string; +} + +/** + * Represents a country. + */ +export interface PhoneNumberCountry { + /** + * Represents the name of the country. + */ + localizedName: string; + /** + * Represents the abbreviated name of the country. + */ + countryCode: string; +} + +/** + * Represents a wrapper around a list of countries. + */ +export interface PhoneNumberCountries { + /** + * Represents the underlying list of countries. + */ + countries?: PhoneNumberCountry[]; + /** + * Represents the URL link to the next page + */ + nextLink?: string; +} + +/** + * The phone number wrapper representing a number configuration request + */ +export interface NumberConfigurationPhoneNumber { + /** + * The phone number in the E.164 format + */ + phoneNumber: string; +} + +/** + * Definition for pstn number configuration + */ +export interface PstnConfiguration { + /** + * The webhook URL on the phone number configuration. + */ + callbackUrl: string; + /** + * The application id of the application to which to configure + */ + applicationId?: string; +} + +/** + * Definition for number configuration + */ +export interface NumberConfigurationResponse { + pstnConfiguration: PstnConfiguration; +} + +/** + * Definition for number configuration + */ +export interface NumberConfiguration { + pstnConfiguration: PstnConfiguration; + /** + * The phone number to configure + */ + phoneNumber: string; +} + +/** + * Represents carrier details. + */ +export interface CarrierDetails { + /** + * Name of carrier details + */ + name?: string; + /** + * Display name of carrier details + */ + localizedName?: string; +} + +/** + * Represents a wrapper of rate information + */ +export interface RateInformation { + /** + * The monthly rate of a phone plan group + */ + monthlyRate?: number; + /** + * The currency of a phone plan group. Possible values include: 'USD' + */ + currencyType?: CurrencyType; + /** + * The error code of a phone plan group + */ + rateErrorMessage?: string; +} + +/** + * Represents a plan group. + */ +export interface PhonePlanGroup { + /** + * The id of the plan group + */ + phonePlanGroupId: string; + /** + * The phone number type of the plan group. Possible values include: 'Unknown', 'Geographic', + * 'TollFree', 'Indirect' + */ + phoneNumberType?: PhoneNumberType; + /** + * The name of the plan group. + */ + localizedName: string; + /** + * The description of the plan group. + */ + localizedDescription: string; + carrierDetails?: CarrierDetails; + rateInformation?: RateInformation; +} + +/** + * Represents a wrapper of list of plan groups. + */ +export interface PhonePlanGroups { + /** + * The underlying list of phone plan groups. + */ + phonePlanGroups?: PhonePlanGroup[]; + /** + * Represents the URL link to the next page + */ + nextLink?: string; +} + +/** + * Represents a phone plan. + */ +export interface PhonePlan { + /** + * The phone plan id + */ + phonePlanId: string; + /** + * The name of the phone plan + */ + localizedName: string; + /** + * The location type of the phone plan. Possible values include: 'CivicAddress', 'NotRequired', + * 'Selection' + */ + locationType: LocationType; + /** + * The list of available area codes in the phone plan. + */ + areaCodes?: string[]; + /** + * Capabilities of the phone plan. + */ + capabilities?: Capability[]; + /** + * The maximum number of phone numbers one can acquire in a search in this phone plan. + */ + maximumSearchSize?: number; +} + +/** + * Represents a wrapper around a list of countries. + */ +export interface PhonePlansResponse { + /** + * Represents the underlying list of phone plans. + */ + phonePlans?: PhonePlan[]; + /** + * Represents the URL link to the next page + */ + nextLink?: string; +} + +/** + * Represents a location options. + */ +export interface LocationOptions { + /** + * The label id of the location. + */ + labelId?: string; + /** + * The display name of the location. + */ + labelName?: string; + /** + * The underlying location option details. + */ + options?: LocationOptionsDetails[]; +} + +/** + * Represents location options details. + */ +export interface LocationOptionsDetails { + /** + * The name of the location options + */ + name?: string; + /** + * The abbreviated name of the location options + */ + value?: string; + /** + * The underlying location options + */ + locationOptions?: LocationOptions[]; +} + +/** + * Represents a wrapper around a list of location options. + */ +export interface LocationOptionsResponse { + locationOptions?: LocationOptions; +} + +/** + * An interface representing PhoneNumberReleaseDetails. + */ +export interface PhoneNumberReleaseDetails { + /** + * The release status of a phone number. Possible values include: 'Pending', 'Success', 'Error', + * 'InProgress' + */ + status?: PhoneNumberReleaseStatus; + /** + * The error code in the case the status is error. + */ + errorCode?: number; +} + +/** + * Represents a release + */ +export interface PhoneNumberRelease { + /** + * The id of the release. + */ + releaseId?: string; + /** + * The creation time of the release. + */ + createdAt?: Date; + /** + * The release status. Possible values include: 'Pending', 'InProgress', 'Complete', 'Failed', + * 'Expired' + */ + status?: ReleaseStatus; + /** + * The underlying error message of a release. + */ + errorMessage?: string; + /** + * The list of phone numbers in the release, mapped to its individual statuses. + */ + phoneNumberReleaseStatusDetails?: { [propertyName: string]: PhoneNumberReleaseDetails }; +} + +/** + * Represents a release request. + */ +export interface ReleaseRequest { + /** + * The list of phone numbers in the release request. + */ + phoneNumbers: string[]; +} + +/** + * Represents a release response. + */ +export interface ReleaseResponse { + /** + * The release id of a created release. + */ + releaseId: string; +} + +/** + * Represents a phone number entity, as part of the response when calling get all searches or + * releases. + */ +export interface PhoneNumberEntity { + /** + * The id of the entity. It is the search id of a search. It is the release id of a release. + */ + id?: string; + /** + * Date and time the entity is created. + */ + createdAt?: Date; + /** + * Name of the entity. + */ + displayName?: string; + /** + * Quantity of requested phone numbers in the entity. + */ + quantity?: number; + /** + * Quantity of acquired phone numbers in the entity. + */ + quantityObtained?: number; + /** + * Status of the entity. + */ + status?: string; + /** + * The Firm Order Confirmation date of the phone number entity. + */ + focDate?: Date; +} + +/** + * Represents a list of searches or releases, as part of the response when fetching all searches or + * releases. + */ +export interface PhoneNumberEntities { + /** + * The underlying list of entities. + */ + entities?: PhoneNumberEntity[]; + /** + * Represents the URL link to the next page + */ + nextLink?: string; +} + +/** + * Represents a phone number search + */ +export interface PhoneNumberSearch { + /** + * The id of the search. + */ + searchId?: string; + /** + * The name of the search. + */ + displayName?: string; + /** + * The creation time of the search. + */ + createdAt?: Date; + /** + * The description of the search. + */ + description?: string; + /** + * The phone plan ids of the search. + */ + phonePlanIds?: string[]; + /** + * The area code of the search. + */ + areaCode?: string; + /** + * The quantity of phone numbers in the search. + */ + quantity?: number; + /** + * The location options of the search. + */ + locationOptions?: LocationOptionsDetails[]; + /** + * The status of the search. Possible values include: 'Pending', 'InProgress', 'Reserved', + * 'Expired', 'Expiring', 'Completing', 'Refreshing', 'Success', 'Manual', 'Cancelled', + * 'Cancelling', 'Error', 'PurchasePending' + */ + status?: SearchStatus; + /** + * The list of phone numbers in the search, in the case the status is reserved or success. + */ + phoneNumbers?: string[]; + /** + * The date that search expires and the numbers become available. + */ + reservationExpiryDate?: Date; + /** + * The error code of the search. + */ + errorCode?: number; +} + +/** + * Represents a search creation option. + */ +export interface CreateSearchOptions { + /** + * Display name of the search. + */ + displayName: string; + /** + * Description of the search. + */ + description: string; + /** + * The plan subtype ids from which to create the search. + */ + phonePlanIds: string[]; + /** + * The area code from which to create the search. + */ + areaCode: string; + /** + * The quantity of phone numbers to request. + */ + quantity?: number; + /** + * The location options of the search. + */ + locationOptions?: LocationOptionsDetails[]; +} + +/** + * Represents a search creation response. + */ +export interface CreateSearchResponse { + /** + * The search id of the search that was created. + */ + searchId: string; +} + +/** + * Optional Parameters. + */ +export interface PhoneNumberAdministrationGetAllPhoneNumbersOptionalParams + extends coreHttp.RequestOptionsBase { + /** + * A language-locale pairing which will be used to localize the names of countries. Default + * value: 'en-US'. + */ + locale?: string; + /** + * An optional parameter for how many entries to skip, for pagination purposes. Default value: 0. + */ + skip?: number; + /** + * An optional parameter for how many entries to return, for pagination purposes. Default value: + * 100. + */ + take?: number; +} + +/** + * Optional Parameters. + */ +export interface PhoneNumberAdministrationGetAllAreaCodesOptionalParams + extends coreHttp.RequestOptionsBase { + /** + * Represents the underlying list of countries. + */ + locationOptions?: LocationOptionsQuery[]; +} + +/** + * Optional Parameters. + */ +export interface PhoneNumberAdministrationGetAllSupportedCountriesOptionalParams + extends coreHttp.RequestOptionsBase { + /** + * A language-locale pairing which will be used to localize the names of countries. Default + * value: 'en-US'. + */ + locale?: string; + /** + * An optional parameter for how many entries to skip, for pagination purposes. Default value: 0. + */ + skip?: number; + /** + * An optional parameter for how many entries to return, for pagination purposes. Default value: + * 100. + */ + take?: number; +} + +/** + * Optional Parameters. + */ +export interface PhoneNumberAdministrationGetPhonePlanGroupsOptionalParams + extends coreHttp.RequestOptionsBase { + /** + * A language-locale pairing which will be used to localize the names of countries. Default + * value: 'en-US'. + */ + locale?: string; + /** + * Default value: false. + */ + includeRateInformation?: boolean; + /** + * An optional parameter for how many entries to skip, for pagination purposes. Default value: 0. + */ + skip?: number; + /** + * An optional parameter for how many entries to return, for pagination purposes. Default value: + * 100. + */ + take?: number; +} + +/** + * Optional Parameters. + */ +export interface PhoneNumberAdministrationGetPhonePlansOptionalParams + extends coreHttp.RequestOptionsBase { + /** + * A language-locale pairing which will be used to localize the names of countries. Default + * value: 'en-US'. + */ + locale?: string; + /** + * An optional parameter for how many entries to skip, for pagination purposes. Default value: 0. + */ + skip?: number; + /** + * An optional parameter for how many entries to return, for pagination purposes. Default value: + * 100. + */ + take?: number; +} + +/** + * Optional Parameters. + */ +export interface PhoneNumberAdministrationGetPhonePlanLocationOptionsOptionalParams + extends coreHttp.RequestOptionsBase { + /** + * A language-locale pairing which will be used to localize the names of countries. Default + * value: 'en-US'. + */ + locale?: string; +} + +/** + * Optional Parameters. + */ +export interface PhoneNumberAdministrationGetAllReleasesOptionalParams + extends coreHttp.RequestOptionsBase { + /** + * An optional parameter for how many entries to skip, for pagination purposes. Default value: 0. + */ + skip?: number; + /** + * An optional parameter for how many entries to return, for pagination purposes. Default value: + * 100. + */ + take?: number; +} + +/** + * Optional Parameters. + */ +export interface PhoneNumberAdministrationCreateSearchOptionalParams + extends coreHttp.RequestOptionsBase { + /** + * The quantity of phone numbers to request. + */ + quantity?: number; + /** + * The location options of the search. + */ + locationOptions?: LocationOptionsDetails[]; +} + +/** + * Optional Parameters. + */ +export interface PhoneNumberAdministrationGetAllSearchesOptionalParams + extends coreHttp.RequestOptionsBase { + /** + * An optional parameter for how many entries to skip, for pagination purposes. Default value: 0. + */ + skip?: number; + /** + * An optional parameter for how many entries to return, for pagination purposes. Default value: + * 100. + */ + take?: number; +} + +/** + * Defines values for Capability. + * Possible values include: 'UserAssignment', 'FirstPartyVoiceAppAssignment', + * 'ConferenceAssignment', 'P2PSmsEnabled', 'Geographic', 'NonGeographic', 'TollCalling', + * 'TollFreeCalling', 'Premium', 'P2PSmsCapable', 'A2PSmsCapable', 'A2PSmsEnabled', 'Calling', + * 'TollFree', 'FirstPartyAppAssignment', 'ThirdPartyAppAssignment', 'Azure', 'Office365', + * 'InboundCalling', 'OutboundCalling', 'InboundA2PSms', 'OutboundA2PSms', 'InboundP2PSms', + * 'OutboundP2PSms' + * @readonly + * @enum {string} + */ +export type Capability = + | "UserAssignment" + | "FirstPartyVoiceAppAssignment" + | "ConferenceAssignment" + | "P2PSmsEnabled" + | "Geographic" + | "NonGeographic" + | "TollCalling" + | "TollFreeCalling" + | "Premium" + | "P2PSmsCapable" + | "A2PSmsCapable" + | "A2PSmsEnabled" + | "Calling" + | "TollFree" + | "FirstPartyAppAssignment" + | "ThirdPartyAppAssignment" + | "Azure" + | "Office365" + | "InboundCalling" + | "OutboundCalling" + | "InboundA2PSms" + | "OutboundA2PSms" + | "InboundP2PSms" + | "OutboundP2PSms"; + +/** + * Defines values for AssignmentStatus. + * Possible values include: 'Unassigned', 'Unknown', 'UserAssigned', 'ConferenceAssigned', + * 'FirstPartyAppAssigned', 'ThirdPartyAppAssigned' + * @readonly + * @enum {string} + */ +export type AssignmentStatus = + | "Unassigned" + | "Unknown" + | "UserAssigned" + | "ConferenceAssigned" + | "FirstPartyAppAssigned" + | "ThirdPartyAppAssigned"; + +/** + * Defines values for ActivationState. + * Possible values include: 'Activated', 'AssignmentPending', 'AssignmentFailed', 'UpdatePending', + * 'UpdateFailed' + * @readonly + * @enum {string} + */ +export type ActivationState = + | "Activated" + | "AssignmentPending" + | "AssignmentFailed" + | "UpdatePending" + | "UpdateFailed"; + +/** + * Defines values for CapabilitiesUpdateStatus. + * Possible values include: 'Pending', 'InProgress', 'Complete', 'Error' + * @readonly + * @enum {string} + */ +export type CapabilitiesUpdateStatus = "Pending" | "InProgress" | "Complete" | "Error"; + +/** + * Defines values for CurrencyType. + * Possible values include: 'USD' + * @readonly + * @enum {string} + */ +export type CurrencyType = "USD"; + +/** + * Defines values for PhoneNumberType. + * Possible values include: 'Unknown', 'Geographic', 'TollFree', 'Indirect' + * @readonly + * @enum {string} + */ +export type PhoneNumberType = "Unknown" | "Geographic" | "TollFree" | "Indirect"; + +/** + * Defines values for LocationType. + * Possible values include: 'CivicAddress', 'NotRequired', 'Selection' + * @readonly + * @enum {string} + */ +export type LocationType = "CivicAddress" | "NotRequired" | "Selection"; + +/** + * Defines values for PhoneNumberReleaseStatus. + * Possible values include: 'Pending', 'Success', 'Error', 'InProgress' + * @readonly + * @enum {string} + */ +export type PhoneNumberReleaseStatus = "Pending" | "Success" | "Error" | "InProgress"; + +/** + * Defines values for ReleaseStatus. + * Possible values include: 'Pending', 'InProgress', 'Complete', 'Failed', 'Expired' + * @readonly + * @enum {string} + */ +export type ReleaseStatus = "Pending" | "InProgress" | "Complete" | "Failed" | "Expired"; + +/** + * Defines values for SearchStatus. + * Possible values include: 'Pending', 'InProgress', 'Reserved', 'Expired', 'Expiring', + * 'Completing', 'Refreshing', 'Success', 'Manual', 'Cancelled', 'Cancelling', 'Error', + * 'PurchasePending' + * @readonly + * @enum {string} + */ +export type SearchStatus = + | "Pending" + | "InProgress" + | "Reserved" + | "Expired" + | "Expiring" + | "Completing" + | "Refreshing" + | "Success" + | "Manual" + | "Cancelled" + | "Cancelling" + | "Error" + | "PurchasePending"; + +/** + * Contains response data for the getAllPhoneNumbers operation. + */ +export type PhoneNumberAdministrationGetAllPhoneNumbersResponse = AcquiredPhoneNumbers & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: AcquiredPhoneNumbers; + }; +}; + +/** + * Contains response data for the getAllAreaCodes operation. + */ +export type PhoneNumberAdministrationGetAllAreaCodesResponse = AreaCodes & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: AreaCodes; + }; +}; + +/** + * Contains response data for the getCapabilitiesUpdate operation. + */ +export type PhoneNumberAdministrationGetCapabilitiesUpdateResponse = UpdatePhoneNumberCapabilitiesResponse & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: UpdatePhoneNumberCapabilitiesResponse; + }; +}; + +/** + * Contains response data for the updateCapabilities operation. + */ +export type PhoneNumberAdministrationUpdateCapabilitiesResponse = UpdateNumberCapabilitiesResponse & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: UpdateNumberCapabilitiesResponse; + }; +}; + +/** + * Contains response data for the getAllSupportedCountries operation. + */ +export type PhoneNumberAdministrationGetAllSupportedCountriesResponse = PhoneNumberCountries & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: PhoneNumberCountries; + }; +}; + +/** + * Contains response data for the getNumberConfiguration operation. + */ +export type PhoneNumberAdministrationGetNumberConfigurationResponse = NumberConfigurationResponse & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: NumberConfigurationResponse; + }; +}; + +/** + * Contains response data for the getPhonePlanGroups operation. + */ +export type PhoneNumberAdministrationGetPhonePlanGroupsResponse = PhonePlanGroups & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: PhonePlanGroups; + }; +}; + +/** + * Contains response data for the getPhonePlans operation. + */ +export type PhoneNumberAdministrationGetPhonePlansResponse = PhonePlansResponse & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: PhonePlansResponse; + }; +}; + +/** + * Contains response data for the getPhonePlanLocationOptions operation. + */ +export type PhoneNumberAdministrationGetPhonePlanLocationOptionsResponse = LocationOptionsResponse & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: LocationOptionsResponse; + }; +}; + +/** + * Contains response data for the getReleaseById operation. + */ +export type PhoneNumberAdministrationGetReleaseByIdResponse = PhoneNumberRelease & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: PhoneNumberRelease; + }; +}; + +/** + * Contains response data for the releasePhoneNumbers operation. + */ +export type PhoneNumberAdministrationReleasePhoneNumbersResponse = ReleaseResponse & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: ReleaseResponse; + }; +}; + +/** + * Contains response data for the getAllReleases operation. + */ +export type PhoneNumberAdministrationGetAllReleasesResponse = PhoneNumberEntities & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: PhoneNumberEntities; + }; +}; + +/** + * Contains response data for the getSearchById operation. + */ +export type PhoneNumberAdministrationGetSearchByIdResponse = PhoneNumberSearch & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: PhoneNumberSearch; + }; +}; + +/** + * Contains response data for the createSearch operation. + */ +export type PhoneNumberAdministrationCreateSearchResponse = CreateSearchResponse & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: CreateSearchResponse; + }; +}; + +/** + * Contains response data for the getAllSearches operation. + */ +export type PhoneNumberAdministrationGetAllSearchesResponse = PhoneNumberEntities & { + /** + * The underlying HTTP response. + */ + _response: coreHttp.HttpResponse & { + /** + * The response body as text (string format) + */ + bodyAsText: string; + + /** + * The response body as parsed JSON or XML + */ + parsedBody: PhoneNumberEntities; + }; +}; diff --git a/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/mappers.ts b/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/mappers.ts new file mode 100644 index 000000000000..63e25e7a7245 --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/mappers.ts @@ -0,0 +1,1132 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. + */ + +import * as coreHttp from "@azure/core-http"; + +export const AcquiredPhoneNumber: coreHttp.CompositeMapper = { + serializedName: "AcquiredPhoneNumber", + type: { + name: "Composite", + className: "AcquiredPhoneNumber", + modelProperties: { + phoneNumber: { + required: true, + serializedName: "phoneNumber", + type: { + name: "String" + } + }, + acquiredCapabilities: { + required: true, + serializedName: "acquiredCapabilities", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + availableCapabilities: { + required: true, + serializedName: "availableCapabilities", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + assignmentStatus: { + serializedName: "assignmentStatus", + type: { + name: "String" + } + }, + placeName: { + serializedName: "placeName", + type: { + name: "String" + } + }, + activationState: { + serializedName: "activationState", + type: { + name: "String" + } + } + } + } +}; + +export const AcquiredPhoneNumbers: coreHttp.CompositeMapper = { + serializedName: "AcquiredPhoneNumbers", + type: { + name: "Composite", + className: "AcquiredPhoneNumbers", + modelProperties: { + phoneNumbers: { + serializedName: "phoneNumbers", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "AcquiredPhoneNumber" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; + +export const ErrorBody: coreHttp.CompositeMapper = { + serializedName: "ErrorBody", + type: { + name: "Composite", + className: "ErrorBody", + modelProperties: { + code: { + serializedName: "code", + type: { + name: "String" + } + }, + message: { + serializedName: "message", + type: { + name: "String" + } + } + } + } +}; + +export const ErrorResponse: coreHttp.CompositeMapper = { + serializedName: "ErrorResponse", + type: { + name: "Composite", + className: "ErrorResponse", + modelProperties: { + error: { + serializedName: "error", + type: { + name: "Composite", + className: "ErrorBody" + } + } + } + } +}; + +export const LocationOptionsQuery: coreHttp.CompositeMapper = { + serializedName: "LocationOptionsQuery", + type: { + name: "Composite", + className: "LocationOptionsQuery", + modelProperties: { + labelId: { + serializedName: "labelId", + type: { + name: "String" + } + }, + optionsValue: { + serializedName: "optionsValue", + type: { + name: "String" + } + } + } + } +}; + +export const LocationOptionsQueries: coreHttp.CompositeMapper = { + serializedName: "LocationOptionsQueries", + type: { + name: "Composite", + className: "LocationOptionsQueries", + modelProperties: { + locationOptions: { + serializedName: "locationOptions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "LocationOptionsQuery" + } + } + } + } + } + } +}; + +export const AreaCodes: coreHttp.CompositeMapper = { + serializedName: "AreaCodes", + type: { + name: "Composite", + className: "AreaCodes", + modelProperties: { + primaryAreaCodes: { + serializedName: "primaryAreaCodes", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + secondaryAreaCodes: { + serializedName: "secondaryAreaCodes", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; + +export const NumberUpdateCapabilities: coreHttp.CompositeMapper = { + serializedName: "NumberUpdateCapabilities", + type: { + name: "Composite", + className: "NumberUpdateCapabilities", + modelProperties: { + add: { + serializedName: "add", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + remove: { + serializedName: "remove", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; + +export const UpdatePhoneNumberCapabilitiesResponse: coreHttp.CompositeMapper = { + serializedName: "UpdatePhoneNumberCapabilitiesResponse", + type: { + name: "Composite", + className: "UpdatePhoneNumberCapabilitiesResponse", + modelProperties: { + capabilitiesUpdateId: { + serializedName: "capabilitiesUpdateId", + type: { + name: "String" + } + }, + createdAt: { + serializedName: "createdAt", + type: { + name: "DateTime" + } + }, + capabilitiesUpdateStatus: { + serializedName: "capabilitiesUpdateStatus", + type: { + name: "String" + } + }, + phoneNumberCapabilitiesUpdates: { + serializedName: "phoneNumberCapabilitiesUpdates", + type: { + name: "Dictionary", + value: { + type: { + name: "Composite", + className: "NumberUpdateCapabilities" + } + } + } + } + } + } +}; + +export const UpdateNumberCapabilitiesRequest: coreHttp.CompositeMapper = { + serializedName: "UpdateNumberCapabilitiesRequest", + type: { + name: "Composite", + className: "UpdateNumberCapabilitiesRequest", + modelProperties: { + phoneNumberCapabilitiesUpdate: { + required: true, + serializedName: "phoneNumberCapabilitiesUpdate", + type: { + name: "Dictionary", + value: { + type: { + name: "Composite", + className: "NumberUpdateCapabilities" + } + } + } + } + } + } +}; + +export const UpdateNumberCapabilitiesResponse: coreHttp.CompositeMapper = { + serializedName: "UpdateNumberCapabilitiesResponse", + type: { + name: "Composite", + className: "UpdateNumberCapabilitiesResponse", + modelProperties: { + capabilitiesUpdateId: { + required: true, + serializedName: "capabilitiesUpdateId", + type: { + name: "String" + } + } + } + } +}; + +export const PhoneNumberCountry: coreHttp.CompositeMapper = { + serializedName: "PhoneNumberCountry", + type: { + name: "Composite", + className: "PhoneNumberCountry", + modelProperties: { + localizedName: { + required: true, + serializedName: "localizedName", + type: { + name: "String" + } + }, + countryCode: { + required: true, + serializedName: "countryCode", + type: { + name: "String" + } + } + } + } +}; + +export const PhoneNumberCountries: coreHttp.CompositeMapper = { + serializedName: "PhoneNumberCountries", + type: { + name: "Composite", + className: "PhoneNumberCountries", + modelProperties: { + countries: { + serializedName: "countries", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PhoneNumberCountry" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; + +export const NumberConfigurationPhoneNumber: coreHttp.CompositeMapper = { + serializedName: "NumberConfigurationPhoneNumber", + type: { + name: "Composite", + className: "NumberConfigurationPhoneNumber", + modelProperties: { + phoneNumber: { + required: true, + serializedName: "phoneNumber", + type: { + name: "String" + } + } + } + } +}; + +export const PstnConfiguration: coreHttp.CompositeMapper = { + serializedName: "PstnConfiguration", + type: { + name: "Composite", + className: "PstnConfiguration", + modelProperties: { + callbackUrl: { + required: true, + serializedName: "callbackUrl", + type: { + name: "String" + } + }, + applicationId: { + serializedName: "applicationId", + type: { + name: "String" + } + } + } + } +}; + +export const NumberConfigurationResponse: coreHttp.CompositeMapper = { + serializedName: "NumberConfigurationResponse", + type: { + name: "Composite", + className: "NumberConfigurationResponse", + modelProperties: { + pstnConfiguration: { + required: true, + serializedName: "pstnConfiguration", + type: { + name: "Composite", + className: "PstnConfiguration" + } + } + } + } +}; + +export const NumberConfiguration: coreHttp.CompositeMapper = { + serializedName: "NumberConfiguration", + type: { + name: "Composite", + className: "NumberConfiguration", + modelProperties: { + pstnConfiguration: { + required: true, + serializedName: "pstnConfiguration", + type: { + name: "Composite", + className: "PstnConfiguration" + } + }, + phoneNumber: { + required: true, + serializedName: "phoneNumber", + type: { + name: "String" + } + } + } + } +}; + +export const CarrierDetails: coreHttp.CompositeMapper = { + serializedName: "CarrierDetails", + type: { + name: "Composite", + className: "CarrierDetails", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String" + } + }, + localizedName: { + serializedName: "localizedName", + type: { + name: "String" + } + } + } + } +}; + +export const RateInformation: coreHttp.CompositeMapper = { + serializedName: "RateInformation", + type: { + name: "Composite", + className: "RateInformation", + modelProperties: { + monthlyRate: { + serializedName: "monthlyRate", + type: { + name: "Number" + } + }, + currencyType: { + serializedName: "currencyType", + type: { + name: "String" + } + }, + rateErrorMessage: { + serializedName: "rateErrorMessage", + type: { + name: "String" + } + } + } + } +}; + +export const PhonePlanGroup: coreHttp.CompositeMapper = { + serializedName: "PhonePlanGroup", + type: { + name: "Composite", + className: "PhonePlanGroup", + modelProperties: { + phonePlanGroupId: { + required: true, + serializedName: "phonePlanGroupId", + type: { + name: "String" + } + }, + phoneNumberType: { + serializedName: "phoneNumberType", + type: { + name: "String" + } + }, + localizedName: { + required: true, + serializedName: "localizedName", + type: { + name: "String" + } + }, + localizedDescription: { + required: true, + serializedName: "localizedDescription", + type: { + name: "String" + } + }, + carrierDetails: { + serializedName: "carrierDetails", + type: { + name: "Composite", + className: "CarrierDetails" + } + }, + rateInformation: { + serializedName: "rateInformation", + type: { + name: "Composite", + className: "RateInformation" + } + } + } + } +}; + +export const PhonePlanGroups: coreHttp.CompositeMapper = { + serializedName: "PhonePlanGroups", + type: { + name: "Composite", + className: "PhonePlanGroups", + modelProperties: { + phonePlanGroups: { + serializedName: "phonePlanGroups", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PhonePlanGroup" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; + +export const PhonePlan: coreHttp.CompositeMapper = { + serializedName: "PhonePlan", + type: { + name: "Composite", + className: "PhonePlan", + modelProperties: { + phonePlanId: { + required: true, + serializedName: "phonePlanId", + type: { + name: "String" + } + }, + localizedName: { + required: true, + serializedName: "localizedName", + type: { + name: "String" + } + }, + locationType: { + required: true, + serializedName: "locationType", + type: { + name: "String" + } + }, + areaCodes: { + serializedName: "areaCodes", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + capabilities: { + serializedName: "capabilities", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + maximumSearchSize: { + serializedName: "maximumSearchSize", + type: { + name: "Number" + } + } + } + } +}; + +export const PhonePlansResponse: coreHttp.CompositeMapper = { + serializedName: "PhonePlansResponse", + type: { + name: "Composite", + className: "PhonePlansResponse", + modelProperties: { + phonePlans: { + serializedName: "phonePlans", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PhonePlan" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; + +export const LocationOptions: coreHttp.CompositeMapper = { + serializedName: "LocationOptions", + type: { + name: "Composite", + className: "LocationOptions", + modelProperties: { + labelId: { + serializedName: "labelId", + type: { + name: "String" + } + }, + labelName: { + serializedName: "labelName", + type: { + name: "String" + } + }, + options: { + serializedName: "options", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "LocationOptionsDetails" + } + } + } + } + } + } +}; + +export const LocationOptionsDetails: coreHttp.CompositeMapper = { + serializedName: "LocationOptionsDetails", + type: { + name: "Composite", + className: "LocationOptionsDetails", + modelProperties: { + name: { + serializedName: "name", + type: { + name: "String" + } + }, + value: { + serializedName: "value", + type: { + name: "String" + } + }, + locationOptions: { + serializedName: "locationOptions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "LocationOptions" + } + } + } + } + } + } +}; + +export const LocationOptionsResponse: coreHttp.CompositeMapper = { + serializedName: "LocationOptionsResponse", + type: { + name: "Composite", + className: "LocationOptionsResponse", + modelProperties: { + locationOptions: { + serializedName: "locationOptions", + type: { + name: "Composite", + className: "LocationOptions" + } + } + } + } +}; + +export const PhoneNumberReleaseDetails: coreHttp.CompositeMapper = { + serializedName: "PhoneNumberReleaseDetails", + type: { + name: "Composite", + className: "PhoneNumberReleaseDetails", + modelProperties: { + status: { + serializedName: "status", + type: { + name: "String" + } + }, + errorCode: { + serializedName: "errorCode", + type: { + name: "Number" + } + } + } + } +}; + +export const PhoneNumberRelease: coreHttp.CompositeMapper = { + serializedName: "PhoneNumberRelease", + type: { + name: "Composite", + className: "PhoneNumberRelease", + modelProperties: { + releaseId: { + serializedName: "releaseId", + type: { + name: "String" + } + }, + createdAt: { + serializedName: "createdAt", + type: { + name: "DateTime" + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + }, + errorMessage: { + serializedName: "errorMessage", + type: { + name: "String" + } + }, + phoneNumberReleaseStatusDetails: { + serializedName: "phoneNumberReleaseStatusDetails", + type: { + name: "Dictionary", + value: { + type: { + name: "Composite", + className: "PhoneNumberReleaseDetails" + } + } + } + } + } + } +}; + +export const ReleaseRequest: coreHttp.CompositeMapper = { + serializedName: "ReleaseRequest", + type: { + name: "Composite", + className: "ReleaseRequest", + modelProperties: { + phoneNumbers: { + required: true, + serializedName: "phoneNumbers", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + } + } + } +}; + +export const ReleaseResponse: coreHttp.CompositeMapper = { + serializedName: "ReleaseResponse", + type: { + name: "Composite", + className: "ReleaseResponse", + modelProperties: { + releaseId: { + required: true, + serializedName: "releaseId", + type: { + name: "String" + } + } + } + } +}; + +export const PhoneNumberEntity: coreHttp.CompositeMapper = { + serializedName: "PhoneNumberEntity", + type: { + name: "Composite", + className: "PhoneNumberEntity", + modelProperties: { + id: { + serializedName: "id", + type: { + name: "String" + } + }, + createdAt: { + serializedName: "createdAt", + type: { + name: "DateTime" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + quantity: { + serializedName: "quantity", + type: { + name: "Number" + } + }, + quantityObtained: { + serializedName: "quantityObtained", + type: { + name: "Number" + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + }, + focDate: { + serializedName: "focDate", + type: { + name: "DateTime" + } + } + } + } +}; + +export const PhoneNumberEntities: coreHttp.CompositeMapper = { + serializedName: "PhoneNumberEntities", + type: { + name: "Composite", + className: "PhoneNumberEntities", + modelProperties: { + entities: { + serializedName: "entities", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "PhoneNumberEntity" + } + } + } + }, + nextLink: { + serializedName: "nextLink", + type: { + name: "String" + } + } + } + } +}; + +export const PhoneNumberSearch: coreHttp.CompositeMapper = { + serializedName: "PhoneNumberSearch", + type: { + name: "Composite", + className: "PhoneNumberSearch", + modelProperties: { + searchId: { + serializedName: "searchId", + type: { + name: "String" + } + }, + displayName: { + serializedName: "displayName", + type: { + name: "String" + } + }, + createdAt: { + serializedName: "createdAt", + type: { + name: "DateTime" + } + }, + description: { + serializedName: "description", + type: { + name: "String" + } + }, + phonePlanIds: { + serializedName: "phonePlanIds", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + areaCode: { + serializedName: "areaCode", + type: { + name: "String" + } + }, + quantity: { + serializedName: "quantity", + type: { + name: "Number" + } + }, + locationOptions: { + serializedName: "locationOptions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "LocationOptionsDetails" + } + } + } + }, + status: { + serializedName: "status", + type: { + name: "String" + } + }, + phoneNumbers: { + serializedName: "phoneNumbers", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + reservationExpiryDate: { + serializedName: "reservationExpiryDate", + type: { + name: "DateTime" + } + }, + errorCode: { + serializedName: "errorCode", + type: { + name: "Number" + } + } + } + } +}; + +export const CreateSearchOptions: coreHttp.CompositeMapper = { + serializedName: "CreateSearchOptions", + type: { + name: "Composite", + className: "CreateSearchOptions", + modelProperties: { + displayName: { + required: true, + serializedName: "displayName", + type: { + name: "String" + } + }, + description: { + required: true, + serializedName: "description", + type: { + name: "String" + } + }, + phonePlanIds: { + required: true, + serializedName: "phonePlanIds", + type: { + name: "Sequence", + element: { + type: { + name: "String" + } + } + } + }, + areaCode: { + required: true, + serializedName: "areaCode", + type: { + name: "String" + } + }, + quantity: { + serializedName: "quantity", + constraints: { + InclusiveMaximum: 2147483647, + InclusiveMinimum: 1 + }, + type: { + name: "Number" + } + }, + locationOptions: { + serializedName: "locationOptions", + type: { + name: "Sequence", + element: { + type: { + name: "Composite", + className: "LocationOptionsDetails" + } + } + } + } + } + } +}; + +export const CreateSearchResponse: coreHttp.CompositeMapper = { + serializedName: "CreateSearchResponse", + type: { + name: "Composite", + className: "CreateSearchResponse", + modelProperties: { + searchId: { + required: true, + serializedName: "searchId", + type: { + name: "String" + } + } + } + } +}; diff --git a/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/parameters.ts b/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/parameters.ts new file mode 100644 index 000000000000..5808761049da --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/parameters.ts @@ -0,0 +1,146 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +import * as coreHttp from "@azure/core-http"; + +export const apiVersion: coreHttp.OperationQueryParameter = { + parameterPath: "apiVersion", + mapper: { + required: true, + isConstant: true, + serializedName: "api-version", + defaultValue: "2020-07-20-preview1", + type: { + name: "String" + } + } +}; +export const capabilitiesUpdateId: coreHttp.OperationURLParameter = { + parameterPath: "capabilitiesUpdateId", + mapper: { + required: true, + serializedName: "capabilitiesUpdateId", + type: { + name: "String" + } + } +}; +export const countryCode: coreHttp.OperationURLParameter = { + parameterPath: "countryCode", + mapper: { + required: true, + serializedName: "countryCode", + type: { + name: "String" + } + } +}; +export const endpoint: coreHttp.OperationURLParameter = { + parameterPath: "endpoint", + mapper: { + required: true, + serializedName: "endpoint", + defaultValue: "", + type: { + name: "String" + } + }, + skipEncoding: true +}; +export const includeRateInformation: coreHttp.OperationQueryParameter = { + parameterPath: ["options", "includeRateInformation"], + mapper: { + serializedName: "includeRateInformation", + defaultValue: false, + type: { + name: "Boolean" + } + } +}; +export const locale: coreHttp.OperationQueryParameter = { + parameterPath: ["options", "locale"], + mapper: { + serializedName: "locale", + defaultValue: "en-US", + type: { + name: "String" + } + } +}; +export const locationType: coreHttp.OperationQueryParameter = { + parameterPath: "locationType", + mapper: { + required: true, + serializedName: "locationType", + type: { + name: "String" + } + } +}; +export const phonePlanGroupId: coreHttp.OperationURLParameter = { + parameterPath: "phonePlanGroupId", + mapper: { + required: true, + serializedName: "phonePlanGroupId", + type: { + name: "String" + } + } +}; +export const phonePlanId: coreHttp.OperationQueryParameter = { + parameterPath: "phonePlanId", + mapper: { + required: true, + serializedName: "phonePlanId", + type: { + name: "String" + } + } +}; +export const releaseId: coreHttp.OperationURLParameter = { + parameterPath: "releaseId", + mapper: { + required: true, + serializedName: "releaseId", + type: { + name: "String" + } + } +}; +export const searchId: coreHttp.OperationURLParameter = { + parameterPath: "searchId", + mapper: { + required: true, + serializedName: "searchId", + type: { + name: "String" + } + } +}; +export const skip: coreHttp.OperationQueryParameter = { + parameterPath: ["options", "skip"], + mapper: { + serializedName: "skip", + defaultValue: 0, + type: { + name: "Number" + } + } +}; +export const take: coreHttp.OperationQueryParameter = { + parameterPath: ["options", "take"], + mapper: { + serializedName: "take", + defaultValue: 100, + type: { + name: "Number" + } + } +}; diff --git a/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/phoneNumberAdministrationMappers.ts b/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/phoneNumberAdministrationMappers.ts new file mode 100644 index 000000000000..2be431dbcda1 --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/generated/src/models/phoneNumberAdministrationMappers.ts @@ -0,0 +1,45 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. + */ + +export { + AcquiredPhoneNumber, + AcquiredPhoneNumbers, + AreaCodes, + CarrierDetails, + CreateSearchOptions, + CreateSearchResponse, + ErrorBody, + ErrorResponse, + LocationOptions, + LocationOptionsDetails, + LocationOptionsQueries, + LocationOptionsQuery, + LocationOptionsResponse, + NumberConfiguration, + NumberConfigurationPhoneNumber, + NumberConfigurationResponse, + NumberUpdateCapabilities, + PhoneNumberCountries, + PhoneNumberCountry, + PhoneNumberEntities, + PhoneNumberEntity, + PhoneNumberRelease, + PhoneNumberReleaseDetails, + PhoneNumberSearch, + PhonePlan, + PhonePlanGroup, + PhonePlanGroups, + PhonePlansResponse, + PstnConfiguration, + RateInformation, + ReleaseRequest, + ReleaseResponse, + UpdateNumberCapabilitiesRequest, + UpdateNumberCapabilitiesResponse, + UpdatePhoneNumberCapabilitiesResponse +} from "../models/mappers"; diff --git a/sdk/communication/communication-administration/src/phoneNumber/generated/src/operations/index.ts b/sdk/communication/communication-administration/src/phoneNumber/generated/src/operations/index.ts new file mode 100644 index 000000000000..636d745197a3 --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/generated/src/operations/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +export * from "./phoneNumberAdministration"; diff --git a/sdk/communication/communication-administration/src/phoneNumber/generated/src/operations/phoneNumberAdministration.ts b/sdk/communication/communication-administration/src/phoneNumber/generated/src/operations/phoneNumberAdministration.ts new file mode 100644 index 000000000000..83275514ad02 --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/generated/src/operations/phoneNumberAdministration.ts @@ -0,0 +1,1254 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +import * as coreHttp from "@azure/core-http"; +import * as Models from "../models"; +import * as Mappers from "../models/phoneNumberAdministrationMappers"; +import * as Parameters from "../models/parameters"; +import { PhoneNumberRestClientContext } from "../phoneNumberRestClientContext"; + +/** Class representing a PhoneNumberAdministration. */ +export class PhoneNumberAdministration { + private readonly client: PhoneNumberRestClientContext; + + /** + * Create a PhoneNumberAdministration. + * @param {PhoneNumberRestClientContext} client Reference to the service client. + */ + constructor(client: PhoneNumberRestClientContext) { + this.client = client; + } + + /** + * @summary Gets the list of the acquired phone numbers. + * @param [options] The optional parameters + * @returns Promise + */ + getAllPhoneNumbers( + options?: Models.PhoneNumberAdministrationGetAllPhoneNumbersOptionalParams + ): Promise; + /** + * @param callback The callback + */ + getAllPhoneNumbers(callback: coreHttp.ServiceCallback): void; + /** + * @param options The optional parameters + * @param callback The callback + */ + getAllPhoneNumbers( + options: Models.PhoneNumberAdministrationGetAllPhoneNumbersOptionalParams, + callback: coreHttp.ServiceCallback + ): void; + getAllPhoneNumbers( + options?: + | Models.PhoneNumberAdministrationGetAllPhoneNumbersOptionalParams + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + options + }, + getAllPhoneNumbersOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Gets a list of the supported area codes + * @param locationType The type of location information required by the plan. + * @param countryCode The ISO 3166-2 country code + * @param phonePlanId The plan id from which to search area codes. + * @param [options] The optional parameters + * @returns Promise + */ + getAllAreaCodes( + locationType: string, + countryCode: string, + phonePlanId: string, + options?: Models.PhoneNumberAdministrationGetAllAreaCodesOptionalParams + ): Promise; + /** + * @param locationType The type of location information required by the plan. + * @param countryCode The ISO 3166-2 country code + * @param phonePlanId The plan id from which to search area codes. + * @param callback The callback + */ + getAllAreaCodes( + locationType: string, + countryCode: string, + phonePlanId: string, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param locationType The type of location information required by the plan. + * @param countryCode The ISO 3166-2 country code + * @param phonePlanId The plan id from which to search area codes. + * @param options The optional parameters + * @param callback The callback + */ + getAllAreaCodes( + locationType: string, + countryCode: string, + phonePlanId: string, + options: Models.PhoneNumberAdministrationGetAllAreaCodesOptionalParams, + callback: coreHttp.ServiceCallback + ): void; + getAllAreaCodes( + locationType: string, + countryCode: string, + phonePlanId: string, + options?: + | Models.PhoneNumberAdministrationGetAllAreaCodesOptionalParams + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + locationType, + countryCode, + phonePlanId, + options + }, + getAllAreaCodesOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Get capabilities by capabilities update id. + * @param capabilitiesUpdateId + * @param [options] The optional parameters + * @returns Promise + */ + getCapabilitiesUpdate( + capabilitiesUpdateId: string, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param capabilitiesUpdateId + * @param callback The callback + */ + getCapabilitiesUpdate( + capabilitiesUpdateId: string, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param capabilitiesUpdateId + * @param options The optional parameters + * @param callback The callback + */ + getCapabilitiesUpdate( + capabilitiesUpdateId: string, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + getCapabilitiesUpdate( + capabilitiesUpdateId: string, + options?: + | coreHttp.RequestOptionsBase + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + capabilitiesUpdateId, + options + }, + getCapabilitiesUpdateOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Adds or removes phone number capabilities + * @param phoneNumberCapabilitiesUpdate The map of phone numbers to the capabilities update applied + * to the phone number. + * @param [options] The optional parameters + * @returns Promise + */ + updateCapabilities( + phoneNumberCapabilitiesUpdate: { [propertyName: string]: Models.NumberUpdateCapabilities }, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param phoneNumberCapabilitiesUpdate The map of phone numbers to the capabilities update applied + * to the phone number. + * @param callback The callback + */ + updateCapabilities( + phoneNumberCapabilitiesUpdate: { [propertyName: string]: Models.NumberUpdateCapabilities }, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param phoneNumberCapabilitiesUpdate The map of phone numbers to the capabilities update applied + * to the phone number. + * @param options The optional parameters + * @param callback The callback + */ + updateCapabilities( + phoneNumberCapabilitiesUpdate: { [propertyName: string]: Models.NumberUpdateCapabilities }, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + updateCapabilities( + phoneNumberCapabilitiesUpdate: { [propertyName: string]: Models.NumberUpdateCapabilities }, + options?: + | coreHttp.RequestOptionsBase + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + phoneNumberCapabilitiesUpdate, + options + }, + updateCapabilitiesOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Gets a list of supported countries + * @param [options] The optional parameters + * @returns Promise + */ + getAllSupportedCountries( + options?: Models.PhoneNumberAdministrationGetAllSupportedCountriesOptionalParams + ): Promise; + /** + * @param callback The callback + */ + getAllSupportedCountries(callback: coreHttp.ServiceCallback): void; + /** + * @param options The optional parameters + * @param callback The callback + */ + getAllSupportedCountries( + options: Models.PhoneNumberAdministrationGetAllSupportedCountriesOptionalParams, + callback: coreHttp.ServiceCallback + ): void; + getAllSupportedCountries( + options?: + | Models.PhoneNumberAdministrationGetAllSupportedCountriesOptionalParams + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + options + }, + getAllSupportedCountriesOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Endpoint for getting number configurations + * @param phoneNumber The phone number in the E.164 format + * @param [options] The optional parameters + * @returns Promise + */ + getNumberConfiguration( + phoneNumber: string, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param phoneNumber The phone number in the E.164 format + * @param callback The callback + */ + getNumberConfiguration( + phoneNumber: string, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param phoneNumber The phone number in the E.164 format + * @param options The optional parameters + * @param callback The callback + */ + getNumberConfiguration( + phoneNumber: string, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + getNumberConfiguration( + phoneNumber: string, + options?: + | coreHttp.RequestOptionsBase + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + phoneNumber, + options + }, + getNumberConfigurationOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Endpoint for configuring a pstn number + * @param pstnConfiguration + * @param phoneNumber The phone number to configure + * @param [options] The optional parameters + * @returns Promise + */ + configureNumber( + pstnConfiguration: Models.PstnConfiguration, + phoneNumber: string, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param pstnConfiguration + * @param phoneNumber The phone number to configure + * @param callback The callback + */ + configureNumber( + pstnConfiguration: Models.PstnConfiguration, + phoneNumber: string, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param pstnConfiguration + * @param phoneNumber The phone number to configure + * @param options The optional parameters + * @param callback The callback + */ + configureNumber( + pstnConfiguration: Models.PstnConfiguration, + phoneNumber: string, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + configureNumber( + pstnConfiguration: Models.PstnConfiguration, + phoneNumber: string, + options?: coreHttp.RequestOptionsBase | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + pstnConfiguration, + phoneNumber, + options + }, + configureNumberOperationSpec, + callback + ); + } + + /** + * @summary Endpoint for unconfiguring a pstn number by removing the configuration + * @param phoneNumber The phone number in the E.164 format + * @param [options] The optional parameters + * @returns Promise + */ + unconfigureNumber( + phoneNumber: string, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param phoneNumber The phone number in the E.164 format + * @param callback The callback + */ + unconfigureNumber(phoneNumber: string, callback: coreHttp.ServiceCallback): void; + /** + * @param phoneNumber The phone number in the E.164 format + * @param options The optional parameters + * @param callback The callback + */ + unconfigureNumber( + phoneNumber: string, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + unconfigureNumber( + phoneNumber: string, + options?: coreHttp.RequestOptionsBase | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + phoneNumber, + options + }, + unconfigureNumberOperationSpec, + callback + ); + } + + /** + * @summary Gets a list of phone plan groups for the given country + * @param countryCode The ISO 3166-2 country code. + * @param [options] The optional parameters + * @returns Promise + */ + getPhonePlanGroups( + countryCode: string, + options?: Models.PhoneNumberAdministrationGetPhonePlanGroupsOptionalParams + ): Promise; + /** + * @param countryCode The ISO 3166-2 country code. + * @param callback The callback + */ + getPhonePlanGroups( + countryCode: string, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param countryCode The ISO 3166-2 country code. + * @param options The optional parameters + * @param callback The callback + */ + getPhonePlanGroups( + countryCode: string, + options: Models.PhoneNumberAdministrationGetPhonePlanGroupsOptionalParams, + callback: coreHttp.ServiceCallback + ): void; + getPhonePlanGroups( + countryCode: string, + options?: + | Models.PhoneNumberAdministrationGetPhonePlanGroupsOptionalParams + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + countryCode, + options + }, + getPhonePlanGroupsOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Gets a list of phone plans for a phone plan group + * @param countryCode The ISO 3166-2 country code. + * @param phonePlanGroupId + * @param [options] The optional parameters + * @returns Promise + */ + getPhonePlans( + countryCode: string, + phonePlanGroupId: string, + options?: Models.PhoneNumberAdministrationGetPhonePlansOptionalParams + ): Promise; + /** + * @param countryCode The ISO 3166-2 country code. + * @param phonePlanGroupId + * @param callback The callback + */ + getPhonePlans( + countryCode: string, + phonePlanGroupId: string, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param countryCode The ISO 3166-2 country code. + * @param phonePlanGroupId + * @param options The optional parameters + * @param callback The callback + */ + getPhonePlans( + countryCode: string, + phonePlanGroupId: string, + options: Models.PhoneNumberAdministrationGetPhonePlansOptionalParams, + callback: coreHttp.ServiceCallback + ): void; + getPhonePlans( + countryCode: string, + phonePlanGroupId: string, + options?: + | Models.PhoneNumberAdministrationGetPhonePlansOptionalParams + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + countryCode, + phonePlanGroupId, + options + }, + getPhonePlansOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Gets a list of location options for a phone plan + * @param countryCode The ISO 3166-2 country code. + * @param phonePlanGroupId + * @param phonePlanId + * @param [options] The optional parameters + * @returns Promise + */ + getPhonePlanLocationOptions( + countryCode: string, + phonePlanGroupId: string, + phonePlanId: string, + options?: Models.PhoneNumberAdministrationGetPhonePlanLocationOptionsOptionalParams + ): Promise; + /** + * @param countryCode The ISO 3166-2 country code. + * @param phonePlanGroupId + * @param phonePlanId + * @param callback The callback + */ + getPhonePlanLocationOptions( + countryCode: string, + phonePlanGroupId: string, + phonePlanId: string, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param countryCode The ISO 3166-2 country code. + * @param phonePlanGroupId + * @param phonePlanId + * @param options The optional parameters + * @param callback The callback + */ + getPhonePlanLocationOptions( + countryCode: string, + phonePlanGroupId: string, + phonePlanId: string, + options: Models.PhoneNumberAdministrationGetPhonePlanLocationOptionsOptionalParams, + callback: coreHttp.ServiceCallback + ): void; + getPhonePlanLocationOptions( + countryCode: string, + phonePlanGroupId: string, + phonePlanId: string, + options?: + | Models.PhoneNumberAdministrationGetPhonePlanLocationOptionsOptionalParams + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + countryCode, + phonePlanGroupId, + phonePlanId, + options + }, + getPhonePlanLocationOptionsOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Gets a release by a release id + * @param releaseId Represents the release id + * @param [options] The optional parameters + * @returns Promise + */ + getReleaseById( + releaseId: string, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param releaseId Represents the release id + * @param callback The callback + */ + getReleaseById( + releaseId: string, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param releaseId Represents the release id + * @param options The optional parameters + * @param callback The callback + */ + getReleaseById( + releaseId: string, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + getReleaseById( + releaseId: string, + options?: coreHttp.RequestOptionsBase | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + releaseId, + options + }, + getReleaseByIdOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Creates a release for the given phone numbers + * @param phoneNumbers The list of phone numbers in the release request. + * @param [options] The optional parameters + * @returns Promise + */ + releasePhoneNumbers( + phoneNumbers: string[], + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param phoneNumbers The list of phone numbers in the release request. + * @param callback The callback + */ + releasePhoneNumbers( + phoneNumbers: string[], + callback: coreHttp.ServiceCallback + ): void; + /** + * @param phoneNumbers The list of phone numbers in the release request. + * @param options The optional parameters + * @param callback The callback + */ + releasePhoneNumbers( + phoneNumbers: string[], + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + releasePhoneNumbers( + phoneNumbers: string[], + options?: coreHttp.RequestOptionsBase | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + phoneNumbers, + options + }, + releasePhoneNumbersOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Gets a list of all releases + * @param [options] The optional parameters + * @returns Promise + */ + getAllReleases( + options?: Models.PhoneNumberAdministrationGetAllReleasesOptionalParams + ): Promise; + /** + * @param callback The callback + */ + getAllReleases(callback: coreHttp.ServiceCallback): void; + /** + * @param options The optional parameters + * @param callback The callback + */ + getAllReleases( + options: Models.PhoneNumberAdministrationGetAllReleasesOptionalParams, + callback: coreHttp.ServiceCallback + ): void; + getAllReleases( + options?: + | Models.PhoneNumberAdministrationGetAllReleasesOptionalParams + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + options + }, + getAllReleasesOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Get search by search id + * @param searchId The search id to be searched for + * @param [options] The optional parameters + * @returns Promise + */ + getSearchById( + searchId: string, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param searchId The search id to be searched for + * @param callback The callback + */ + getSearchById( + searchId: string, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param searchId The search id to be searched for + * @param options The optional parameters + * @param callback The callback + */ + getSearchById( + searchId: string, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + getSearchById( + searchId: string, + options?: coreHttp.RequestOptionsBase | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + searchId, + options + }, + getSearchByIdOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Creates a phone number search + * @param displayName Display name of the search. + * @param description Description of the search. + * @param phonePlanIds The plan subtype ids from which to create the search. + * @param areaCode The area code from which to create the search. + * @param [options] The optional parameters + * @returns Promise + */ + createSearch( + displayName: string, + description: string, + phonePlanIds: string[], + areaCode: string, + options?: Models.PhoneNumberAdministrationCreateSearchOptionalParams + ): Promise; + /** + * @param displayName Display name of the search. + * @param description Description of the search. + * @param phonePlanIds The plan subtype ids from which to create the search. + * @param areaCode The area code from which to create the search. + * @param callback The callback + */ + createSearch( + displayName: string, + description: string, + phonePlanIds: string[], + areaCode: string, + callback: coreHttp.ServiceCallback + ): void; + /** + * @param displayName Display name of the search. + * @param description Description of the search. + * @param phonePlanIds The plan subtype ids from which to create the search. + * @param areaCode The area code from which to create the search. + * @param options The optional parameters + * @param callback The callback + */ + createSearch( + displayName: string, + description: string, + phonePlanIds: string[], + areaCode: string, + options: Models.PhoneNumberAdministrationCreateSearchOptionalParams, + callback: coreHttp.ServiceCallback + ): void; + createSearch( + displayName: string, + description: string, + phonePlanIds: string[], + areaCode: string, + options?: + | Models.PhoneNumberAdministrationCreateSearchOptionalParams + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + displayName, + description, + phonePlanIds, + areaCode, + options + }, + createSearchOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Gets a list of all searches + * @param [options] The optional parameters + * @returns Promise + */ + getAllSearches( + options?: Models.PhoneNumberAdministrationGetAllSearchesOptionalParams + ): Promise; + /** + * @param callback The callback + */ + getAllSearches(callback: coreHttp.ServiceCallback): void; + /** + * @param options The optional parameters + * @param callback The callback + */ + getAllSearches( + options: Models.PhoneNumberAdministrationGetAllSearchesOptionalParams, + callback: coreHttp.ServiceCallback + ): void; + getAllSearches( + options?: + | Models.PhoneNumberAdministrationGetAllSearchesOptionalParams + | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + options + }, + getAllSearchesOperationSpec, + callback + ) as Promise; + } + + /** + * @summary Cancels the search. This means existing numbers in the search will be made available. + * @param searchId The search id to be canceled + * @param [options] The optional parameters + * @returns Promise + */ + cancelSearch( + searchId: string, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param searchId The search id to be canceled + * @param callback The callback + */ + cancelSearch(searchId: string, callback: coreHttp.ServiceCallback): void; + /** + * @param searchId The search id to be canceled + * @param options The optional parameters + * @param callback The callback + */ + cancelSearch( + searchId: string, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + cancelSearch( + searchId: string, + options?: coreHttp.RequestOptionsBase | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + searchId, + options + }, + cancelSearchOperationSpec, + callback + ); + } + + /** + * @summary Purchases the phone number search. + * @param searchId The search id to be purchased + * @param [options] The optional parameters + * @returns Promise + */ + purchaseSearch( + searchId: string, + options?: coreHttp.RequestOptionsBase + ): Promise; + /** + * @param searchId The search id to be purchased + * @param callback The callback + */ + purchaseSearch(searchId: string, callback: coreHttp.ServiceCallback): void; + /** + * @param searchId The search id to be purchased + * @param options The optional parameters + * @param callback The callback + */ + purchaseSearch( + searchId: string, + options: coreHttp.RequestOptionsBase, + callback: coreHttp.ServiceCallback + ): void; + purchaseSearch( + searchId: string, + options?: coreHttp.RequestOptionsBase | coreHttp.ServiceCallback, + callback?: coreHttp.ServiceCallback + ): Promise { + return this.client.sendOperationRequest( + { + searchId, + options + }, + purchaseSearchOperationSpec, + callback + ); + } +} + +// Operation Specifications +const serializer = new coreHttp.Serializer(Mappers); +const getAllPhoneNumbersOperationSpec: coreHttp.OperationSpec = { + httpMethod: "GET", + path: "administration/phonenumbers/phonenumbers", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.locale, Parameters.skip, Parameters.take, Parameters.apiVersion], + responses: { + 200: { + bodyMapper: Mappers.AcquiredPhoneNumbers + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getAllAreaCodesOperationSpec: coreHttp.OperationSpec = { + httpMethod: "POST", + path: "administration/phonenumbers/countries/{countryCode}/areacodes", + urlParameters: [Parameters.endpoint, Parameters.countryCode], + queryParameters: [Parameters.locationType, Parameters.phonePlanId, Parameters.apiVersion], + requestBody: { + parameterPath: { + locationOptions: ["options", "locationOptions"] + }, + mapper: Mappers.LocationOptionsQueries + }, + responses: { + 200: { + bodyMapper: Mappers.AreaCodes + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getCapabilitiesUpdateOperationSpec: coreHttp.OperationSpec = { + httpMethod: "GET", + path: "administration/phonenumbers/capabilities/{capabilitiesUpdateId}", + urlParameters: [Parameters.endpoint, Parameters.capabilitiesUpdateId], + queryParameters: [Parameters.apiVersion], + responses: { + 200: { + bodyMapper: Mappers.UpdatePhoneNumberCapabilitiesResponse + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const updateCapabilitiesOperationSpec: coreHttp.OperationSpec = { + httpMethod: "POST", + path: "administration/phonenumbers/capabilities", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.apiVersion], + requestBody: { + parameterPath: { + phoneNumberCapabilitiesUpdate: "phoneNumberCapabilitiesUpdate" + }, + mapper: Mappers.UpdateNumberCapabilitiesRequest + }, + responses: { + 200: { + bodyMapper: Mappers.UpdateNumberCapabilitiesResponse + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getAllSupportedCountriesOperationSpec: coreHttp.OperationSpec = { + httpMethod: "GET", + path: "administration/phonenumbers/countries", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.locale, Parameters.skip, Parameters.take, Parameters.apiVersion], + responses: { + 200: { + bodyMapper: Mappers.PhoneNumberCountries + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getNumberConfigurationOperationSpec: coreHttp.OperationSpec = { + httpMethod: "POST", + path: "administration/phonenumbers/numberconfiguration", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.apiVersion], + requestBody: { + parameterPath: { + phoneNumber: "phoneNumber" + }, + mapper: Mappers.NumberConfigurationPhoneNumber + }, + responses: { + 200: { + bodyMapper: Mappers.NumberConfigurationResponse + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const configureNumberOperationSpec: coreHttp.OperationSpec = { + httpMethod: "PATCH", + path: "administration/phonenumbers/numberconfiguration/configure", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.apiVersion], + requestBody: { + parameterPath: { + pstnConfiguration: "pstnConfiguration", + phoneNumber: "phoneNumber" + }, + mapper: Mappers.NumberConfiguration + }, + responses: { + 200: {}, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const unconfigureNumberOperationSpec: coreHttp.OperationSpec = { + httpMethod: "PATCH", + path: "administration/phonenumbers/numberconfiguration/unconfigure", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.apiVersion], + requestBody: { + parameterPath: { + phoneNumber: "phoneNumber" + }, + mapper: Mappers.NumberConfigurationPhoneNumber + }, + responses: { + 200: {}, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getPhonePlanGroupsOperationSpec: coreHttp.OperationSpec = { + httpMethod: "GET", + path: "administration/phonenumbers/countries/{countryCode}/phoneplangroups", + urlParameters: [Parameters.endpoint, Parameters.countryCode], + queryParameters: [ + Parameters.locale, + Parameters.includeRateInformation, + Parameters.skip, + Parameters.take, + Parameters.apiVersion + ], + responses: { + 200: { + bodyMapper: Mappers.PhonePlanGroups + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getPhonePlansOperationSpec: coreHttp.OperationSpec = { + httpMethod: "GET", + path: + "administration/phonenumbers/countries/{countryCode}/phoneplangroups/{phonePlanGroupId}/phoneplans", + urlParameters: [Parameters.endpoint, Parameters.countryCode, Parameters.phonePlanGroupId], + queryParameters: [Parameters.locale, Parameters.skip, Parameters.take, Parameters.apiVersion], + responses: { + 200: { + bodyMapper: Mappers.PhonePlansResponse + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getPhonePlanLocationOptionsOperationSpec: coreHttp.OperationSpec = { + httpMethod: "GET", + path: + "administration/phonenumbers/countries/{countryCode}/phoneplangroups/{phonePlanGroupId}/phoneplans/{phonePlanId}/locationoptions", + urlParameters: [ + Parameters.endpoint, + Parameters.countryCode, + Parameters.phonePlanGroupId, + Parameters.phonePlanId + ], + queryParameters: [Parameters.locale, Parameters.apiVersion], + responses: { + 200: { + bodyMapper: Mappers.LocationOptionsResponse + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getReleaseByIdOperationSpec: coreHttp.OperationSpec = { + httpMethod: "GET", + path: "administration/phonenumbers/releases/{releaseId}", + urlParameters: [Parameters.endpoint, Parameters.releaseId], + queryParameters: [Parameters.apiVersion], + responses: { + 200: { + bodyMapper: Mappers.PhoneNumberRelease + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const releasePhoneNumbersOperationSpec: coreHttp.OperationSpec = { + httpMethod: "POST", + path: "administration/phonenumbers/releases", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.apiVersion], + requestBody: { + parameterPath: { + phoneNumbers: "phoneNumbers" + }, + mapper: Mappers.ReleaseRequest + }, + responses: { + 200: { + bodyMapper: Mappers.ReleaseResponse + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getAllReleasesOperationSpec: coreHttp.OperationSpec = { + httpMethod: "GET", + path: "administration/phonenumbers/releases", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.skip, Parameters.take, Parameters.apiVersion], + responses: { + 200: { + bodyMapper: Mappers.PhoneNumberEntities + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getSearchByIdOperationSpec: coreHttp.OperationSpec = { + httpMethod: "GET", + path: "administration/phonenumbers/searches/{searchId}", + urlParameters: [Parameters.endpoint, Parameters.searchId], + queryParameters: [Parameters.apiVersion], + responses: { + 200: { + bodyMapper: Mappers.PhoneNumberSearch + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const createSearchOperationSpec: coreHttp.OperationSpec = { + httpMethod: "POST", + path: "administration/phonenumbers/searches", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.apiVersion], + requestBody: { + parameterPath: { + displayName: "displayName", + description: "description", + phonePlanIds: "phonePlanIds", + areaCode: "areaCode", + quantity: ["options", "quantity"], + locationOptions: ["options", "locationOptions"] + }, + mapper: Mappers.CreateSearchOptions + }, + responses: { + 201: { + bodyMapper: Mappers.CreateSearchResponse + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const getAllSearchesOperationSpec: coreHttp.OperationSpec = { + httpMethod: "GET", + path: "administration/phonenumbers/searches", + urlParameters: [Parameters.endpoint], + queryParameters: [Parameters.skip, Parameters.take, Parameters.apiVersion], + responses: { + 200: { + bodyMapper: Mappers.PhoneNumberEntities + }, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const cancelSearchOperationSpec: coreHttp.OperationSpec = { + httpMethod: "POST", + path: "administration/phonenumbers/searches/{searchId}/cancel", + urlParameters: [Parameters.endpoint, Parameters.searchId], + queryParameters: [Parameters.apiVersion], + responses: { + 202: {}, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; + +const purchaseSearchOperationSpec: coreHttp.OperationSpec = { + httpMethod: "POST", + path: "administration/phonenumbers/searches/{searchId}/purchase", + urlParameters: [Parameters.endpoint, Parameters.searchId], + queryParameters: [Parameters.apiVersion], + responses: { + 202: {}, + default: { + bodyMapper: Mappers.ErrorResponse + } + }, + serializer +}; diff --git a/sdk/communication/communication-administration/src/phoneNumber/generated/src/phoneNumberRestClient.ts b/sdk/communication/communication-administration/src/phoneNumber/generated/src/phoneNumberRestClient.ts new file mode 100644 index 000000000000..dd746469d357 --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/generated/src/phoneNumberRestClient.ts @@ -0,0 +1,41 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +import * as coreHttp from "@azure/core-http"; +import * as Models from "./models"; +import * as Mappers from "./models/mappers"; +import * as operations from "./operations"; +import { PhoneNumberRestClientContext } from "./phoneNumberRestClientContext"; + +class PhoneNumberRestClient extends PhoneNumberRestClientContext { + // Operation groups + phoneNumberAdministration: operations.PhoneNumberAdministration; + + /** + * Initializes a new instance of the PhoneNumberRestClient class. + * @param apiVersion Version of API to invoke + * @param endpoint The endpoint of the Azure Communication resource. + * @param [options] The parameter options + */ + constructor(apiVersion: string, endpoint: string, options?: coreHttp.ServiceClientOptions) { + super(apiVersion, endpoint, options); + this.phoneNumberAdministration = new operations.PhoneNumberAdministration(this); + } +} + +// Operation Specifications + +export { + PhoneNumberRestClient, + PhoneNumberRestClientContext, + Models as PhoneNumberRestModels, + Mappers as PhoneNumberRestMappers +}; +export * from "./operations"; diff --git a/sdk/communication/communication-administration/src/phoneNumber/generated/src/phoneNumberRestClientContext.ts b/sdk/communication/communication-administration/src/phoneNumber/generated/src/phoneNumberRestClientContext.ts new file mode 100644 index 000000000000..f2b3a85485c9 --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/generated/src/phoneNumberRestClientContext.ts @@ -0,0 +1,50 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for + * license information. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is + * regenerated. + */ + +import * as coreHttp from "@azure/core-http"; + +const packageName = "azure-communication-administration-phoneNumber"; +const packageVersion = "1.0.0-beta.1"; + +export class PhoneNumberRestClientContext extends coreHttp.ServiceClient { + apiVersion: string; + endpoint: string; + + /** + * Initializes a new instance of the PhoneNumberRestClientContext class. + * @param apiVersion Version of API to invoke + * @param endpoint The endpoint of the Azure Communication resource. + * @param [options] The parameter options + */ + constructor(apiVersion: string, endpoint: string, options?: coreHttp.ServiceClientOptions) { + if (apiVersion == undefined) { + throw new Error("'apiVersion' cannot be null."); + } + if (endpoint == undefined) { + throw new Error("'endpoint' cannot be null."); + } + + if (!options) { + options = {}; + } + + if (!options.userAgent) { + const defaultUserAgent = coreHttp.getDefaultUserAgentValue(); + options.userAgent = `${packageName}/${packageVersion} ${defaultUserAgent}`; + } + + super(undefined, options); + + this.baseUri = "{endpoint}"; + this.requestContentType = "application/json; charset=utf-8"; + this.apiVersion = apiVersion; + this.endpoint = endpoint; + } +} diff --git a/sdk/communication/communication-administration/src/phoneNumber/models.ts b/sdk/communication/communication-administration/src/phoneNumber/models.ts new file mode 100644 index 000000000000..6f0a05a9aa0c --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/models.ts @@ -0,0 +1,295 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { OperationOptions } from "@azure/core-http"; +import { WithResponse } from "../common/models"; +import { + LocationOptionsDetails, + NumberUpdateCapabilities, + UpdateNumberCapabilitiesResponse, + UpdatePhoneNumberCapabilitiesResponse, + ReleaseResponse, + PhoneNumberRelease, + CreateSearchResponse, + AreaCodes, + NumberConfigurationResponse, + LocationOptionsResponse, + PhoneNumberSearch, + LocationOptionsQueries +} from "./generated/src/models"; + +/** + * Request to create a search. + */ +export interface CreateSearchRequest { + /** + * Display name of the search. + */ + name: string; + /** + * Description of the search. + */ + description: string; + /** + * List of subTypeIds associated with the search. + */ + phonePlanIds: string[]; + /** + * Areacode to search for. + */ + areaCode: string; + /** + * The number of phone numbers to return + */ + quantity: number; +} + +/** + * Options for creating a search. + */ +export interface CreateSearchOptions extends OperationOptions { + /** + * The location options of the search. + */ + locationOptions?: LocationOptionsDetails[]; +} + +/** + * A request for configuring a phone number. + */ +export interface ConfigurePhoneNumberRequest { + /** + * The E.164 representation representation of the phone number. + */ + phoneNumber: string; + /** + * Associates the phone number with a given callback URL. + */ + callbackUrl: string; +} + +/** + * Options for configuring a phone number. + */ +export interface ConfigurePhoneNumberOptions extends OperationOptions { + /** + * Associates the phone number with a given applicationId. + */ + applicationId?: string; + /** + * Routable TargetId for the ACS Number + */ + azurePstnTargetId?: string; +} + +/** + * Base options to pass a locale that is used for localizing strings in the responses. + */ +export interface LocalizationOptions extends OperationOptions { + /** + * Set locale to localize strings in responses. + */ + locale?: string; +} + +/** + * Base options to pass pagination parameters. + */ +export interface PageableOptions extends OperationOptions { + /** + * An optional parameter for how many entries to skip, for pagination purposes. Default value: 0. + */ + skip?: number; + /** + * An optional parameter for how many entries to return, for pagination purposes. Default value: + * 100. + */ + take?: number; +} + +/** + * Base options to pass a locale and pagination parameters in the same request. + */ +export interface PageableLocalizationOptions extends PageableOptions, LocalizationOptions {} + +/** + * Options for querying supported countries. + */ +export type ListSupportedCountriesOptions = PageableLocalizationOptions; + +/** + * Options for listing acquired phone numbers. + */ +export type ListPhoneNumbersOptions = PageableLocalizationOptions; + +/** + * Options for querying plan groups by country. + */ +export interface ListPhonePlanGroupsOptions extends PageableLocalizationOptions { + includeRateInformation?: boolean; +} + +/** + * Request to get available area codes. + */ +export interface GetAreaCodesRequest { + /** + * The type of location information required by the plan. + */ + locationType: string; + /** + * The ISO 3166-2 country code to find national destination codes for. + */ + countryCode: string; + /** + * The phone plan's id. + */ + phonePlanId: string; + /** + * Represents a list of location option queries, used for fetching area codes. + */ + locationOptionsQueries: LocationOptionsQueries; +} + +/** + * Options for querying available area codes. + */ +export type GetAreaCodesOptions = OperationOptions; + +/** + * Additional request options for unconfiguring a phone number. + */ +export type UnconfigurePhoneNumberOptions = OperationOptions; + +/** + * Additional request options for getting the update capabilities request. + */ +export type GetCapabilitiesUpdateOptions = OperationOptions; + +/** + * Additional request options for requesting the release of a list of phone numbers. + */ +export type ReleasePhoneNumberOptions = OperationOptions; + +/** + * Additional request options for getting a release. + */ +export type GetReleaseOptions = OperationOptions; + +/** + * Additional request options for getting the configuration of a phone number. + */ +export type GetPhoneNumberConfigurationOptions = OperationOptions; + +/** + * Additional request option for get search operations. + */ +export type GetSearchOptions = OperationOptions; + +/** + * Additional request option for refresh search operations. + */ +export type RefreshSearchOptions = OperationOptions; + +/** + * Additional request option for cancel search operations. + */ +export type CancelSearchOptions = OperationOptions; + +/** + * Additional request option for get search operations. + */ +export type PurchaseSearchOptions = OperationOptions; + +/** + * The capabilities update for each of a set of phone numbers. + */ +export type PhoneNumberCapabilitiesUpdates = { [propertyName: string]: NumberUpdateCapabilities }; + +/** + * Additional options for updating phone numbers capabilities. + */ +export interface UpdateCapabilitiesOptions extends OperationOptions { + phoneNumbers?: PhoneNumberCapabilitiesUpdates; +} + +export interface ListPhonePlansRequest { + /** + * The ISO 3166-2 country code to find national destination codes for. + */ + countryCode: string; + /** + * The id of the phone plan group to get plans from. + */ + phonePlanGroupId: string; +} + +/** + * Options for listing phone plans. + */ +export type ListPhonePlansOptions = PageableLocalizationOptions; + +export interface GetPhonePlanLocationOptionsRequest extends PageableLocalizationOptions { + /** + * The ISO 3166-2 country code to find national destination codes for. + */ + countryCode: string; + /** + * The id of the phone plan group. + */ + phonePlanGroupId: string; + /** + * The id of the phone plan. + */ + phonePlanId: string; +} + +/** + * Options for getting a plan location options + */ +export type GetPhonePlanLocationOptionsOptions = PageableLocalizationOptions; + +/** + * Represents the response from updating the capabilities for a list of phone numbers. + */ +export type UpdateNumbersCapabilitiesResponse = WithResponse; + +/** + * Represents the response from getting the update capabilities request associated with a given id. + */ +export type GetCapabilitiesUpdateResponse = WithResponse; + +/** + * Represents the response from requesting the release of a list of acquired phone numbers. + */ +export type ReleasePhoneNumbersResponse = WithResponse; + +/** + * Represents the response from getting the release associated with a given id. + */ +export type GetReleaseResponse = WithResponse; + +/** + * Represents the response from starting a search for phone numbers. + */ +export type CreatePhoneNumberSearchResponse = WithResponse; + +/** + * Represents the response from getting a list of the supported area codes. + */ +export type GetAreaCodesResponse = WithResponse; + +/** + * Represents the response from getting the configuration for a given number. + */ +export type GetPhoneNumberConfigurationResponse = WithResponse; + +/** + * Represents the response from getting the location options for a given phone plan. + */ +export type GetPhonePlanLocationOptionsResponse = WithResponse; + +/** + * Represents the response from getting the search associated with a given id. + */ +export type GetSearchResponse = WithResponse; diff --git a/sdk/communication/communication-administration/src/phoneNumber/phoneNumberAdministrationClient.ts b/sdk/communication/communication-administration/src/phoneNumber/phoneNumberAdministrationClient.ts new file mode 100644 index 000000000000..11c6a37ff0aa --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/phoneNumberAdministrationClient.ts @@ -0,0 +1,1107 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +/// + +import { + createCommunicationAccessKeyCredentialPolicy, + parseClientArguments, + isKeyCredential +} from "@azure/communication-common"; +import { KeyCredential } from "@azure/core-auth"; +import { + PipelineOptions, + InternalPipelineOptions, + createPipelineFromOptions, + operationOptionsToRequestOptionsBase +} from "@azure/core-http"; +import "@azure/core-paging"; +import { PageSettings, PagedAsyncIterableIterator } from "@azure/core-paging"; +import { CanonicalCode } from "@opentelemetry/api"; +import { logger } from "../common/logger"; +import { createSpan } from "../common/tracing"; +import { + PhoneNumberRestClient, + PhoneNumberAdministration +} from "./generated/src/phoneNumberRestClient"; +import { + AcquiredPhoneNumber, + PhoneNumberCountry, + PhonePlanGroup, + PhonePlan, + PhoneNumberEntity, + UpdatePhoneNumberCapabilitiesResponse, + ReleaseResponse, + UpdateNumberCapabilitiesResponse, + PhoneNumberRelease, + CreateSearchResponse, + AreaCodes, + NumberConfigurationResponse, + LocationOptionsResponse, + PhoneNumberSearch +} from "./generated/src/models"; +import { SDK_VERSION } from "./constants"; +import { + CreateSearchOptions, + CreateSearchRequest, + GetAreaCodesOptions, + ConfigurePhoneNumberOptions, + ListSupportedCountriesOptions, + ListPhoneNumbersOptions, + ListPhonePlanGroupsOptions, + UpdateCapabilitiesOptions, + GetAreaCodesRequest, + PageableOptions, + ListPhonePlansRequest, + ListPhonePlansOptions, + GetPhonePlanLocationOptionsRequest, + GetPhonePlanLocationOptionsOptions, + ConfigurePhoneNumberRequest, + UpdateNumbersCapabilitiesResponse, + PhoneNumberCapabilitiesUpdates, + GetCapabilitiesUpdateResponse, + ReleasePhoneNumbersResponse, + GetReleaseResponse, + CreatePhoneNumberSearchResponse, + GetAreaCodesResponse, + GetPhoneNumberConfigurationResponse, + GetPhonePlanLocationOptionsResponse, + GetSearchResponse, + GetCapabilitiesUpdateOptions, + GetPhoneNumberConfigurationOptions, + GetReleaseOptions, + ReleasePhoneNumberOptions, + UnconfigurePhoneNumberOptions, + CancelSearchOptions, + GetSearchOptions, + PurchaseSearchOptions +} from "./models"; +import { VoidResponse } from "../common/models"; +import { attachHttpResponse } from "../common/mappers"; + +/** + * Client options used to configure the UserTokenClient API requests. + */ +export interface PhoneNumberAdministrationClientOptions extends PipelineOptions {} + +const isPhoneNumberAdministrationClientOptions = ( + options: any +): options is PhoneNumberAdministrationClientOptions => options && !isKeyCredential(options); + +/** + * Client class for interacting with Azure Communication Services PhoneNumber Administration. + */ +export class PhoneNumberAdministrationClient { + /** + * A reference to the auto-generated PhoneNumber HTTP client. + */ + private readonly client: PhoneNumberAdministration; + + /** + * Initializes a new instance of the PhoneNumberAdministrationClient class. + * @param connectionString Connection string to connect to an Azure Communication Service resource. + * Example: "endpoint=https://contoso.eastus.communications.azure.net/;accesskey=secret"; + * @param options Optional. Options to configure the HTTP pipeline. + */ + public constructor(connectionString: string, options?: PhoneNumberAdministrationClientOptions); + + /** + * Initializes a new instance of the PhoneNumberAdministrationClient class using an Azure KeyCredential. + * @param url The endpoint of the service (ex: https://contoso.eastus.communications.azure.net). + * @param credential An object that is used to authenticate requests to the service. Use the Azure KeyCredential or `@azure/identity` to create a credential. + * @param options Optional. Options to configure the HTTP pipeline. + */ + public constructor( + url: string, + credential: KeyCredential, + options?: PhoneNumberAdministrationClientOptions + ); + + public constructor( + connectionStringOrUrl: string, + credentialOrOptions?: KeyCredential | PhoneNumberAdministrationClientOptions, + maybeOptions: PhoneNumberAdministrationClientOptions = {} + ) { + const { url, credential } = parseClientArguments(connectionStringOrUrl, credentialOrOptions); + const options = isPhoneNumberAdministrationClientOptions(credentialOrOptions) + ? credentialOrOptions + : maybeOptions; + const libInfo = `azsdk-js-communication-administration/${SDK_VERSION}`; + + if (!options.userAgentOptions) { + options.userAgentOptions = {}; + } + + if (options.userAgentOptions.userAgentPrefix) { + options.userAgentOptions.userAgentPrefix = `${options.userAgentOptions.userAgentPrefix} ${libInfo}`; + } else { + options.userAgentOptions.userAgentPrefix = libInfo; + } + + const internalPipelineOptions: InternalPipelineOptions = { + ...options, + ...{ + loggingOptions: { + logger: logger.info + } + } + }; + + const authPolicy = createCommunicationAccessKeyCredentialPolicy(credential); + const pipeline = createPipelineFromOptions(internalPipelineOptions, authPolicy); + this.client = new PhoneNumberRestClient(SDK_VERSION, url, pipeline).phoneNumberAdministration; + } + + /** + * Configures a phone number, for example to assign a callbackUrl. + * @param config The configuration details + * @param options Additional request options. + */ + public async configurePhoneNumber( + config: ConfigurePhoneNumberRequest, + options: ConfigurePhoneNumberOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-configurePhoneNumber", + options + ); + const { phoneNumber, callbackUrl } = config; + try { + const { _response } = await this.client.configureNumber( + { + callbackUrl: callbackUrl, + applicationId: updatedOptions.applicationId + }, + phoneNumber, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse({}, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Unconfigure a phone number, resetting its' configuration. + * @param phoneNumber Phone Number to unconfigure. + * @param options Additional request options. + */ + public async unconfigurePhoneNumber( + phoneNumber: string, + options: UnconfigurePhoneNumberOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-unconfigurePhoneNumber", + options + ); + try { + const { _response } = await this.client.unconfigureNumber( + phoneNumber, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse({}, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Updates the capabilities for a list of phone numbers. + * The response includes the id of the created update capabilities request, + * remember that id for subsequent calls to getCapabilitiesUpdate. + * @param phoneNumberCapabilitiesUpdates Dictionary containing a list of phone numbers and their capabilities updates. + * @param options Additional request options. + */ + public async updatePhoneNumbersCapabilities( + phoneNumberCapabilitiesUpdates: PhoneNumberCapabilitiesUpdates, + options: UpdateCapabilitiesOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-updatePhoneNumbersCapabilities", + options + ); + try { + const { capabilitiesUpdateId, _response } = await this.client.updateCapabilities( + phoneNumberCapabilitiesUpdates, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse( + { capabilitiesUpdateId }, + _response + ); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Get the update capabilities request associated with a given id. + * @param capabilitiesUpdateId The id associated with the request. + * @param options Additional request options. + */ + public async getCapabilitiesUpdate( + capabilitiesUpdateId: string, + options: GetCapabilitiesUpdateOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-getCapabilitiesUpdate", + options + ); + try { + const { _response, ...rest } = await this.client.getCapabilitiesUpdate( + capabilitiesUpdateId, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse(rest, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Request the release of a list of acquired phone numbers. + * The response includes the id of the created release, + * remember that id for subsequent calls to getRelease. + * @param phoneNumbers The phone numbers to be released. + * @param options Additional request options. + */ + public async releasePhoneNumbers( + phoneNumbers: string[], + options: ReleasePhoneNumberOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-releasePhoneNumbers", + options + ); + try { + const { releaseId, _response } = await this.client.releasePhoneNumbers( + phoneNumbers, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse({ releaseId }, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Gets the release associated with a given id. + * Use this function to query the status of releases. + * @param releaseId The id of the release returned by releasePhoneNumbers. + * @param options Additional request options. + */ + public async getRelease( + releaseId: string, + options: GetReleaseOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-getRelease", + options + ); + try { + const { _response, ...rest } = await this.client.getReleaseById( + releaseId, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse(rest, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Starts a search for phone numbers given some constraints such as name or area code. + * @param searchRequest Request properties to constraint the search scope. + * @param options Additional request options. + */ + public async createSearch( + searchRequest: CreateSearchRequest, + options: CreateSearchOptions = {} + ): Promise { + const { name, description, phonePlanIds, areaCode, quantity } = searchRequest; + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-createSearch", + Object.assign(options, { quantity }) + ); + try { + const { searchId, _response } = await this.client.createSearch( + name, + description, + phonePlanIds, + areaCode, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse({ searchId }, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Gets a list of the supported area codes based on location. + * @param request Request properties to constraint the search scope. + * @param options Additional request options. + */ + public async getAreaCodes( + request: GetAreaCodesRequest, + options: GetAreaCodesOptions = {} + ): Promise { + const { countryCode: country, locationType, phonePlanId, locationOptionsQueries } = request; + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-getAllAreaCodes", + Object.assign(options, locationOptionsQueries) + ); + try { + const { _response, ...rest } = await this.client.getAllAreaCodes( + locationType, + country, + phonePlanId, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse(rest, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * @internal + * @ignore + * Deals with the pagination of listSearches. + * @param {PageSettings} continuationState An object that indicates the position of the paginated request. + * @param {PageableOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listSearchesPage( + continuationState: PageSettings, + options: PageableOptions = {} + ): AsyncIterableIterator { + if (!continuationState.continuationToken) { + const currentResponse = await this.client.getAllSearches(options); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.entities) { + yield currentResponse.entities; + } + } + + while (continuationState.continuationToken) { + const currentResponse = await this.client.getAllSearches(options); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.entities) { + yield currentResponse.entities; + } + } + } + + /** + * @internal + * @ignore + * Deals with the iteration of all the available results of listSearches. + * @param {PageableOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listSearchesAll( + options: PageableOptions = {} + ): AsyncIterableIterator { + for await (const entities of this.listSearchesPage({}, options)) { + yield* entities; + } + } + + /** + * Iterates the searches created by the Azure resource. + * + * Example usage: + * ```ts + * let client = new PhoneNumberAdministrationClient(credentials); + * for await (const entity of client.listReleases()) { + * console.log("id: ", entity.id); + * } + * ``` + * Gets all searches created by the Azure resource. + * @param {PageableOptions} [options] Optional parameters for the underlying HTTP request. + */ + public listSearches( + options: PageableOptions = {} + ): PagedAsyncIterableIterator { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-listSearches", + options + ); + const iter = this.listSearchesAll(options); + + span.end(); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings: PageSettings = {}) => this.listSearchesPage(settings, updatedOptions) + }; + } + + /** + * @internal + * @ignore + * Deals with the pagination of listReleases. + * @param {PageSettings} continuationState An object that indicates the position of the paginated request. + * @param {PageableOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listReleasesPage( + continuationState: PageSettings, + options: PageableOptions = {} + ): AsyncIterableIterator { + if (continuationState.continuationToken == null) { + const currentResponse = await this.client.getAllReleases(options); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.entities) { + yield currentResponse.entities; + } + } + + while (continuationState.continuationToken) { + const currentResponse = await this.client.getAllReleases(options); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.entities) { + yield currentResponse.entities; + } + } + } + + /** + * @internal + * @ignore + * Deals with the iteration of all the available results of listReleases. + * @param {PageableOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listReleasesAll( + options: PageableOptions = {} + ): AsyncIterableIterator { + for await (const entities of this.listReleasesPage({}, options)) { + yield* entities; + } + } + + /** + * Iterates the releases created by the Azure resource. + * + * Example usage: + * ```ts + * let client = new PhoneNumberAdministrationClient(credentials); + * for await (const entity of client.listReleases()) { + * console.log("id: ", entity.id); + * } + * ``` + * Gets all releases created by the Azure resource. + * @param {PageableOptions} [options] Optional parameters for the underlying HTTP request. + */ + public listReleases( + options: PageableOptions = {} + ): PagedAsyncIterableIterator { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-listReleases", + options + ); + const iter = this.listReleasesAll(options); + + span.end(); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings: PageSettings = {}) => this.listReleasesPage(settings, updatedOptions) + }; + } + + /** + * @internal + * @ignore + * Deals with the pagination of listSupportedCountries. + * @param {PageSettings} continuationState An object that indicates the position of the paginated request. + * @param {ListSupportedCountriesOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listSupportedCountriesPage( + continuationState: PageSettings, + options: ListSupportedCountriesOptions = {} + ): AsyncIterableIterator { + if (continuationState.continuationToken == null) { + const currentResponse = await this.client.getAllSupportedCountries(options); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.countries) { + yield currentResponse.countries; + } + } + + while (continuationState.continuationToken) { + const currentResponse = await this.client.getAllSupportedCountries(options); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.countries) { + yield currentResponse.countries; + } + } + } + + /** + * @internal + * @ignore + * Deals with the iteration of all the available results of listSupportedCountries. + * @param {ListSupportedCountriesOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listSupportedCountriesAll( + options: ListSupportedCountriesOptions = {} + ): AsyncIterableIterator { + for await (const countries of this.listSupportedCountriesPage({}, options)) { + yield* countries; + } + } + + /** + * Iterates the supported countries. + * + * Example usage: + * ```ts + * let client = new PhoneNumberAdministrationClient(credentials); + * for await (const country of client.listSupportedCountries()) { + * console.log("country name: ", country.localizedName); + * } + * ``` + * @summary List all supported countries. + * @param {ListSupportedCountriesOptions} [options] The optional parameters. + */ + public listSupportedCountries( + options: ListSupportedCountriesOptions = {} + ): PagedAsyncIterableIterator { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-listAllSupportedCountries", + options + ); + const iter = this.listSupportedCountriesAll(options); + + span.end(); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings: PageSettings = {}) => + this.listSupportedCountriesPage(settings, updatedOptions) + }; + } + + /** + * @internal + * @ignore + * Deals with the pagination of listPhoneNumbers. + * @param {PageSettings} continuationState An object that indicates the position of the paginated request. + * @param {ListPhoneNumbersOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listPhoneNumbersPage( + continuationState: PageSettings, + options: ListPhoneNumbersOptions = {} + ): AsyncIterableIterator { + if (continuationState.continuationToken == null) { + const currentResponse = await this.client.getAllPhoneNumbers(options); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.phoneNumbers) { + yield currentResponse.phoneNumbers; + } + } + + while (continuationState.continuationToken) { + const currentResponse = await this.client.getAllPhoneNumbers(options); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.phoneNumbers) { + yield currentResponse.phoneNumbers; + } + } + } + + /** + * @internal + * @ignore + * Deals with the iteration of all the available results of listPhoneNumbers. + * @param {ListPhoneNumbersOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listPhoneNumbersAll( + options: ListPhoneNumbersOptions = {} + ): AsyncIterableIterator { + for await (const phoneNumbers of this.listPhoneNumbersPage({}, options)) { + yield* phoneNumbers; + } + } + + /** + * Iterates the acquired phone numbers. + * + * Example usage: + * ```ts + * let client = new PhoneNumberAdministrationClient(credentials); + * for await (const acquired of client.listPhoneNumbers()) { + * console.log("phone number: ", acquired.phoneNumber); + * } + * ``` + * @summary List all acquired phone numbers. + * @param {ListPhoneNumbersOptions} [options] The optional parameters. + */ + public listPhoneNumbers( + options: ListPhoneNumbersOptions = {} + ): PagedAsyncIterableIterator { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-listAllPhoneNumbers", + options + ); + const iter = this.listPhoneNumbersAll(options); + + span.end(); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings: PageSettings = {}) => this.listPhoneNumbersPage(settings, updatedOptions) + }; + } + + /** + * Gets the configuration for a given phone number. + * @param phoneNumber The E.164 representation of the phone number whose configuration is requested. + * @param options Additional request options. + */ + public async getPhoneNumberConfiguration( + phoneNumber: string, + options: GetPhoneNumberConfigurationOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-getPhoneNumberConfiguration", + options + ); + try { + const { pstnConfiguration, _response } = await this.client.getNumberConfiguration( + phoneNumber, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse({ pstnConfiguration }, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * @internal + * @ignore + * Deals with the pagination of listPhonePlanGroups. + * @param {PageSettings} continuationState An object that indicates the position of the paginated request. + * @param countryCode The ISO 3166-2 country code, for example "FR" or "CN". + * @param {ListPhonePlanGroupsOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listPhonePlanGroupsPage( + continuationState: PageSettings, + countryCode: string, + options: ListPhonePlanGroupsOptions = {} + ): AsyncIterableIterator { + if (continuationState.continuationToken == null) { + const currentResponse = await this.client.getPhonePlanGroups(countryCode, options); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.phonePlanGroups) { + yield currentResponse.phonePlanGroups; + } + } + + while (continuationState.continuationToken) { + const currentResponse = await this.client.getPhonePlanGroups(countryCode, options); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.phonePlanGroups) { + yield currentResponse.phonePlanGroups; + } + } + } + + /** + * @internal + * @ignore + * Deals with the iteration of all the available results of listPhonePlanGroups. + * @param countryCode The ISO 3166-2 country code, for example "FR" or "CN". + * @param {ListPlansForCountryOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listPhonePlanGroupsAll( + countryCode: string, + options: ListPhonePlanGroupsOptions = {} + ): AsyncIterableIterator { + for await (const phonePlanGroups of this.listPhonePlanGroupsPage({}, countryCode, options)) { + yield* phonePlanGroups; + } + } + + /** + * Iterates the available phone plan groups for a country. + * + * Example usage: + * ```ts + * let client = new PhoneNumberAdministrationClient(credentials); + * for await (const phonePlanGroup of client.listPhonePlanGroups("CA")) { + * console.log("plan group id: ", phonePlanGroup.phonePlanGroupId); + * } + * ``` + * @summary List all available phone plan groups for a country. + * @param {ListPhonePlanGroupsOptions} [options] The optional parameters. + */ + public listPhonePlanGroups( + countryCode: string, + options: ListPhonePlanGroupsOptions = {} + ): PagedAsyncIterableIterator { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-listPhonePlanGroups", + options + ); + const iter = this.listPhonePlanGroupsAll(countryCode, options); + + span.end(); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings: PageSettings = {}) => + this.listPhonePlanGroupsPage(settings, countryCode, updatedOptions) + }; + } + + /** + * @internal + * @ignore + * Deals with the pagination of listPhonePlans. + * @param {PageSettings} continuationState An object that indicates the position of the paginated request. + * @param planGroupInfo Information need to search for plans. + * @param {GetPhonePlansOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listPhonePlansPage( + continuationState: PageSettings, + planGroupInfo: ListPhonePlansRequest, + options: ListPhonePlansOptions = {} + ): AsyncIterableIterator { + if (continuationState.continuationToken == null) { + const currentResponse = await this.client.getPhonePlans( + planGroupInfo.countryCode, + planGroupInfo.phonePlanGroupId, + options + ); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.phonePlans) { + yield currentResponse.phonePlans; + } + } + + while (continuationState.continuationToken) { + const currentResponse = await this.client.getPhonePlans( + planGroupInfo.countryCode, + planGroupInfo.phonePlanGroupId, + options + ); + continuationState.continuationToken = currentResponse.nextLink; + + if (currentResponse.phonePlans) { + yield currentResponse.phonePlans; + } + } + } + + /** + * @internal + * @ignore + * Deals with the iteration of all the available results of listPhonePlans. + * @param planGroupInfo Information need to search for plans. + * @param {ListPhonePlansOptions} [options] Optional parameters for the underlying HTTP request. + */ + private async *listPhonePlansAll( + planGroupInfo: ListPhonePlansRequest, + options: ListPhonePlansOptions = {} + ): AsyncIterableIterator { + for await (const phonePlans of this.listPhonePlansPage({}, planGroupInfo, options)) { + yield* phonePlans; + } + } + + /** + * Iterates the available phone plan for a plan group. + * + * Example usage: + * ```ts + * let client = new PhoneNumberAdministrationClient(credentials); + * for await (const phonePlan of client.listPhonePlanGroups(PLAN_GROUP_INFO)) { + * console.log("plan id: ", phonePlan.phonePlanId); + * } + * + * Gets all available phone plans for a given plan group. + * @param planGroupInfo Information need to search for plans. + * @param options Additional request options. + */ + public listPhonePlans( + planGroupInfo: ListPhonePlansRequest, + options: ListPhonePlansOptions = {} + ): PagedAsyncIterableIterator { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-listPhonePlans", + options + ); + const iter = this.listPhonePlansAll(planGroupInfo, options); + + span.end(); + return { + next() { + return iter.next(); + }, + [Symbol.asyncIterator]() { + return this; + }, + byPage: (settings: PageSettings = {}) => + this.listPhonePlansPage(settings, planGroupInfo, updatedOptions) + }; + } + + /** + * Gets the location options for a given phone plan. + * @param request Request properties to constraint the search scope. + * @param options Additional request options. + */ + public async getPhonePlanLocationOptions( + request: GetPhonePlanLocationOptionsRequest, + options: GetPhonePlanLocationOptionsOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-getPhonePlanLocationOptions", + options + ); + const { countryCode, phonePlanGroupId, phonePlanId } = request; + try { + const { locationOptions, _response } = await this.client.getPhonePlanLocationOptions( + countryCode, + phonePlanGroupId, + phonePlanId, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse({ locationOptions }, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Gets the search associated with a given id. + * Use this function to query the status of a search. + * @param searchId The id of the search returned by createSearch. + * @param options Additional request options. + */ + public async getSearch( + searchId: string, + options: GetSearchOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-getSearch", + options + ); + try { + const { _response, ...rest } = await this.client.getSearchById( + searchId, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse(rest, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Cancels the search associated with a given id. + * @param searchId The id of the search returned by createSearch. + * @param options Additional request options. + */ + public async cancelSearch( + searchId: string, + options: CancelSearchOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-cancelSearch", + options + ); + try { + const { _response } = await this.client.cancelSearch( + searchId, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse({}, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } + + /** + * Purchases the search associated with a given id. + * @param searchId The id of the search returned by createSearch. + * @param options Additional request options. + */ + public async purchaseSearch( + searchId: string, + options: PurchaseSearchOptions = {} + ): Promise { + const { span, updatedOptions } = createSpan( + "PhoneNumberAdministrationClient-purchaseSearch", + options + ); + try { + const { _response } = await this.client.purchaseSearch( + searchId, + operationOptionsToRequestOptionsBase(updatedOptions) + ); + return attachHttpResponse({}, _response); + } catch (e) { + span.setStatus({ + code: CanonicalCode.UNKNOWN, + message: e.message + }); + throw e; + } finally { + span.end(); + } + } +} + +export { + AreaCodes, + CarrierDetails, + LocationOptions, + LocationOptionsDetails, + NumberConfiguration, + PhoneNumberAdministrationGetAllAreaCodesResponse, + PhoneNumberAdministrationReleasePhoneNumbersResponse, + PhoneNumberAdministrationGetReleaseByIdResponse, + PhoneNumberAdministrationGetCapabilitiesUpdateResponse, + PhoneNumberAdministrationGetSearchByIdResponse, + PhoneNumberAdministrationGetNumberConfigurationResponse, + PhoneNumberAdministrationCreateSearchResponse, + PhoneNumberAdministrationGetPhonePlanLocationOptionsResponse, + PstnConfiguration, + ReleaseResponse, + NumberUpdateCapabilities, + UpdateNumberCapabilitiesResponse, + Capability, + PhoneNumberCountry, + PhoneNumberCountries, + LocationOptionsQuery, + AcquiredPhoneNumber, + AcquiredPhoneNumbers, + UpdatePhoneNumberCapabilitiesResponse, + PhonePlanGroups, + PhonePlanGroup, + PhonePlansResponse, + PhonePlan, + PhoneNumberRelease, + PhoneNumberEntities, + PhoneNumberSearch, + AssignmentStatus, + ActivationState, + CapabilitiesUpdateStatus, + PhoneNumberType, + RateInformation, + LocationType, + ReleaseStatus, + PhoneNumberReleaseDetails, + PhoneNumberEntity, + CurrencyType, + PhoneNumberReleaseStatus, + SearchStatus, + LocationOptionsResponse, + CreateSearchResponse, + NumberConfigurationResponse, + LocationOptionsQueries +} from "./generated/src/models"; diff --git a/sdk/communication/communication-administration/src/phoneNumber/shims.d.ts b/sdk/communication/communication-administration/src/phoneNumber/shims.d.ts new file mode 100644 index 000000000000..1ae48910ccab --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/shims.d.ts @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +// Shim for DOM's window and navigator's language +interface Navigator { + language: string; +} + +interface Window { + readonly navigator: Navigator; +} + +declare let navigator: Navigator; +declare let window: Window; diff --git a/sdk/communication/communication-administration/src/phoneNumber/utils.browser.ts b/sdk/communication/communication-administration/src/phoneNumber/utils.browser.ts new file mode 100644 index 000000000000..3fe4da4e9358 --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/utils.browser.ts @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +export const getDefaultLocale = (): string => { + return window?.navigator?.language ?? "en-US"; +}; diff --git a/sdk/communication/communication-administration/src/phoneNumber/utils.ts b/sdk/communication/communication-administration/src/phoneNumber/utils.ts new file mode 100644 index 000000000000..8d93fed4a99d --- /dev/null +++ b/sdk/communication/communication-administration/src/phoneNumber/utils.ts @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +export const getDefaultLocale = (): string => { + // hard-coded for NodeJS, we use navigator.language in the browser + return "en-US"; +}; diff --git a/sdk/communication/communication-administration/swagger/CommunicationIdentity.md b/sdk/communication/communication-administration/swagger/CommunicationIdentity.md new file mode 100644 index 000000000000..296f54dc19f0 --- /dev/null +++ b/sdk/communication/communication-administration/swagger/CommunicationIdentity.md @@ -0,0 +1,22 @@ +# Azure Communication Services Configuration Module + +> see https://aka.ms/autorest + +## Configuration + +```yaml +package-name: azure-communication-administration-identity +title: CommunicationIdentityConfigurationClient +override-client-name: GeneratedCommunicationIdentityClient +description: Communication identity configuration client +package-version: 1.0.0-beta.3 +generate-metadata: false +license-header: MICROSOFT_MIT_NO_VERSION +output-folder: ../src/communicationIdentity/generated +input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/838c5092f11e8ca26e262b1f1099d5c5cdfedc3f/specification/communication/data-plane/Microsoft.CommunicationServicesIdentity/preview/2020-07-20-preview2/CommunicationIdentity.json +model-date-time-as-string: false +optional-response-headers: true +payload-flattening-threshold: 10 +use: "@microsoft.azure/autorest.typescript@5.0.1" +azure-arm: false +``` diff --git a/sdk/communication/communication-administration/swagger/PhoneNumber.md b/sdk/communication/communication-administration/swagger/PhoneNumber.md new file mode 100644 index 000000000000..2f09069c0c1b --- /dev/null +++ b/sdk/communication/communication-administration/swagger/PhoneNumber.md @@ -0,0 +1,21 @@ +# Azure Communication Services Configuration Module + +> see https://aka.ms/autorest + +## Configuration + +```yaml +package-name: azure-communication-administration-phoneNumber +override-client-name: PhoneNumberRestClient +description: Phone number configuration client +package-version: 1.0.0-beta.1 +generate-metadata: false +license-header: MICROSOFT_MIT_NO_VERSION +output-folder: ../src/phoneNumber/generated +input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/257f060be8b60d8468584682aa2d71b1faa5f82c/specification/communication/data-plane/Microsoft.CommunicationServicesAdministration/preview/2020-07-20-preview1/communicationservicesadministration.json +model-date-time-as-string: false +optional-response-headers: true +payload-flattening-threshold: 10 +use: "@microsoft.azure/autorest.typescript@5.0.1" +azure-arm: false +``` diff --git a/sdk/communication/communication-administration/test/README.md b/sdk/communication/communication-administration/test/README.md new file mode 100644 index 000000000000..219d112a3086 --- /dev/null +++ b/sdk/communication/communication-administration/test/README.md @@ -0,0 +1,19 @@ +# Testing + +To test this project, make sure to build it by following our [building instructions](https://github.com/Azure/azure-sdk-for-js/blob/master/CONTRIBUTING.md#building), then follow the [testing instructions](https://github.com/Azure/azure-sdk-for-js/blob/master/CONTRIBUTING.md#testing). + +You can use existing Azure resources for the live tests, or generate new ones by using our [New-TestResources.ps1](https://github.com/Azure/azure-sdk-for-js/blob/master/eng/common/TestResources/New-TestResources.ps1) script, which will use an [ARM template](https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/textanalytics/test-resources.json) that already has all of the the necessary configurations. + +The Azure resource that is used by the tests in this project is: + +- An existing Communication Services resource. If you need to create the resource, you can use the [Azure Portal][azure_portal] or [Azure CLI][azure_cli]. + +To run the live tests, you will need to set the below environment variables: + +- `TEST_MODE`: Should have `live` assigned if you want to run live without recording. Assign `record` to run live with recording. +- `COMMUNICATION_CONNECTION_STRING`: The primary connection string of the Communication Services resource in your account. + +[azure_sub]: https://azure.microsoft.com/free/ +[azure_portal]: https://portal.azure.com + +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-js%2Fsdk%2Fcommunication%2Fcommunication-administration%2FREADME.png) diff --git a/sdk/communication/communication-administration/test/communicationIdentityClient.mocked.spec.ts b/sdk/communication/communication-administration/test/communicationIdentityClient.mocked.spec.ts new file mode 100644 index 000000000000..4d8f6dca3b27 --- /dev/null +++ b/sdk/communication/communication-administration/test/communicationIdentityClient.mocked.spec.ts @@ -0,0 +1,109 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { isNode } from "@azure/core-http"; +import { CommunicationUser, isCommunicationUser } from "@azure/communication-common"; +import { assert } from "chai"; +import sinon from "sinon"; +import { CommunicationIdentityClient } from "../src"; +import { TestCommunicationIdentityClient } from "./utils/testCommunicationIdentityClient"; +import { issueTokenHttpClient, revokeTokensHttpClient } from "./utils/mockHttpClients"; + +describe("CommunicationIdentityClient [Mocked]", () => { + const dateHeader = isNode ? "date" : "x-ms-date"; + const user: CommunicationUser = { communicationUserId: "ACS_ID" }; + + afterEach(() => { + sinon.restore(); + }); + + it("creates instance of CommunicationIdentityClient", () => { + const client = new CommunicationIdentityClient( + "endpoint=https://contoso.spool.azure.local;accesskey=banana" + ); + assert.instanceOf(client, CommunicationIdentityClient); + }); + + it("sets correct headers", async () => { + const client = new TestCommunicationIdentityClient(); + const spy = sinon.spy(issueTokenHttpClient, "sendRequest"); + + await client.issueTokenTest(user, ["chat"]); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + + if (isNode) { + assert.equal(request.headers.get("host"), "contoso.spool.azure.local"); + } + + assert.typeOf(request.headers.get(dateHeader), "string"); + assert.isDefined(request.headers.get("authorization")); + assert.match( + request.headers.get("authorization") as string, + /HMAC-SHA256 SignedHeaders=.+&Signature=.+/ + ); + }); + + it("sends scopes in issue token request", async () => { + const client = new TestCommunicationIdentityClient(); + const spy = sinon.spy(issueTokenHttpClient, "sendRequest"); + const response = await client.issueTokenTest(user, ["chat"]); + + assert.equal(response.user.communicationUserId, "identity"); + assert.equal(response.token, "token"); + assert.equal(response.expiresOn.toDateString(), new Date("2011/11/30").toDateString()); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + assert.deepEqual(JSON.parse(request.body), { scopes: ["chat"] }); + }); + + it("[issueToken] excludes _response from results when stringified", async () => { + const client = new TestCommunicationIdentityClient(); + const response = await client.issueTokenTest(user, ["chat"]); + + assert.isDefined(response._response); + assert.isTrue(JSON.stringify(response).indexOf("token") > -1); + assert.isFalse(JSON.stringify(response).indexOf("_response") > -1); + }); + + it("[createUser] excludes _response from results when stringified", async () => { + const client = new TestCommunicationIdentityClient(); + const user = await client.createUserTest(); + + assert.isTrue(isCommunicationUser(user)); + assert.equal(user.communicationUserId, "identity"); + assert.isDefined(user._response); + assert.isTrue(JSON.stringify(user).indexOf("id") > -1); + assert.isFalse(JSON.stringify(user).indexOf("_response") > -1); + }); + + it("sends current datetime as value of tokensValidFrom if not passed to revokeTokens", async () => { + const client = new TestCommunicationIdentityClient(); + const spy = sinon.spy(revokeTokensHttpClient, "sendRequest"); + + await client.revokeTokensTest(user); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + const { tokensValidFrom: received } = JSON.parse(request.body); + + assert.isNotNaN(Date.parse(received)); + }); + + it("sends tokensValidFrom in revoke tokens request", async () => { + const client = new TestCommunicationIdentityClient(); + const spy = sinon.spy(revokeTokensHttpClient, "sendRequest"); + const tokensValidFrom = new Date("2011/11/30"); + + await client.revokeTokensTest(user, tokensValidFrom); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + const { tokensValidFrom: received } = JSON.parse(request.body); + const expected = tokensValidFrom.toISOString(); + + assert.equal(received, expected); + }); +}); diff --git a/sdk/communication/communication-administration/test/communicationIdentityClient.spec.ts b/sdk/communication/communication-administration/test/communicationIdentityClient.spec.ts new file mode 100644 index 000000000000..40e11d38bbaf --- /dev/null +++ b/sdk/communication/communication-administration/test/communicationIdentityClient.spec.ts @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { CommunicationUser } from "@azure/communication-common"; +import { assert } from "chai"; +import { isPlaybackMode, Recorder } from "@azure/test-utils-recorder"; +import { CommunicationIdentityClient } from "../src"; +import { createRecordedCommunicationIdentityClient } from "./utils/recordedClient"; + +describe("CommunicationIdentityClient [Playback/Live]", function() { + let user: CommunicationUser; + let recorder: Recorder; + let client: CommunicationIdentityClient; + + beforeEach(function() { + ({ client, recorder } = createRecordedCommunicationIdentityClient(this)); + }); + + afterEach(async function() { + if (!this.currentTest?.isPending()) { + await recorder.stop(); + } + }); + + it("successfully creates a user", async function() { + user = await client.createUser(); + assert.isString(user.communicationUserId); + }); + + it("successfully issues a token for a user [single scope]", async function() { + const { token, expiresOn, user: receivedUser } = await client.issueToken(user, ["chat"]); + assert.isString(token); + assert.instanceOf(expiresOn, Date); + assert.deepEqual(receivedUser, user); + }); + + it("successfully issues a token for a user [multiple scopes]", async function() { + const { token, expiresOn, user: receivedUser } = await client.issueToken(user, [ + "chat", + "pstn" + ]); + assert.isString(token); + assert.instanceOf(expiresOn, Date); + assert.deepEqual(receivedUser, user); + }); + + it("successfully revokes tokens issued for a user", async function() { + const { _response: response } = await client.revokeTokens( + user, + // Must set tokensValidFrom if in playback mode so date strings will match + // when Nock searches for requests + isPlaybackMode() ? new Date("2020-10-10T00:00:00.000Z") : undefined + ); + assert.equal(response.status, 204); + const { tokensValidFrom } = JSON.parse(response.request.body); + assert.isNotNaN(Date.parse(tokensValidFrom)); + }); + + it("successfully deletes a user", async function() { + const { _response: response } = await client.deleteUser(user); + assert.equal(response.status, 204); + }).timeout(20000); +}); diff --git a/sdk/communication/communication-administration/test/list.mocked.ts b/sdk/communication/communication-administration/test/list.mocked.ts new file mode 100644 index 000000000000..f39c8c09f225 --- /dev/null +++ b/sdk/communication/communication-administration/test/list.mocked.ts @@ -0,0 +1,82 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { assert } from "chai"; +import { ListPhonePlansRequest } from "../src"; +import { TestPhoneNumberAdministrationClient } from "./utils/testPhoneNumberAdministrationClient"; + +describe("PhoneNumberAdministrationClient Lists [Mocked]", () => { + const client = new TestPhoneNumberAdministrationClient(); + it("can list phone numbers", async () => { + let found = 0; + for await (const acquired of client.listPhoneNumbersTest()) { + assert.isString(acquired.phoneNumber, "Unexpected type of acquired phone number"); + assert.isNotEmpty(acquired.acquiredCapabilities); + assert.isNotEmpty(acquired.availableCapabilities); + + found += 1; + } + + assert.equal(found, 3, "Unexpected number of phone numbers found by getPhoneNumbers."); + }); + + it("can list supported countries", async () => { + let found = 0; + for await (const country of client.listSupportedCountriesTest()) { + assert.isString(country.countryCode); + assert.isString(country.localizedName); + assert.isTrue(country.localizedName === "France" || country.localizedName === "Canada"); + assert.isTrue(country.countryCode === "FR" || country.countryCode === "CA"); + + found += 1; + } + + assert.equal(found, 2, "Unexpected number of countries found by getSupportedCountries."); + }); + + it("can list phone plan groups", async () => { + const countryCode = "FR"; + const localizedName = "France"; + let found = 0; + for await (const phonePlanGroup of client.listPhonePlanGroupsTest(countryCode)) { + assert.equal(phonePlanGroup.localizedName, localizedName); + found += 1; + } + + assert.equal(found, 2, "Unexpected number of phone plan groups found by getPhonePlanGroups."); + }); + + it("can list phone plans", async () => { + const planGroupInfo: ListPhonePlansRequest = { + phonePlanGroupId: "1", + countryCode: "FR" + }; + let found = 0; + for await (const phonePlan of client.listPhonePlansTest(planGroupInfo)) { + assert.equal(phonePlan.localizedName, "France"); + found += 1; + } + + assert.equal(found, 2, "Unexpected number of phone plans found by getPhonePlans."); + }); + + it("can list releases", async () => { + let found = 0; + for await (const entity of client.listReleasesTest()) { + assert.isString(entity.id); + found += 1; + } + + assert.equal(found, 3, "Unexpected number of entities found by getReleases."); + }); + + it("can list searches", async () => { + let found = 0; + for await (const entity of client.listSearchesTest()) { + assert.isString(entity.id); + found += 1; + } + + assert.equal(found, 3, "Unexpected number of entities found by getSearches."); + }); +}); diff --git a/sdk/communication/communication-administration/test/list.spec.ts b/sdk/communication/communication-administration/test/list.spec.ts new file mode 100644 index 000000000000..a27ee154f84a --- /dev/null +++ b/sdk/communication/communication-administration/test/list.spec.ts @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { assert } from "chai"; +import { Recorder } from "@azure/test-utils-recorder"; +import { ListPhonePlansRequest, PhoneNumberAdministrationClient } from "../src"; +import { createRecordedPhoneNumberAdministrationClient } from "./utils/recordedClient"; + +describe("PhoneNumberAdministrationClient Lists [Playback/Live]", function() { + let recorder: Recorder; + let client: PhoneNumberAdministrationClient; + let planGroupIdToQuery: string; + + beforeEach(function() { + ({ client, recorder } = createRecordedPhoneNumberAdministrationClient(this)); + }); + + afterEach(async function() { + if (!this.currentTest?.isPending()) { + await recorder.stop(); + } + }); + + it("can list phone numbers", async () => { + for await (const acquired of client.listPhoneNumbers()) { + assert.isString(acquired.phoneNumber, "Unexpected type of acquired phone number"); + assert.isNotEmpty(acquired.acquiredCapabilities); + assert.isNotEmpty(acquired.availableCapabilities); + } + }); + + it("can list supported countries", async () => { + for await (const country of client.listSupportedCountries()) { + assert.isString(country.countryCode); + assert.isString(country.localizedName); + } + }); + + it("can list phone plan groups", async () => { + const countryCode = "US"; + + for await (const phonePlanGroup of client.listPhonePlanGroups(countryCode)) { + if (!planGroupIdToQuery) { + planGroupIdToQuery = phonePlanGroup.phonePlanGroupId; + } + + assert.isString(phonePlanGroup.phonePlanGroupId); + } + }); + + it("can list phone plans", async () => { + const planGroupInfo: ListPhonePlansRequest = { + phonePlanGroupId: planGroupIdToQuery, + countryCode: "US" + }; + + for await (const phonePlan of client.listPhonePlans(planGroupInfo)) { + assert.isString(phonePlan.phonePlanId); + } + }); + + it("can list releases", async () => { + for await (const entity of client.listReleases()) { + assert.isString(entity.id); + } + }); + + it("can list searches", async () => { + for await (const entity of client.listSearches()) { + assert.isString(entity.id); + } + }); +}); diff --git a/sdk/communication/communication-administration/test/phoneNumberAdministrationClient.mocked.spec.ts b/sdk/communication/communication-administration/test/phoneNumberAdministrationClient.mocked.spec.ts new file mode 100644 index 000000000000..2a378e668c51 --- /dev/null +++ b/sdk/communication/communication-administration/test/phoneNumberAdministrationClient.mocked.spec.ts @@ -0,0 +1,183 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { isNode } from "@azure/core-http"; +import { assert } from "chai"; +import sinon from "sinon"; +import { + GetAreaCodesRequest, + NumberConfiguration, + PhoneNumberAdministrationClient, + PhoneNumberCapabilitiesUpdates +} from "../src"; +import { SDK_VERSION } from "../src/phoneNumber/constants"; +import { NumberConfigurationPhoneNumber } from "../src/phoneNumber/generated/src/models"; +import { + baseHttpClient, + getAreaCodesHttpClient, + getReleaseHttpClient, + phoneNumbersCapabilitiesHttpClient, + releasePhoneNumbersHttpClient +} from "./utils/mockHttpClients"; +import { TestPhoneNumberAdministrationClient } from "./utils/testPhoneNumberAdministrationClient"; + +describe("PhoneNumberAdministrationClient [Mocked]", () => { + const dateHeader = isNode ? "date" : "x-ms-date"; + + afterEach(() => { + sinon.restore(); + }); + + it("creates instance of PhoneNumberAdministrationClient", () => { + const client = new PhoneNumberAdministrationClient( + "endpoint=https://contoso.spool.azure.local;accesskey=banana" + ); + assert.instanceOf(client, PhoneNumberAdministrationClient); + }); + + it("sets correct headers", async () => { + const client = new TestPhoneNumberAdministrationClient(); + const spy = sinon.spy(baseHttpClient, "sendRequest"); + + await client.configurePhoneNumberTest({ + phoneNumber: "+18005551234", + callbackUrl: "https://callback/" + }); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + + if (isNode) { + assert.equal(request.headers.get("host"), "contoso.spool.azure.local"); + } + + assert.typeOf(request.headers.get(dateHeader), "string"); + assert.isDefined(request.headers.get("authorization")); + assert.match( + request.headers.get("authorization") as string, + /HMAC-SHA256 SignedHeaders=.+&Signature=.+/ + ); + }); + + it("sends correct NumberConfiguration in configureNumber request", async () => { + const client = new TestPhoneNumberAdministrationClient(); + const spy = sinon.spy(baseHttpClient, "sendRequest"); + + await client.configurePhoneNumberTest({ + phoneNumber: "+18005551234", + callbackUrl: "https://callback/" + }); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + const expected: NumberConfiguration = { + phoneNumber: "+18005551234", + pstnConfiguration: { + callbackUrl: "https://callback/" + } + }; + assert.deepEqual(JSON.parse(request.body), expected); + }); + + it("sends correct phone number in unconfigureNumber request", async () => { + const client = new TestPhoneNumberAdministrationClient(); + const spy = sinon.spy(baseHttpClient, "sendRequest"); + + await client.unconfigurePhoneNumberTest("+18005551234"); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + const expected: NumberConfigurationPhoneNumber = { + phoneNumber: "+18005551234" + }; + assert.deepEqual(JSON.parse(request.body), expected); + }); + + it("sends correct UpdateNumberCapabilitiesRequest in updatePhoneNumbersCapabilities request", async () => { + const client = new TestPhoneNumberAdministrationClient(); + const spy = sinon.spy(phoneNumbersCapabilitiesHttpClient, "sendRequest"); + const phoneNumberCapabilitiesUpdate: PhoneNumberCapabilitiesUpdates = { + "+18005551234": { add: ["Calling"], remove: ["Office365"] } + }; + const response = await client.updatePhoneNumberCapabilitiesTest(phoneNumberCapabilitiesUpdate); + + assert.equal(response.capabilitiesUpdateId, "1"); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + assert.deepEqual(JSON.parse(request.body), { phoneNumberCapabilitiesUpdate }); + }); + + it("sends capabilitiesUpdateId in url of getCapabilitiesUpdate request", async () => { + const client = new TestPhoneNumberAdministrationClient(); + const capabilitiesUpdateId = "1"; + const spy = sinon.spy(phoneNumbersCapabilitiesHttpClient, "sendRequest"); + const response = await client.getCapabilitiesUpdateTest(capabilitiesUpdateId); + + assert.equal(response.capabilitiesUpdateId, capabilitiesUpdateId); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + assert.equal( + request.url, + `https://contoso.spool.azure.local/administration/phonenumbers/capabilities/${capabilitiesUpdateId}?api-version=${SDK_VERSION}` + ); + }); + + it("sends list of phone numbers in releasePhoneNumbers request", async () => { + const client = new TestPhoneNumberAdministrationClient(); + const phoneNumbers = ["+18005551234", "+1800555555"]; + const spy = sinon.spy(releasePhoneNumbersHttpClient, "sendRequest"); + const response = await client.releasePhoneNumbersTest(phoneNumbers); + + assert.equal(response.releaseId, "1"); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + assert.deepEqual(JSON.parse(request.body), { phoneNumbers }); + }); + + it("sends the releaseId in the url of getRelease request", async () => { + const client = new TestPhoneNumberAdministrationClient(); + const releaseId = "1"; + const spy = sinon.spy(getReleaseHttpClient, "sendRequest"); + const response = await client.getReleaseTest(releaseId); + + assert.equal(response.releaseId, releaseId); + assert.equal(response.status, "Complete"); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + assert.equal( + request.url, + `https://contoso.spool.azure.local/administration/phonenumbers/releases/${releaseId}?api-version=${SDK_VERSION}` + ); + }); + + it("sends location type, country code & phone plan id in url of getAreaCodes request", async () => { + const client = new TestPhoneNumberAdministrationClient(); + const searchRequest: GetAreaCodesRequest = { + locationType: "locationType", + countryCode: "US", + phonePlanId: "phonePlanId", + locationOptionsQueries: { + locationOptions: [ + { labelId: "state", optionsValue: "CA" }, + { labelId: "city", optionsValue: "NOAM-US-CA-LA" } + ] + } + }; + const spy = sinon.spy(getAreaCodesHttpClient, "sendRequest"); + const response = await client.getAreaCodesTest(searchRequest); + + assert.equal(response.primaryAreaCodes?.length, 2); + assert.equal(response.secondaryAreaCodes?.length, 1); + sinon.assert.calledOnce(spy); + + const request = spy.getCall(0).args[0]; + assert.equal( + request.url, + `https://contoso.spool.azure.local/administration/phonenumbers/countries/${searchRequest.countryCode}/areacodes?locationType=${searchRequest.locationType}&phonePlanId=${searchRequest.phonePlanId}&api-version=${SDK_VERSION}` + ); + }); +}); diff --git a/sdk/communication/communication-administration/test/phoneNumberAdministrationClient.spec.ts b/sdk/communication/communication-administration/test/phoneNumberAdministrationClient.spec.ts new file mode 100644 index 000000000000..d5376fa90cd6 --- /dev/null +++ b/sdk/communication/communication-administration/test/phoneNumberAdministrationClient.spec.ts @@ -0,0 +1,106 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { assert } from "chai"; +import { Recorder } from "@azure/test-utils-recorder"; +import { ListPhonePlansRequest, LocationOptions, PhoneNumberAdministrationClient } from "../src"; +import { createRecordedPhoneNumberAdministrationClient } from "./utils/recordedClient"; + +describe("PhoneNumberAdministrationClient [Playback/Live]", function() { + let recorder: Recorder; + let client: PhoneNumberAdministrationClient; + let includePhoneNumberTests: boolean; + let phonePlanGroupId: string; + let phonePlanId: string; + let locationOptions: LocationOptions | undefined; + let searchId: string; + const countryCode = "US"; + + beforeEach(function() { + ({ client, recorder, includePhoneNumberTests } = createRecordedPhoneNumberAdministrationClient( + this + )); + }); + + afterEach(async function() { + if (!this.currentTest?.isPending()) { + await recorder.stop(); + } + }); + + it("can get phonePlanGroupId and phonePlanId for other tests", async function() { + if (!includePhoneNumberTests) { + this.skip(); + } + + for await (const phonePlanGroup of client.listPhonePlanGroups(countryCode)) { + assert.isString(phonePlanGroup.phonePlanGroupId); + ({ phonePlanGroupId } = phonePlanGroup); + assert.isString(phonePlanGroupId); + + break; + } + + const planGroupInfo: ListPhonePlansRequest = { + phonePlanGroupId, + countryCode + }; + + for await (const phonePlan of client.listPhonePlans(planGroupInfo)) { + assert.isString(phonePlan.phonePlanId); + ({ phonePlanId } = phonePlan); + assert.isString(phonePlanId); + } + }).timeout(5000); + + it("can get location options", async function() { + if (!includePhoneNumberTests) { + this.skip(); + } + + ({ locationOptions } = await client.getPhonePlanLocationOptions({ + countryCode, + phonePlanGroupId, + phonePlanId + })); + + assert.isDefined(locationOptions); + assert.isString(locationOptions?.labelId); + assert.isString(locationOptions?.labelName); + }); + + it("can get area codes", async function() { + if (!includePhoneNumberTests) { + this.skip(); + } + + const { primaryAreaCodes } = await client.getAreaCodes({ + locationType: "selection", + countryCode, + phonePlanId, + locationOptionsQueries: { + locationOptions: [ + { labelId: "state", optionsValue: "CA" }, + { labelId: "city", optionsValue: "NOAM-US-CA-LA" } + ] + } + }); + + assert.isArray(primaryAreaCodes); + }); + + it("can start a phone number search", async function() { + if (!includePhoneNumberTests) { + this.skip(); + } + + ({ searchId } = await client.createSearch({ + phonePlanIds: [phonePlanId], + areaCode: "800", + name: "LRO Test Search", + description: "Test search for JS phone number admin SDK.", + quantity: 1 + })); + assert.isString(searchId); + }); +}); diff --git a/sdk/communication/communication-administration/test/utils/mockHttpClients.ts b/sdk/communication/communication-administration/test/utils/mockHttpClients.ts new file mode 100644 index 000000000000..c4e19703f33e --- /dev/null +++ b/sdk/communication/communication-administration/test/utils/mockHttpClients.ts @@ -0,0 +1,169 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { HttpClient, WebResourceLike, HttpOperationResponse, HttpHeaders } from "@azure/core-http"; +import { + AcquiredPhoneNumber, + AcquiredPhoneNumbers, + AreaCodes, + CommunicationIdentityToken, + PhoneNumberCountries, + PhoneNumberCountry, + PhoneNumberEntities, + PhoneNumberEntity, + PhoneNumberRelease, + PhonePlan, + PhonePlanGroup, + PhonePlanGroups, + PhonePlansResponse, + ReleaseResponse, + UpdateNumberCapabilitiesResponse +} from "../../src"; +import { CommunicationIdentity } from "../../src/communicationIdentity/generated/src/models"; + +export const createMockHttpClient = (status: number = 200, parsedBody?: T): HttpClient => { + return { + async sendRequest(httpRequest: WebResourceLike): Promise { + return { + status, + headers: new HttpHeaders(), + request: httpRequest, + parsedBody + }; + } + }; +}; + +export const baseHttpClient: HttpClient = createMockHttpClient(); + +export const base202HttpClient: HttpClient = createMockHttpClient(202); + +const tokenResponse = { + id: "identity", + token: "token", + expiresOn: new Date("2011/11/30") +}; + +export const issueTokenHttpClient: HttpClient = createMockHttpClient( + 200, + tokenResponse +); +export const revokeTokensHttpClient: HttpClient = createMockHttpClient(204); + +export const createUserHttpClient: HttpClient = createMockHttpClient(200, { + id: "identity" +}); + +const phoneNumbers: AcquiredPhoneNumber[] = [ + { + phoneNumber: "+18005551234", + acquiredCapabilities: ["Calling"], + availableCapabilities: ["Calling"] + }, + { + phoneNumber: "+18005555555", + acquiredCapabilities: ["Azure"], + availableCapabilities: ["Premium"] + }, + { + phoneNumber: "+18005559876", + acquiredCapabilities: ["Calling"], + availableCapabilities: ["Azure"] + } +]; + +export const listPhoneNumbersHttpClient: HttpClient = createMockHttpClient( + 200, + { phoneNumbers } +); + +const countries: PhoneNumberCountry[] = [ + { + localizedName: "France", + countryCode: "FR" + }, + { + localizedName: "Canada", + countryCode: "CA" + } +]; + +export const listSupportedCountriesHttpClient: HttpClient = createMockHttpClient< + PhoneNumberCountries +>(200, { + countries +}); + +const phonePlanGroups: PhonePlanGroup[] = [ + { + phonePlanGroupId: "1", + localizedName: "France", + localizedDescription: "The #1 plan." + }, + { + phonePlanGroupId: "2", + localizedName: "France", + localizedDescription: "The #2 plan." + } +]; + +export const listPhonePlanGroupsHttpClient: HttpClient = createMockHttpClient( + 200, + { phonePlanGroups } +); + +const phonePlans: PhonePlan[] = [ + { + phonePlanId: "1", + localizedName: "France", + locationType: "NotRequired" + }, + { + phonePlanId: "2", + localizedName: "France", + locationType: "CivicAddress" + } +]; + +export const listPhonePlansHttpClient: HttpClient = createMockHttpClient(200, { + phonePlans +}); + +const entities: PhoneNumberEntity[] = [{ id: "1" }, { id: "2" }, { id: "3" }]; + +export const listReleasesOrSearchesHttpClient: HttpClient = createMockHttpClient< + PhoneNumberEntities +>(200, { entities }); + +export const phoneNumbersCapabilitiesHttpClient: HttpClient = createMockHttpClient< + UpdateNumberCapabilitiesResponse +>(200, { capabilitiesUpdateId: "1" }); + +export const releasePhoneNumbersHttpClient: HttpClient = createMockHttpClient( + 200, + { + releaseId: "1" + } +); + +const phoneNumberRelease: PhoneNumberRelease = { + releaseId: "1", + createdAt: new Date(), + status: "Complete", + phoneNumberReleaseStatusDetails: { + "+18005551234": { status: "Success" }, + "+18005555555": { status: "Success" } + } +}; + +export const getReleaseHttpClient: HttpClient = createMockHttpClient( + 200, + phoneNumberRelease +); + +const areaCodes: AreaCodes = { + primaryAreaCodes: ["555", "555"], + secondaryAreaCodes: ["555"] +}; + +export const getAreaCodesHttpClient: HttpClient = createMockHttpClient(200, areaCodes); diff --git a/sdk/communication/communication-administration/test/utils/recordedClient.ts b/sdk/communication/communication-administration/test/utils/recordedClient.ts new file mode 100644 index 000000000000..20968e214c5e --- /dev/null +++ b/sdk/communication/communication-administration/test/utils/recordedClient.ts @@ -0,0 +1,81 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { Context } from "mocha"; +import * as dotenv from "dotenv"; + +import { env, Recorder, record, RecorderEnvironmentSetup } from "@azure/test-utils-recorder"; +import { isNode } from "@azure/core-http"; +import { CommunicationIdentityClient, PhoneNumberAdministrationClient } from "../../src"; + +if (isNode) { + dotenv.config(); +} + +export interface RecordedClient { + client: T; + recorder: Recorder; +} + +const replaceableVariables: { [k: string]: string } = { + COMMUNICATION_CONNECTION_STRING: "endpoint=https://endpoint/;accesskey=banana", + INCLUDE_PHONENUMBER_TESTS: "false" +}; + +export const environmentSetup: RecorderEnvironmentSetup = { + replaceableVariables, + customizationsOnRecordings: [ + (recording: string): string => + recording.replace(/"token"\s?:\s?"[^"]*"/g, `"token":"sanitized"`), + (recording: string): string => recording.replace(/(https:\/\/)([^\/',]*)/, "$1endpoint"), + /** + * Must replace date saved to tokensValidFrom as to not + * break playback tests. + */ + (recording: string): string => { + return recording.replace( + /"tokensValidFrom"\s?:\s?"[^"]*"/g, + `"tokensValidFrom":"2020-10-10T00:00:00.000Z"` + ); + }, + (recording: string): string => recording.replace(/"id"\s?:\s?"[^"]*"/g, `"id":"sanitized"`), + (recording: string): string => { + return recording.replace( + /(https:\/\/[^\/',]*\/identities\/)[^\/',]*(\/token)/, + "$1sanitized$2" + ); + }, + (recording: string): string => + recording.replace(/\/identities\/[^\/'",]*/, "/identities/sanitized"), + (recording: string): string => + recording.replace(/"phoneNumber"\s?:\s?"[^"]*"/g, `"phoneNumber":"+18005551234"`), + (recording: string): string => + recording.replace(/[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/gi, "sanitized") + ], + queryParametersToSkip: [] +}; + +export function createRecordedCommunicationIdentityClient( + context: Context +): RecordedClient { + const recorder = record(context, environmentSetup); + + return { + client: new CommunicationIdentityClient(env.COMMUNICATION_CONNECTION_STRING), + recorder + }; +} + +export function createRecordedPhoneNumberAdministrationClient( + context: Context +): RecordedClient & { + includePhoneNumberTests: boolean; +} { + const recorder = record(context, environmentSetup); + + return { + client: new PhoneNumberAdministrationClient(env.COMMUNICATION_CONNECTION_STRING), + recorder, + includePhoneNumberTests: env.INCLUDE_PHONENUMBER_TESTS == "true" + }; +} diff --git a/sdk/communication/communication-administration/test/utils/testCommunicationIdentityClient.ts b/sdk/communication/communication-administration/test/utils/testCommunicationIdentityClient.ts new file mode 100644 index 000000000000..73c08cfc9e99 --- /dev/null +++ b/sdk/communication/communication-administration/test/utils/testCommunicationIdentityClient.ts @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { OperationOptions, RestResponse } from "@azure/core-http"; +import { CommunicationUser } from "@azure/communication-common"; +import { + CommunicationIdentityClient, + TokenScope, + IssueTokenResponse, + CreateUserResponse +} from "../../src"; +import { + issueTokenHttpClient, + createUserHttpClient, + revokeTokensHttpClient +} from "./mockHttpClients"; + +export class TestCommunicationIdentityClient { + private connectionString: string = "endpoint=https://contoso.spool.azure.local;accesskey=banana"; + + public async issueTokenTest( + user: CommunicationUser, + scopes: TokenScope[], + options: OperationOptions = {} + ): Promise { + const client = new CommunicationIdentityClient(this.connectionString, { + httpClient: issueTokenHttpClient + }); + return client.issueToken(user, scopes, options); + } + + public async revokeTokensTest( + user: CommunicationUser, + revocationTime?: Date, + options: OperationOptions = {} + ): Promise { + const client = new CommunicationIdentityClient(this.connectionString, { + httpClient: revokeTokensHttpClient + }); + return client.revokeTokens(user, revocationTime, options); + } + + public async createUserTest(options: OperationOptions = {}): Promise { + const client = new CommunicationIdentityClient(this.connectionString, { + httpClient: createUserHttpClient + }); + return client.createUser(options); + } +} diff --git a/sdk/communication/communication-administration/test/utils/testPhoneNumberAdministrationClient.ts b/sdk/communication/communication-administration/test/utils/testPhoneNumberAdministrationClient.ts new file mode 100644 index 000000000000..124f6421d35a --- /dev/null +++ b/sdk/communication/communication-administration/test/utils/testPhoneNumberAdministrationClient.ts @@ -0,0 +1,189 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import { PagedAsyncIterableIterator } from "@azure/core-paging"; +import { + AcquiredPhoneNumber, + ListPhoneNumbersOptions, + ListPhonePlansOptions, + ListPhonePlansRequest, + ListPhonePlanGroupsOptions, + ListSupportedCountriesOptions, + PageableOptions, + PhoneNumberAdministrationClient, + PhoneNumberCountry, + PhoneNumberEntity, + PhonePlan, + PhonePlanGroup, + ConfigurePhoneNumberRequest, + ConfigurePhoneNumberOptions, + VoidResponse, + PhoneNumberCapabilitiesUpdates, + UpdateCapabilitiesOptions, + UpdateNumbersCapabilitiesResponse, + GetCapabilitiesUpdateResponse, + ReleasePhoneNumbersResponse, + GetReleaseResponse, + GetAreaCodesRequest, + GetAreaCodesOptions, + GetAreaCodesResponse, + GetReleaseOptions, + ReleasePhoneNumberOptions, + GetCapabilitiesUpdateOptions, + UnconfigurePhoneNumberOptions +} from "../../src"; +import { + baseHttpClient, + getAreaCodesHttpClient, + getReleaseHttpClient, + listPhoneNumbersHttpClient, + listPhonePlanGroupsHttpClient, + listPhonePlansHttpClient, + listReleasesOrSearchesHttpClient, + listSupportedCountriesHttpClient, + phoneNumbersCapabilitiesHttpClient, + releasePhoneNumbersHttpClient +} from "./mockHttpClients"; + +export class TestPhoneNumberAdministrationClient { + private connectionString: string = "endpoint=https://contoso.spool.azure.local;accesskey=banana"; + + public listPhoneNumbersTest( + options: ListPhoneNumbersOptions = {} + ): PagedAsyncIterableIterator { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: listPhoneNumbersHttpClient + }); + + return client.listPhoneNumbers(options); + } + + public listSupportedCountriesTest( + options: ListSupportedCountriesOptions = {} + ): PagedAsyncIterableIterator { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: listSupportedCountriesHttpClient + }); + + return client.listSupportedCountries(options); + } + + public listPhonePlanGroupsTest( + countryCode: string, + options: ListPhonePlanGroupsOptions = {} + ): PagedAsyncIterableIterator { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: listPhonePlanGroupsHttpClient + }); + + return client.listPhonePlanGroups(countryCode, options); + } + + public listPhonePlansTest( + planGroupInfo: ListPhonePlansRequest, + options: ListPhonePlansOptions = {} + ): PagedAsyncIterableIterator { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: listPhonePlansHttpClient + }); + + return client.listPhonePlans(planGroupInfo, options); + } + + public listReleasesTest( + options: PageableOptions = {} + ): PagedAsyncIterableIterator { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: listReleasesOrSearchesHttpClient + }); + + return client.listReleases(options); + } + + public listSearchesTest( + options: PageableOptions = {} + ): PagedAsyncIterableIterator { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: listReleasesOrSearchesHttpClient + }); + + return client.listSearches(options); + } + + public async configurePhoneNumberTest( + config: ConfigurePhoneNumberRequest, + options: ConfigurePhoneNumberOptions = {} + ): Promise { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: baseHttpClient + }); + + return client.configurePhoneNumber(config, options); + } + + public async unconfigurePhoneNumberTest( + phoneNumber: string, + options: UnconfigurePhoneNumberOptions = {} + ): Promise { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: baseHttpClient + }); + + return client.unconfigurePhoneNumber(phoneNumber, options); + } + + public async updatePhoneNumberCapabilitiesTest( + phoneNumberCapabilitiesUpdates: PhoneNumberCapabilitiesUpdates, + options: UpdateCapabilitiesOptions = {} + ): Promise { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: phoneNumbersCapabilitiesHttpClient + }); + + return client.updatePhoneNumbersCapabilities(phoneNumberCapabilitiesUpdates, options); + } + + public async getCapabilitiesUpdateTest( + capabilitiesUpdateId: string, + options: GetCapabilitiesUpdateOptions = {} + ): Promise { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: phoneNumbersCapabilitiesHttpClient + }); + + return client.getCapabilitiesUpdate(capabilitiesUpdateId, options); + } + + public async releasePhoneNumbersTest( + phoneNumbers: string[], + options: ReleasePhoneNumberOptions = {} + ): Promise { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: releasePhoneNumbersHttpClient + }); + + return client.releasePhoneNumbers(phoneNumbers, options); + } + + public async getReleaseTest( + releaseId: string, + options: GetReleaseOptions = {} + ): Promise { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: getReleaseHttpClient + }); + + return client.getRelease(releaseId, options); + } + + public async getAreaCodesTest( + request: GetAreaCodesRequest, + options: GetAreaCodesOptions = {} + ): Promise { + const client = new PhoneNumberAdministrationClient(this.connectionString, { + httpClient: getAreaCodesHttpClient + }); + + return client.getAreaCodes(request, options); + } +} diff --git a/sdk/communication/communication-administration/tests.yml b/sdk/communication/communication-administration/tests.yml new file mode 100644 index 000000000000..af3010fa96fd --- /dev/null +++ b/sdk/communication/communication-administration/tests.yml @@ -0,0 +1,7 @@ +trigger: none + +extends: + template: ../../../eng/pipelines/templates/jobs/archetype-sdk-integration.yml + parameters: + PackageName: "@azure/communication-administration" + ResourceServiceDirectory: communication diff --git a/sdk/communication/communication-administration/tsconfig.json b/sdk/communication/communication-administration/tsconfig.json new file mode 100644 index 000000000000..01b339f5a963 --- /dev/null +++ b/sdk/communication/communication-administration/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../../tsconfig.package", + "compilerOptions": { + "outDir": "./dist-esm", + "declarationDir": "./types" + }, + "exclude": [ + "node_modules", + "types", + "temp", + "browser", + "dist", + "dist-esm", + "dist-samples", + "./samples/**/*.ts" + ] +} diff --git a/sdk/communication/communication-chat/.gitignore b/sdk/communication/communication-chat/.gitignore new file mode 100644 index 000000000000..e35e6c4bbeb0 --- /dev/null +++ b/sdk/communication/communication-chat/.gitignore @@ -0,0 +1 @@ +/**/code-model-v* \ No newline at end of file diff --git a/sdk/communication/communication-chat/.vscode/launch.json b/sdk/communication/communication-chat/.vscode/launch.json new file mode 100644 index 000000000000..458b9b5c32c6 --- /dev/null +++ b/sdk/communication/communication-chat/.vscode/launch.json @@ -0,0 +1,45 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Debug Mocha Test [Without Rollup]", + "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", + "args": [ + "-r", + "ts-node/register", + "--timeout", + "999999", + "--colors", + "${workspaceFolder}/test/*.spec.ts", + "${workspaceFolder}/test/node/*.spec.ts" + ], + "env": { + "TS_NODE_COMPILER_OPTIONS": "{\"module\": \"commonjs\"}" + }, + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "protocol": "inspector" + }, + { + "type": "node", + "request": "launch", + "name": "Debug Unit Tests", + "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", + "args": [ + "-u", + "tdd", + "--timeout", + "999999", + "--colors", + "${workspaceFolder}/dist-test/index.node.js" + ], + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": "npm: build:test" + } + ] +} diff --git a/sdk/communication/communication-chat/.vscode/tasks.json b/sdk/communication/communication-chat/.vscode/tasks.json new file mode 100644 index 000000000000..83bb44526db4 --- /dev/null +++ b/sdk/communication/communication-chat/.vscode/tasks.json @@ -0,0 +1,16 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Build Node", + "type": "npm", + "script": "build:node", + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/sdk/communication/communication-chat/CHANGELOG.md b/sdk/communication/communication-chat/CHANGELOG.md new file mode 100644 index 000000000000..e71e68ede491 --- /dev/null +++ b/sdk/communication/communication-chat/CHANGELOG.md @@ -0,0 +1,19 @@ +# Release History + +## 1.0.0-beta.3 (Unreleased) + +## 1.0.0-beta.2 (2020-10-06) + +Updated `@azure/communication-chat` version + +## 1.0.0-beta.1 (2020-09-22) + +The first preview of the Azure Communication Chat Client has the following features: + +- create/get/update/delete a chat thread +- list all chat threads the user join +- create/get/update/delete a chat message +- list all chat messages in a chat thread +- add members in a chat thread +- delete a member in a chat thread +- list all members in a chat thread diff --git a/sdk/communication/communication-chat/LICENSE b/sdk/communication/communication-chat/LICENSE new file mode 100644 index 000000000000..ea8fb1516028 --- /dev/null +++ b/sdk/communication/communication-chat/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 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. diff --git a/sdk/communication/communication-chat/README.md b/sdk/communication/communication-chat/README.md new file mode 100644 index 000000000000..b2b0c96eff82 --- /dev/null +++ b/sdk/communication/communication-chat/README.md @@ -0,0 +1,188 @@ +# Azure Communication Chat client library for JavaScript + +Azure Communication Services for Chat lets developers add chat capabilities to their app. Use this client library to manage chat threads and their users, and send and receive chat messages. + +Read more about Azure Communication Services [here](https://docs.microsoft.com/azure/communication-services/overview) + +## Getting started + +## Prerequisites + +- An [Azure subscription][azure_sub]. +- An existing Communication Services resource. If you need to create the resource, you can use the [Azure Portal][azure_portal] or [Azure CLI][azure_cli]. +- [Node.js](https://nodejs.org) + +### Installing + +```bash +npm install @azure/communication-chat +``` + +## Key concepts + +A chat conversation is represented by a thread. Each user in the thread is called a thread member. Thread members can chat with one another privately in a 1:1 chat or huddle up in a 1:N group chat. Users also get near-real time updates for when others are typing and when they have read the messages. + +### ChatClient + +`ChatClient` is the primary interface for developers using this client library. It provides asynchronous methods to create and delete a thread. + +### ChatThreadClient + +`ChatThreadClient` provides asynchronous methods to do the message and chat thread members operations within the chat thread. + +## Examples + +### Initialize ChatClient + +Use resource url and user access token to initialize chat client. + +```JavaScript +import { ChatClient } from '@azure/communicationservices-chat'; +import { AzureCommunicationUserCredential } from "@azure/communication-common"; + +// Your unique Azure Communication service endpoint +let endpointUrl = ''; +let userAccessToken = ''; +let userCredential = new AzureCommunicationUserCredential(userAccessToken); +let chatClient = new ChatClient(endpointUrl, userCredential); + +``` + +### Create a thread with two users + +Use the `createThread` method to create a chat thread. + +`createThreadRequest` is used to describe the thread request: + +- Use `topic` to give a thread topic; +- Use `members` to list the thread members to be added to the thread; + +`chatThreadClient` is the response returned from creating a thread, it contains an `threadId` which is the unique ID of the thread. + +```Javascript +let createThreadRequest = +{ + topic: 'Preparation for London conference', + members: + [ + { + user: { communicationUserId: '' }, + displayName: 'Jack' + }, + { + user: { communicationUserId: '' }, + displayName: 'Geeta' + } + ] +}; +let chatThreadClient= await chatClient.createChatThread(createThreadRequest); +let threadId = chatThreadClient.threadId; +``` + +### Send a message to the thread + +Use `sendMessage` method to sends a message to a thread identified by threadId. + +`sendMessageRequest` is used to describe the message request: + +- Use `content` to provide the chat message content; + +`sendMessageOptions` is used to describe the operation optional params: + +- Use `priority` to specify the message priority level, such as 'Normal' or 'High' ; +- Use `senderDisplayName` to specify the display name of the sender; + +`sendChatMessageResult` is the response returned from sending a message, it contains an ID, which is the unique ID of the message. + +```JavaScript +let sendMessageRequest = +{ + content: 'Hello Geeta! Can you share the deck for the conference?' +}; +let sendMessageOptions = +{ + priority: 'Normal', + senderDisplayName : 'Jack' +}; +let sendChatMessageResult = await chatThreadClient.sendMessage(sendMessageRequest, sendMessageOptions); +let messageId = sendChatMessageResult.id; +``` + +### Receive messages from a thread + +With real-time signaling, you can subscribe to listen for new incoming messages and update the current messages in memory accordingly. + +```JavaScript + +// open notifications channel +await chatClient.startRealtimeNotifications(); +// subscribe to new notification +chatClient.on("chatMessageReceived", (e) => { + console.log("Notification chatMessageReceived!"); + // your code here +}); + +``` + +Alternatively you can retrieve chat messages by polling the `listMessages` method at specified intervals. + +```JavaScript +for await (const chatMessage of chatThreadClient.listMessages()) { + // your code here +} +``` + +### Add Users to a thread + +Once a thread is created, you can then add and remove users from that thread. By adding users, you give them access to be able to send messages to the thread. +You will need to start by getting a new access token and identity for that user. The user will need that access token in order to initialize their chat client. +More information on tokens here: [Authenticate to Azure Communication Services](https://docs.microsoft.com/azure/communication-services/concepts/authentication?tabs=javascript) + +```JavaScript +// Get a new token created for the user. The token response will contain a token and an identity for the user. +let userTokenResponse = await myTokenFunction(); + +let addMembersRequest = +{ + members: [ + { + user: { communicationUserId: userTokenResponse.identity }, + displayName: '', + shareHistoryTime: '