From 367199431e9d24a01b64ad4d29f9e5a80862ff3b Mon Sep 17 00:00:00 2001 From: Ozan Aydin Date: Tue, 20 Dec 2022 11:22:21 +0100 Subject: [PATCH 01/10] Revert "Revert m214 changes to keyvaulttaskV1/2 (#17503)" This reverts commit 9ae503448012a35b604345766790ef5f39e17905. --- Tasks/AzureKeyVaultV1/README.md | 13 +- Tasks/AzureKeyVaultV1/Tests/L0.ts | 18 +- Tasks/AzureKeyVaultV1/npm-shrinkwrap.json | 658 ++++++++++++++++++---- Tasks/AzureKeyVaultV1/package.json | 8 +- Tasks/AzureKeyVaultV1/task.json | 4 +- Tasks/AzureKeyVaultV1/task.loc.json | 6 +- Tasks/AzureKeyVaultV2/Tests/L0.ts | 22 +- Tasks/AzureKeyVaultV2/npm-shrinkwrap.json | 650 +++++++++++++++++---- Tasks/AzureKeyVaultV2/package.json | 8 +- Tasks/AzureKeyVaultV2/task.json | 4 +- Tasks/AzureKeyVaultV2/task.loc.json | 4 +- 11 files changed, 1149 insertions(+), 246 deletions(-) diff --git a/Tasks/AzureKeyVaultV1/README.md b/Tasks/AzureKeyVaultV1/README.md index 905b81f3fc61..aec71e08e4bc 100644 --- a/Tasks/AzureKeyVaultV1/README.md +++ b/Tasks/AzureKeyVaultV1/README.md @@ -51,7 +51,7 @@ Ensure the Azure endpoint has at least Get and List permissions for Secrets on t For example, if there is a secret name: connectionString, a task variable `$(connectionString)` is created with the latest fetched value of the respective secret from Azure key vault. And this secret variable would be available to be consumed in subsequent tasks. -If it is a certificate (example: a PFX file) that is fetched from the vault, then the task variable would contain the content of the PFX in string format. To retrieve the PFX file from the task variable, the following sample PowerShell code can be used (after passing the certificate variable as a parameter to the script): +Certificates are also fetched from the vault as secrets. In this case, the task variable would contain the content of the PFX in base64 string format. To convert the string into a PFX file from the task variable, the following sample PowerShell code can be used (after passing the certificate variable as a parameter to the script): ```powershell # Task parameters: $(PfxSecret) @@ -61,7 +61,16 @@ If it is a certificate (example: a PFX file) that is fetched from the vault, the $certCollection.Import($kvSecretBytes, $null, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) ``` -If the certificate file needs to be stored on the hard disk then it is good practice to encrypt it with a password: +Here's an example of how you can import the certificate into a local store: + +```powershell + $CertStore = New-Object System.Security.Cryptography.X509Certificates.X509Store("My","LocalMachine") + $CertStore.Open("ReadWrite") + $CertStore.AddRange($certCollection) + $CertStore.Close() +``` + +Alternatively, if the certificate file needs to be stored as a PFX file on the hard disk then it is good practice to encrypt it with a password: ```powershell # Get the file created diff --git a/Tasks/AzureKeyVaultV1/Tests/L0.ts b/Tasks/AzureKeyVaultV1/Tests/L0.ts index 11edaf29677b..0d4a3b977770 100644 --- a/Tasks/AzureKeyVaultV1/Tests/L0.ts +++ b/Tasks/AzureKeyVaultV1/Tests/L0.ts @@ -31,11 +31,11 @@ describe('Azure Key Vault', function () { assert(tr.stdout.indexOf("getSecretValue is called for secret4") < 0, "getSecretValue should not be called for secret4"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret1;issecret=true;]secret1-value") > 0, "##vso[task.setvariable variable=secret1;issecret=true;]secret1-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret2;issecret=true;]secret2-value") > 0, "##vso[task.setvariable variable=secret2;issecret=true;]secret2-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3;issecret=true;]secret3-value") > 0, "##vso[task.setvariable variable=secret3;issecret=true;]secret3-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret1;isOutput=false;issecret=true;]secret1-value") > 0, "##vso[task.setvariable variable=secret1;isOutput=false;issecret=true;]secret1-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret2;isOutput=false;issecret=true;]secret2-value") > 0, "##vso[task.setvariable variable=secret2;isOutput=false;issecret=true;]secret2-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3;isOutput=false;issecret=true;]secret3-value") > 0, "##vso[task.setvariable variable=secret3;isOutput=false;issecret=true;]secret3-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret4;issecret=true;]secret4-value") < 0, "secret4 value should not be set"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret4;isOutput=false;issecret=true;]secret4-value") < 0, "secret4 value should not be set"); done(); } @@ -62,12 +62,12 @@ describe('Azure Key Vault', function () { assert(tr.stdout.indexOf("getSecretValue is called for secret2") > 0, "getSecretValue is called for secret2"); assert(tr.stdout.indexOf("getSecretValue is called for secret3/versionIdentifierGuid") > 0, "getSecretValue is called for secret3/versionIdentifierGuid"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret1;issecret=true;]secret1-value") > 0, "##vso[task.setvariable variable=secret1;issecret=true;]secret1-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret2;issecret=true;]secret2-value") > 0, "##vso[task.setvariable variable=secret2;issecret=true;]secret2-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3;issecret=true;]secret3/versionIdentifierGuid-value") > 0, "##vso[task.setvariable variable=secret3;issecret=true;]secret3/versionIdentifierGuid-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3/versionIdentifierGuid;issecret=true;]secret3/versionIdentifierGuid-value") > 0, "##vso[task.setvariable variable=secret3/versionIdentifierGuid;issecret=true;]secret3/versionIdentifierGuid-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret1;isOutput=false;issecret=true;]secret1-value") > 0, "##vso[task.setvariable variable=secret1;issecret=true;]secret1-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret2;isOutput=false;issecret=true;]secret2-value") > 0, "##vso[task.setvariable variable=secret2;issecret=true;]secret2-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3;isOutput=false;issecret=true;]secret3/versionIdentifierGuid-value") > 0, "##vso[task.setvariable variable=secret3;issecret=true;]secret3/versionIdentifierGuid-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3/versionIdentifierGuid;isOutput=false;issecret=true;]secret3/versionIdentifierGuid-value") > 0, "##vso[task.setvariable variable=secret3/versionIdentifierGuid;issecret=true;]secret3/versionIdentifierGuid-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret4;issecret=true;]secret4-value") < 0, "secret4 value should not be set"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret4;isOutput=false;issecret=true;]secret4-value") < 0, "secret4 value should not be set"); done(); } diff --git a/Tasks/AzureKeyVaultV1/npm-shrinkwrap.json b/Tasks/AzureKeyVaultV1/npm-shrinkwrap.json index 09cbc83fa61d..f7899aa2138a 100644 --- a/Tasks/AzureKeyVaultV1/npm-shrinkwrap.json +++ b/Tasks/AzureKeyVaultV1/npm-shrinkwrap.json @@ -3,6 +3,52 @@ "requires": true, "lockfileVersion": 1, "dependencies": { + "@azure/msal-common": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-8.0.0.tgz", + "integrity": "sha512-KLGVmWoDcpWl/SKb4TZUjWm+l3lim4tUwAAvCM8N8rSHu8r0NtMTySMWBv7d3G8as1SvC4nr3eTae1+9hTp4wg==" + }, + "@azure/msal-node": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.3.tgz", + "integrity": "sha512-95fuxbSq/5PNlxWybQID8ShFBMjYSN0XvHUPmelwgsgJiO3F+TN5SpIvjgLGa+aMVAxEYq6TvKXK+I3qm1EMqQ==", + "requires": { + "@azure/msal-common": "^8.0.0", + "jsonwebtoken": "^8.5.1", + "uuid": "^8.3.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "requires": { + "@types/node": "*" + } + }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "requires": { + "@types/node": "*" + } + }, + "@types/jsonwebtoken": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", + "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "requires": { + "@types/node": "*" + } + }, "@types/mocha": { "version": "5.2.7", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", @@ -18,52 +64,113 @@ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==" }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, "@types/uuid": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "azure-devops-node-api": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", + "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, "azure-pipelines-task-lib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-2.8.0.tgz", - "integrity": "sha512-PR8oap9z2j+o455W3PwAfB4SX1p4GdJc9OHQaQV0V+iQS1IBY6dVgcNSQMkHAXb0V1bbuLOFBLanXPe5eSgGTQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.0.2.tgz", + "integrity": "sha512-TNFIZVrmYne9rjYRtjrzx0Z4ZepMMISe62RF7cvlujMXRKlSpQjGqxQ4Q6YLC4p+52uAfFBf+sBSLpG6TMC9Xw==", "requires": { - "minimatch": "3.0.4", - "mockery": "^1.7.0", - "q": "^1.1.2", + "minimatch": "3.0.5", + "mockery": "^2.1.0", + "q": "^1.5.1", "semver": "^5.1.0", - "shelljs": "^0.3.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", "uuid": "^3.0.1" + }, + "dependencies": { + "mockery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" + } } }, "azure-pipelines-tasks-azure-arm-rest-v2": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-1.0.4.tgz", - "integrity": "sha512-aEo1zwRZ5sYSh6AzZEWP+nFrD9TcnqoNlNy+7ItLEPKr266ToAM97vEj8vFqgtoAapMHawlErN173Uwq6TnRIA==", - "requires": { - "@types/mocha": "2.2.48", - "@types/node": "6.0.68", - "@types/q": "1.0.7", - "azure-pipelines-task-lib": "2.8.0", - "jsonwebtoken": "7.3.0", - "q": "1.4.1", - "typed-rest-client": "1.7.3" + "version": "3.213.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-3.213.0.tgz", + "integrity": "sha512-KW0Yw0YcTcArOEcXVNcyKvM/cbNpCgmvluNrcCr/o/Kpf7mlI7t9YeW9Gv+844/LAb5vreg5mPm9GX9XW8mLCA==", + "requires": { + "@azure/msal-node": "^1.14.2", + "@types/jsonwebtoken": "^8.5.8", + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@types/q": "1.5.4", + "azure-pipelines-task-lib": "^3.1.0", + "jsonwebtoken": "^8.5.1", + "q": "1.5.1", + "typed-rest-client": "1.8.4" }, "dependencies": { - "@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==" + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, - "@types/node": { - "version": "6.0.68", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.68.tgz", - "integrity": "sha1-DEO2uLlEX+uGoPvTRX4/S8WR5m0=" + "azure-pipelines-task-lib": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz", + "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==", + "requires": { + "minimatch": "3.0.5", + "mockery": "^1.7.0", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", + "uuid": "^3.0.1" + } }, - "@types/q": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.0.7.tgz", - "integrity": "sha512-0WS7XU7sXzQ7J1nbnMKKYdjrrFoO3YtZYgUzeV8JFXffPnHfvSJQleR70I8BOAsOm14i4dyaAZ3YzqIl1YhkXQ==" + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } } } }, @@ -84,12 +191,60 @@ "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "ecdsa-sig-formatter": { "version": "1.0.11", @@ -99,37 +254,143 @@ "safe-buffer": "^5.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, - "isemail": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", - "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" + "http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "requires": { + "@types/node": "^10.0.3" + } }, - "joi": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", - "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { - "hoek": "2.x.x", - "isemail": "1.x.x", - "moment": "2.x.x", - "topo": "1.x.x" + "once": "^1.3.0", + "wrappy": "1" } }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "jsonwebtoken": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.3.0.tgz", - "integrity": "sha1-hRGNanDj/M3xQ4n056HD+cip+7o=", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "requires": { - "joi": "^6.10.1", - "jws": "^3.1.4", + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", - "ms": "^0.7.1", - "xtend": "^4.0.1" + "ms": "^2.1.1", + "semver": "^5.6.0" } }, "jwa": { @@ -151,15 +412,58 @@ "safe-buffer": "^5.0.1" } }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "requires": { "brace-expansion": "^1.1.7" } @@ -167,7 +471,7 @@ "mockery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", - "integrity": "sha1-9O3g2HUMHJcnwnLqLGBiniyaHE8=" + "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" }, "moment": { "version": "2.29.4", @@ -175,19 +479,102 @@ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "ms": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", - "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "requires": { + "asap": "~2.0.6" + } }, "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" }, "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } }, "safe-buffer": { "version": "5.2.1", @@ -200,45 +587,115 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, - "topo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", - "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", + "sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", "requires": { - "hoek": "2.x.x" + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "requires": { + "get-port": "^3.1.0" + } + }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + } } }, "tunnel": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", - "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" }, "typed-rest-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.7.3.tgz", - "integrity": "sha512-CwTpx/TkRHGZoHkJhBcp4X8K3/WtlzSHVQR0OIFnt10j4tgy4ypgq/SrrgVpA1s6tAL49Q6J3R5C0Cgfh2ddqA==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", + "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==", "requires": { "qs": "^6.9.1", "tunnel": "0.0.6", - "underscore": "1.8.3" + "underscore": "^1.12.1" }, "dependencies": { "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==" } } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, "typescript": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", @@ -250,25 +707,20 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==" }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, - "vso-node-api": { - "version": "6.0.1-preview", - "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.0.1-preview.tgz", - "integrity": "sha1-RBprv5s8aNpiTbAeo1y6jwpMLKs=", - "requires": { - "q": "^1.0.1", - "tunnel": "0.0.4", - "underscore": "^1.8.3" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" } } } diff --git a/Tasks/AzureKeyVaultV1/package.json b/Tasks/AzureKeyVaultV1/package.json index 71ba4deb4961..f0df66d92b08 100644 --- a/Tasks/AzureKeyVaultV1/package.json +++ b/Tasks/AzureKeyVaultV1/package.json @@ -6,10 +6,10 @@ "@types/node": "^10.17.0", "@types/q": "^1.5.0", "@types/uuid": "^8.3.0", - "azure-pipelines-task-lib": "2.8.0", - "azure-pipelines-tasks-azure-arm-rest-v2": "1.0.4", - "moment": "^2.29.4", - "vso-node-api": "6.0.1-preview" + "azure-devops-node-api": "11.2.0", + "azure-pipelines-task-lib": "^4.0.1-preview", + "azure-pipelines-tasks-azure-arm-rest-v2": "^3.213.0", + "moment": "^2.29.4" }, "devDependencies": { "typescript": "4.0.2" diff --git a/Tasks/AzureKeyVaultV1/task.json b/Tasks/AzureKeyVaultV1/task.json index 88aa7b989d62..8d5c6b37ab7d 100644 --- a/Tasks/AzureKeyVaultV1/task.json +++ b/Tasks/AzureKeyVaultV1/task.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 215, - "Patch": 0 + "Minor": 214, + "Patch": 2 }, "demands": [], "minimumAgentVersion": "2.0.0", diff --git a/Tasks/AzureKeyVaultV1/task.loc.json b/Tasks/AzureKeyVaultV1/task.loc.json index 3f29d3c24f66..fbb014fbb08d 100644 --- a/Tasks/AzureKeyVaultV1/task.loc.json +++ b/Tasks/AzureKeyVaultV1/task.loc.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 215, - "Patch": 0 + "Minor": 214, + "Patch": 2 }, "demands": [], "minimumAgentVersion": "2.0.0", @@ -120,4 +120,4 @@ "RetryingWithVaultResourceIdFromResponse": "ms-resource:loc.messages.RetryingWithVaultResourceIdFromResponse", "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal" } -} +} \ No newline at end of file diff --git a/Tasks/AzureKeyVaultV2/Tests/L0.ts b/Tasks/AzureKeyVaultV2/Tests/L0.ts index 0c698ce8f291..ac564f9f3d89 100644 --- a/Tasks/AzureKeyVaultV2/Tests/L0.ts +++ b/Tasks/AzureKeyVaultV2/Tests/L0.ts @@ -31,12 +31,12 @@ describe('Azure Key Vault', function () { assert(tr.stdout.indexOf("getSecretValue is called for secret4") < 0, "getSecretValue should not be called for secret4"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret1;issecret=true;]secret1-value") > 0, "##vso[task.setvariable variable=secret1;issecret=true;]secret1-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret2;issecret=true;]secret2-value") > 0, "##vso[task.setvariable variable=secret2;issecret=true;]secret2-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3;issecret=true;]secret3-value") > 0, "##vso[task.setvariable variable=secret3;issecret=true;]secret3-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret5_%AZP253B;issecret=true;]secret5_%AZP253B-value") > 0, "##vso[task.setvariable variable=secret5_%AZP253B;issecret=true;]secret5_%AZP253B-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret1;isOutput=false;issecret=true;]secret1-value") > 0, "##vso[task.setvariable variable=secret1;isOutput=false;issecret=true;]secret1-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret2;isOutput=false;issecret=true;]secret2-value") > 0, "##vso[task.setvariable variable=secret2;isOutput=false;issecret=true;]secret2-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3;isOutput=false;issecret=true;]secret3-value") > 0, "##vso[task.setvariable variable=secret3;isOutput=false;issecret=true;]secret3-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret5_%AZP25AZP253B;isOutput=false;issecret=true;]secret5_%AZP25AZP253B-value") > 0, "##vso[task.setvariable variable=secret5_%AZP25AZP253B;isOutput=false;issecret=true;]secret5_%AZP25AZP253B-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret4;issecret=true;]secret4-value") < 0, "secret4 value should not be set"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret4;isOutput=false;issecret=true;]secret4-value") < 0, "secret4 value should not be set"); done(); } @@ -63,13 +63,13 @@ describe('Azure Key Vault', function () { assert(tr.stdout.indexOf("getSecretValue is called for secret2") > 0, "getSecretValue is called for secret2"); assert(tr.stdout.indexOf("getSecretValue is called for secret3/versionIdentifierGuid") > 0, "getSecretValue is called for secret3/versionIdentifierGuid"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret1;issecret=true;]secret1-value") > 0, "##vso[task.setvariable variable=secret1;issecret=true;]secret1-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret2;issecret=true;]secret2-value") > 0, "##vso[task.setvariable variable=secret2;issecret=true;]secret2-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3;issecret=true;]secret3/versionIdentifierGuid-value") > 0, "##vso[task.setvariable variable=secret3;issecret=true;]secret3/versionIdentifierGuid-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3/versionIdentifierGuid;issecret=true;]secret3/versionIdentifierGuid-value") > 0, "##vso[task.setvariable variable=secret3/versionIdentifierGuid;issecret=true;]secret3/versionIdentifierGuid-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret5_%3B;issecret=true;]secret5_%3B-value") > 0, "##vso[task.setvariable variable=secret5_%3B;issecret=true;]secret5_%3B-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret1;isOutput=false;issecret=true;]secret1-value") > 0, "##vso[task.setvariable variable=secret1;isOutput=false;issecret=true;]secret1-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret2;isOutput=false;issecret=true;]secret2-value") > 0, "##vso[task.setvariable variable=secret2;isOutput=false;issecret=true;]secret2-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3;isOutput=false;issecret=true;]secret3/versionIdentifierGuid-value") > 0, "##vso[task.setvariable variable=secret3;isOutput=false;issecret=true;]secret3/versionIdentifierGuid-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret3/versionIdentifierGuid;isOutput=false;issecret=true;]secret3/versionIdentifierGuid-value") > 0, "##vso[task.setvariable variable=secret3/versionIdentifierGuid;isOutput=false;issecret=true;]secret3/versionIdentifierGuid-value"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret5_%AZP253B;isOutput=false;issecret=true;]secret5_%AZP253B-value") > 0, "##vso[task.setvariable variable=secret5_%AZP253B;isOutput=false;issecret=true;]secret5_%AZP253B-value"); - assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret4;issecret=true;]secret4-value") < 0, "secret4 value should not be set"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=secret4;isOutput=false;issecret=true;]secret4-value") < 0, "secret4 value should not be set"); done(); } diff --git a/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json b/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json index ff359e34e4a3..ec0ad721b6c7 100644 --- a/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json +++ b/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json @@ -3,6 +3,52 @@ "requires": true, "lockfileVersion": 1, "dependencies": { + "@azure/msal-common": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-8.0.0.tgz", + "integrity": "sha512-KLGVmWoDcpWl/SKb4TZUjWm+l3lim4tUwAAvCM8N8rSHu8r0NtMTySMWBv7d3G8as1SvC4nr3eTae1+9hTp4wg==" + }, + "@azure/msal-node": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.3.tgz", + "integrity": "sha512-95fuxbSq/5PNlxWybQID8ShFBMjYSN0XvHUPmelwgsgJiO3F+TN5SpIvjgLGa+aMVAxEYq6TvKXK+I3qm1EMqQ==", + "requires": { + "@azure/msal-common": "^8.0.0", + "jsonwebtoken": "^8.5.1", + "uuid": "^8.3.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "requires": { + "@types/node": "*" + } + }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "requires": { + "@types/node": "*" + } + }, + "@types/jsonwebtoken": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", + "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "requires": { + "@types/node": "*" + } + }, "@types/mocha": { "version": "5.2.7", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", @@ -18,57 +64,103 @@ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, "@types/uuid": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "azure-devops-node-api": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", + "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, "azure-pipelines-task-lib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-2.8.0.tgz", - "integrity": "sha512-PR8oap9z2j+o455W3PwAfB4SX1p4GdJc9OHQaQV0V+iQS1IBY6dVgcNSQMkHAXb0V1bbuLOFBLanXPe5eSgGTQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.0.2.tgz", + "integrity": "sha512-TNFIZVrmYne9rjYRtjrzx0Z4ZepMMISe62RF7cvlujMXRKlSpQjGqxQ4Q6YLC4p+52uAfFBf+sBSLpG6TMC9Xw==", "requires": { - "minimatch": "3.0.4", - "mockery": "^1.7.0", - "q": "^1.1.2", + "minimatch": "3.0.5", + "mockery": "^2.1.0", + "q": "^1.5.1", "semver": "^5.1.0", - "shelljs": "^0.3.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", "uuid": "^3.0.1" + }, + "dependencies": { + "mockery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" + } } }, "azure-pipelines-tasks-azure-arm-rest-v2": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-1.0.4.tgz", - "integrity": "sha512-aEo1zwRZ5sYSh6AzZEWP+nFrD9TcnqoNlNy+7ItLEPKr266ToAM97vEj8vFqgtoAapMHawlErN173Uwq6TnRIA==", - "requires": { - "@types/mocha": "2.2.48", - "@types/node": "6.0.68", - "@types/q": "1.0.7", - "azure-pipelines-task-lib": "2.8.0", - "jsonwebtoken": "7.3.0", - "q": "1.4.1", - "typed-rest-client": "1.7.3" + "version": "3.213.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-3.213.0.tgz", + "integrity": "sha512-KW0Yw0YcTcArOEcXVNcyKvM/cbNpCgmvluNrcCr/o/Kpf7mlI7t9YeW9Gv+844/LAb5vreg5mPm9GX9XW8mLCA==", + "requires": { + "@azure/msal-node": "^1.14.2", + "@types/jsonwebtoken": "^8.5.8", + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@types/q": "1.5.4", + "azure-pipelines-task-lib": "^3.1.0", + "jsonwebtoken": "^8.5.1", + "q": "1.5.1", + "typed-rest-client": "1.8.4" }, "dependencies": { - "@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==" - }, - "@types/node": { - "version": "6.0.68", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.68.tgz", - "integrity": "sha1-DEO2uLlEX+uGoPvTRX4/S8WR5m0=" + "azure-pipelines-task-lib": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz", + "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==", + "requires": { + "minimatch": "3.0.5", + "mockery": "^1.7.0", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", + "uuid": "^3.0.1" + } }, - "@types/q": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.0.7.tgz", - "integrity": "sha512-0WS7XU7sXzQ7J1nbnMKKYdjrrFoO3YtZYgUzeV8JFXffPnHfvSJQleR70I8BOAsOm14i4dyaAZ3YzqIl1YhkXQ==" + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } } } }, @@ -89,12 +181,60 @@ "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "ecdsa-sig-formatter": { "version": "1.0.11", @@ -104,37 +244,143 @@ "safe-buffer": "^5.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "requires": { + "@types/node": "^10.0.3" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "isemail": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", - "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, - "joi": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", - "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "requires": { - "hoek": "2.x.x", - "isemail": "1.x.x", - "moment": "2.x.x", - "topo": "1.x.x" + "has": "^1.0.3" } }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "jsonwebtoken": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.3.0.tgz", - "integrity": "sha1-hRGNanDj/M3xQ4n056HD+cip+7o=", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "requires": { - "joi": "^6.10.1", - "jws": "^3.1.4", + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", - "ms": "^0.7.1", - "xtend": "^4.0.1" + "ms": "^2.1.1", + "semver": "^5.6.0" } }, "jwa": { @@ -156,15 +402,58 @@ "safe-buffer": "^5.0.1" } }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "requires": { "brace-expansion": "^1.1.7" } @@ -172,7 +461,7 @@ "mockery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", - "integrity": "sha1-9O3g2HUMHJcnwnLqLGBiniyaHE8=" + "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" }, "moment": { "version": "2.29.4", @@ -180,9 +469,50 @@ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "ms": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", - "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "requires": { + "asap": "~2.0.6" + } }, "q": { "version": "1.5.1", @@ -190,9 +520,51 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } }, "safe-buffer": { "version": "5.2.1", @@ -205,70 +577,140 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } }, - "topo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", - "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "hoek": "2.x.x" + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "requires": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "requires": { + "get-port": "^3.1.0" + } + }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + } } }, "tunnel": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", - "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" }, "typed-rest-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.7.3.tgz", - "integrity": "sha512-CwTpx/TkRHGZoHkJhBcp4X8K3/WtlzSHVQR0OIFnt10j4tgy4ypgq/SrrgVpA1s6tAL49Q6J3R5C0Cgfh2ddqA==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", + "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==", "requires": { "qs": "^6.9.1", "tunnel": "0.0.6", - "underscore": "1.8.3" + "underscore": "^1.12.1" }, "dependencies": { "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" } } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, "typescript": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", "dev": true }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, - "vso-node-api": { - "version": "6.0.1-preview", - "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.0.1-preview.tgz", - "integrity": "sha1-RBprv5s8aNpiTbAeo1y6jwpMLKs=", - "requires": { - "q": "^1.0.1", - "tunnel": "0.0.4", - "underscore": "^1.8.3" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" } } } diff --git a/Tasks/AzureKeyVaultV2/package.json b/Tasks/AzureKeyVaultV2/package.json index 71ba4deb4961..f0df66d92b08 100644 --- a/Tasks/AzureKeyVaultV2/package.json +++ b/Tasks/AzureKeyVaultV2/package.json @@ -6,10 +6,10 @@ "@types/node": "^10.17.0", "@types/q": "^1.5.0", "@types/uuid": "^8.3.0", - "azure-pipelines-task-lib": "2.8.0", - "azure-pipelines-tasks-azure-arm-rest-v2": "1.0.4", - "moment": "^2.29.4", - "vso-node-api": "6.0.1-preview" + "azure-devops-node-api": "11.2.0", + "azure-pipelines-task-lib": "^4.0.1-preview", + "azure-pipelines-tasks-azure-arm-rest-v2": "^3.213.0", + "moment": "^2.29.4" }, "devDependencies": { "typescript": "4.0.2" diff --git a/Tasks/AzureKeyVaultV2/task.json b/Tasks/AzureKeyVaultV2/task.json index e4901950931e..55833281995d 100644 --- a/Tasks/AzureKeyVaultV2/task.json +++ b/Tasks/AzureKeyVaultV2/task.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 215, - "Patch": 0 + "Minor": 214, + "Patch": 2 }, "demands": [], "minimumAgentVersion": "2.182.1", diff --git a/Tasks/AzureKeyVaultV2/task.loc.json b/Tasks/AzureKeyVaultV2/task.loc.json index f9ca57fdaf70..0fe1d329136d 100644 --- a/Tasks/AzureKeyVaultV2/task.loc.json +++ b/Tasks/AzureKeyVaultV2/task.loc.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 215, - "Patch": 0 + "Minor": 214, + "Patch": 2 }, "demands": [], "minimumAgentVersion": "2.182.1", From cefc3a7e9de4a37c987a83efc76942b54fae45c4 Mon Sep 17 00:00:00 2001 From: Ozan Aydin Date: Thu, 22 Dec 2022 16:06:53 +0100 Subject: [PATCH 02/10] - AzureKeyVault fetch mechanism is updated to chunks, refactoring - onetocny updates (squashed) --- Tasks/AzureKeyVaultV1/operations/KeyVault.ts | 71 ++++++++------- .../operations/azure-arm-keyvault.ts | 89 +++++++++++++------ Tasks/AzureKeyVaultV1/task.json | 4 +- Tasks/AzureKeyVaultV1/task.loc.json | 4 +- Tasks/AzureKeyVaultV2/npm-shrinkwrap.json | 65 +++++++------- Tasks/AzureKeyVaultV2/operations/KeyVault.ts | 71 ++++++++------- .../operations/azure-arm-keyvault.ts | 89 +++++++++++++------ Tasks/AzureKeyVaultV2/package.json | 2 +- Tasks/AzureKeyVaultV2/task.json | 4 +- Tasks/AzureKeyVaultV2/task.loc.json | 4 +- 10 files changed, 237 insertions(+), 166 deletions(-) diff --git a/Tasks/AzureKeyVaultV1/operations/KeyVault.ts b/Tasks/AzureKeyVaultV1/operations/KeyVault.ts index 8c77d7a76715..b400158be078 100644 --- a/Tasks/AzureKeyVaultV1/operations/KeyVault.ts +++ b/Tasks/AzureKeyVaultV1/operations/KeyVault.ts @@ -72,7 +72,7 @@ export class KeyVault { this.provisionKeyVaultSecretsScript = util.format(scriptContentFormat, this.taskParameters.subscriptionId, this.taskParameters.servicePrincipalId, this.taskParameters.keyVaultName); } - public downloadSecrets(secretsToErrorsMap: SecretsToErrorsMapping): Promise { + public async downloadSecrets(secretsToErrorsMap: SecretsToErrorsMapping): Promise { var downloadAllSecrets = false; if (this.taskParameters.secretsFilter && this.taskParameters.secretsFilter.length > 0) @@ -90,10 +90,13 @@ export class KeyVault { // Key vault task explicitly handles multi line masking - hence setting SYSTEM_UNSAFEALLOWMULTILINESECRET to true tl.setVariable("SYSTEM_UNSAFEALLOWMULTILINESECRET", "true"); - if (downloadAllSecrets) { - return this.downloadAllSecrets(secretsToErrorsMap); - } else { - return this.downloadSelectedSecrets(this.taskParameters.secretsFilter, secretsToErrorsMap); + if (downloadAllSecrets) + { + return await this.downloadAllSecrets(secretsToErrorsMap); + } + else + { + return await this.downloadSelectedSecrets(this.taskParameters.secretsFilter, secretsToErrorsMap); } } @@ -112,50 +115,46 @@ export class KeyVault { } console.log(tl.loc("NumberOfSecretsFound", this.taskParameters.keyVaultName, listOfSecrets.length)); - listOfSecrets = this.filterDisabledAndExpiredSecrets(listOfSecrets); - console.log(tl.loc("NumberOfEnabledSecretsFound", this.taskParameters.keyVaultName, listOfSecrets.length)); - - var getSecretValuePromises: Promise[] = []; - listOfSecrets.forEach((secret: armKeyVault.AzureKeyVaultSecret, index: number) => { - getSecretValuePromises.push(this.downloadSecretValue(secret.name, secretsToErrorsMap)); - }); - - Promise.all(getSecretValuePromises).then(() =>{ + const secrets = this.filterDisabledAndExpiredSecrets(listOfSecrets).map(secret => secret.name); + console.log(tl.loc("NumberOfEnabledSecretsFound", this.taskParameters.keyVaultName, secrets.length)); + + this.downloadSelectedSecrets(secrets, secretsToErrorsMap).then(() => { return resolve(); }); }); }); } - private downloadSelectedSecrets(selectedSecrets: string[], secretsToErrorsMap: SecretsToErrorsMapping): Promise { + private async downloadSelectedSecrets(secrets: string[], secretsToErrorsMap: SecretsToErrorsMapping) : Promise + { tl.debug(util.format("Downloading selected secrets from subscriptionId: %s, vault: %s", this.taskParameters.subscriptionId, this.taskParameters.keyVaultName)); - return new Promise((resolve, reject) => { - var getSecretValuePromises: Promise[] = []; - selectedSecrets.forEach((secretName: string, index: number) => { - getSecretValuePromises.push(this.downloadSecretValue(secretName, secretsToErrorsMap)); - }); - - Promise.all(getSecretValuePromises).then(() =>{ - return resolve(); - }); - }); + const chunkSize = 20; + for(let i = 0; i < secrets.length; i += chunkSize) + { + const start = new Date().getTime(); + + tl.debug(`Downloading part [${i} - ${Math.min(secrets.length, i + chunkSize)}] (total ${secrets.length} secrets)`); + const secretPromises: Promise[] = []; + for(let j = i; j < secrets.length && j < i + chunkSize; j++) + { + secretPromises.push(this.downloadSecretValue(secrets[j], secretsToErrorsMap)); + } + + await Promise.all(secretPromises); + const end = new Date().getTime(); + tl.debug(`Downloaded part [${i} - ${i + secretPromises.length}] (took ${end - start} ms) (total ${secrets.length} secrets)`); + } } - private filterDisabledAndExpiredSecrets(listOfSecrets: armKeyVault.AzureKeyVaultSecret[]): armKeyVault.AzureKeyVaultSecret[] { - var result: armKeyVault.AzureKeyVaultSecret[] = []; - var now: Date = new Date(); - - listOfSecrets.forEach((value: armKeyVault.AzureKeyVaultSecret, index: number) => { - if (value.enabled && (!value.expires || value.expires > now)) { - result.push(value); - } - }); - + private filterDisabledAndExpiredSecrets(listOfSecrets: armKeyVault.AzureKeyVaultSecret[]): armKeyVault.AzureKeyVaultSecret[] + { + const now: Date = new Date(); + const result = listOfSecrets.filter((value, _) => value.enabled && (!value.expires || value.expires > now)); return result; } - private downloadSecretValue(secretName: string, secretsToErrorsMap: SecretsToErrorsMapping): Promise { + private downloadSecretValue(secretName: string, secretsToErrorsMap: SecretsToErrorsMapping): Promise { tl.debug(util.format("Promise for downloading secret value for: %s", secretName)); secretName = secretName.trim(); diff --git a/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts b/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts index 3a2bb8e592bf..a8d34c4b1446 100644 --- a/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts +++ b/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts @@ -16,6 +16,9 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { private keyVaultName; private keyVaultUrl; + private readonly retriableErrorCodes = ["ETIMEDOUT", "ECONNRESET", "ENOTFOUND", "ESOCKETTIMEDOUT", "ECONNREFUSED", "EHOSTUNREACH", "EPIPE", "EA_AGAIN", "EAI_AGAIN"]; + private readonly retriableStatusCodes = [408, 409, 500, 502, 503, 504]; + constructor(credentials: msRestAzure.ApplicationTokenCredentials, subscriptionId: string, keyVaultName: string, @@ -28,49 +31,85 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { this.apiVersion = '2016-10-01'; } - public async invokeRequest(request: webClient.WebRequest): Promise { + public async invokeRequest(request: webClient.WebRequest): Promise + { const maxRetryCount: number = 5; const retryIntervalInSeconds: number = 2; - const retriableErrorCodes = ["ETIMEDOUT", "ECONNRESET", "ENOTFOUND", "ESOCKETTIMEDOUT", "ECONNREFUSED", "EHOSTUNREACH", "EPIPE", "EA_AGAIN", "EAI_AGAIN"]; - const retriableStatusCodes = [408, 409, 500, 502, 503, 504]; - let timeToWait: number = retryIntervalInSeconds; + let retryCount: number = 0; - while(true) { - try { - var response = await this.beginRequest(request); - if (response.statusCode == 401) { - var vaultResourceId = this.getValidVaultResourceId(response); - if(!!vaultResourceId) { + while (true) + { + try + { + let response = await this.beginRequest(request); + if (response.statusCode == 401) + { + const vaultResourceId = this.getValidVaultResourceId(response); + if (!!vaultResourceId) + { console.log(tl.loc("RetryingWithVaultResourceIdFromResponse", vaultResourceId)); this.getCredentials().activeDirectoryResourceId = vaultResourceId; // update vault resource Id this.getCredentials().getToken(true); // Refresh authorization token in cache - var response = await this.beginRequest(request); + response = await this.beginRequest(request); } } - if (retriableStatusCodes.indexOf(response.statusCode) != -1 && ++retryCount < maxRetryCount) { - tl.debug(util.format("Encountered a retriable status code: %s. Message: '%s'.", response.statusCode, response.statusMessage)); - await webClient.sleepFor(timeToWait); - timeToWait = timeToWait * retryIntervalInSeconds + retryIntervalInSeconds; - continue; + if (this.retriableStatusCodes.indexOf(response.statusCode) === -1) + { + return response; } - return response; - } catch(error) { - if ((retriableErrorCodes.indexOf(error.code) != -1 - || !!error.message && (error.message.startsWith('Request timeout: ') || error.message.startsWith('getaddrinfo '))) - && ++retryCount < maxRetryCount) { - tl.debug(util.format("Encountered an error. Will retry. Error:%s. Message: %s.", error.code, error.message)); - await webClient.sleepFor(timeToWait); - timeToWait = timeToWait * retryIntervalInSeconds + retryIntervalInSeconds; + if (++retryCount >= maxRetryCount) + { + return response; } - else { + + tl.debug(`Encountered a retriable status code: ${response.statusCode}. Message: '${response.statusMessage}'.`); + } + catch (error) + { + if (++retryCount >= maxRetryCount) + { throw error; } + + if (!this.isRetriableError(error)) + { + throw error; + } + + tl.debug(`Encountered an error. Will retry. Error: ${error.code}. Message: ${error.message}.`); } + + await webClient.sleepFor(retryIntervalInSeconds); + } + } + + private isRetriableError(error: any): boolean + { + if (this.retriableErrorCodes.indexOf(error.code) !== -1) + { + return true; } + + if (!error.message) + { + return false; + } + + if (error.message.startsWith("Request timeout: ")) + { + return true; + } + + if (error.message.startsWith("getaddrinfo ")) + { + return true; + } + + return false; } public getValidVaultResourceId(response: webClient.WebResponse) { diff --git a/Tasks/AzureKeyVaultV1/task.json b/Tasks/AzureKeyVaultV1/task.json index 8d5c6b37ab7d..e5f328983471 100644 --- a/Tasks/AzureKeyVaultV1/task.json +++ b/Tasks/AzureKeyVaultV1/task.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 214, - "Patch": 2 + "Minor": 215, + "Patch": 1 }, "demands": [], "minimumAgentVersion": "2.0.0", diff --git a/Tasks/AzureKeyVaultV1/task.loc.json b/Tasks/AzureKeyVaultV1/task.loc.json index fbb014fbb08d..62d661969c12 100644 --- a/Tasks/AzureKeyVaultV1/task.loc.json +++ b/Tasks/AzureKeyVaultV1/task.loc.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 214, - "Patch": 2 + "Minor": 215, + "Patch": 1 }, "demands": [], "minimumAgentVersion": "2.0.0", diff --git a/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json b/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json index ec0ad721b6c7..346bb83605a4 100644 --- a/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json +++ b/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json @@ -4,16 +4,16 @@ "lockfileVersion": 1, "dependencies": { "@azure/msal-common": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-8.0.0.tgz", - "integrity": "sha512-KLGVmWoDcpWl/SKb4TZUjWm+l3lim4tUwAAvCM8N8rSHu8r0NtMTySMWBv7d3G8as1SvC4nr3eTae1+9hTp4wg==" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.0.1.tgz", + "integrity": "sha512-eNNHIW/cwPTZDWs9KtYgb1X6gtQ+cC+FGX2YN+t4AUVsBdUbqlMTnUs6/c/VBxC2AAGIhgLREuNnO3F66AN2zQ==" }, "@azure/msal-node": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.3.tgz", - "integrity": "sha512-95fuxbSq/5PNlxWybQID8ShFBMjYSN0XvHUPmelwgsgJiO3F+TN5SpIvjgLGa+aMVAxEYq6TvKXK+I3qm1EMqQ==", + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.5.tgz", + "integrity": "sha512-NcVdMfn8Z3ogN+9RjOSF7uwf2Gki5DEJl0BdDSL83KUAgVAobtkZi5W8EqxbJLrTO/ET0jv5DregrcR5qg2pEA==", "requires": { - "@azure/msal-common": "^8.0.0", + "@azure/msal-common": "^9.0.1", "jsonwebtoken": "^8.5.1", "uuid": "^8.3.0" }, @@ -79,6 +79,14 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "requires": { + "tslib": "^2.4.0" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -115,15 +123,15 @@ } }, "azure-pipelines-tasks-azure-arm-rest-v2": { - "version": "3.213.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-3.213.0.tgz", - "integrity": "sha512-KW0Yw0YcTcArOEcXVNcyKvM/cbNpCgmvluNrcCr/o/Kpf7mlI7t9YeW9Gv+844/LAb5vreg5mPm9GX9XW8mLCA==", + "version": "file:../../common-npm-packages/azure-arm-rest-v2/_build/azure-pipelines-tasks-azure-arm-rest-v2-3.215.0.tgz", + "integrity": "sha512-JIFM3nhecmh2dKItAx1X+4YvmsRkbl9+otsA4ufpZIpSFO8kXGlLZLT0fmWoWb28WTZbmL+FYb086Hif+eAQKA==", "requires": { "@azure/msal-node": "^1.14.2", "@types/jsonwebtoken": "^8.5.8", "@types/mocha": "^5.2.7", "@types/node": "^10.17.0", "@types/q": "1.5.4", + "async-mutex": "^0.4.0", "azure-pipelines-task-lib": "^3.1.0", "jsonwebtoken": "^8.5.1", "q": "1.5.1", @@ -131,36 +139,18 @@ }, "dependencies": { "azure-pipelines-task-lib": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz", - "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", + "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", "requires": { "minimatch": "3.0.5", - "mockery": "^1.7.0", + "mockery": "^2.1.0", "q": "^1.5.1", "semver": "^5.1.0", "shelljs": "^0.8.5", "sync-request": "6.1.0", "uuid": "^3.0.1" } - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } } } }, @@ -459,9 +449,9 @@ } }, "mockery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", - "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" }, "moment": { "version": "2.29.4", @@ -659,6 +649,11 @@ } } }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", diff --git a/Tasks/AzureKeyVaultV2/operations/KeyVault.ts b/Tasks/AzureKeyVaultV2/operations/KeyVault.ts index 4da7616ff039..33c4b9149887 100644 --- a/Tasks/AzureKeyVaultV2/operations/KeyVault.ts +++ b/Tasks/AzureKeyVaultV2/operations/KeyVault.ts @@ -74,7 +74,7 @@ export class KeyVault { this.provisionKeyVaultSecretsScript = util.format(scriptContentFormat, this.taskParameters.subscriptionId, this.taskParameters.servicePrincipalId, this.taskParameters.keyVaultName); } - public downloadSecrets(secretsToErrorsMap: SecretsToErrorsMapping): Promise { + public async downloadSecrets(secretsToErrorsMap: SecretsToErrorsMapping): Promise { var downloadAllSecrets = false; if (this.taskParameters.secretsFilter && this.taskParameters.secretsFilter.length > 0) @@ -92,10 +92,13 @@ export class KeyVault { // Key vault task explicitly handles multi line masking - hence setting SYSTEM_UNSAFEALLOWMULTILINESECRET to true tl.setVariable("SYSTEM_UNSAFEALLOWMULTILINESECRET", "true"); - if (downloadAllSecrets) { - return this.downloadAllSecrets(secretsToErrorsMap); - } else { - return this.downloadSelectedSecrets(this.taskParameters.secretsFilter, secretsToErrorsMap); + if (downloadAllSecrets) + { + return await this.downloadAllSecrets(secretsToErrorsMap); + } + else + { + return await this.downloadSelectedSecrets(this.taskParameters.secretsFilter, secretsToErrorsMap); } } @@ -114,50 +117,46 @@ export class KeyVault { } console.log(tl.loc("NumberOfSecretsFound", this.taskParameters.keyVaultName, listOfSecrets.length)); - listOfSecrets = this.filterDisabledAndExpiredSecrets(listOfSecrets); - console.log(tl.loc("NumberOfEnabledSecretsFound", this.taskParameters.keyVaultName, listOfSecrets.length)); - - var getSecretValuePromises: Promise[] = []; - listOfSecrets.forEach((secret: armKeyVault.AzureKeyVaultSecret, index: number) => { - getSecretValuePromises.push(this.downloadSecretValue(secret.name, secretsToErrorsMap)); - }); - - Promise.all(getSecretValuePromises).then(() =>{ + const secrets = this.filterDisabledAndExpiredSecrets(listOfSecrets).map(secret => secret.name); + console.log(tl.loc("NumberOfEnabledSecretsFound", this.taskParameters.keyVaultName, secrets.length)); + + this.downloadSelectedSecrets(secrets, secretsToErrorsMap).then(() => { return resolve(); }); }); }); } - private downloadSelectedSecrets(selectedSecrets: string[], secretsToErrorsMap: SecretsToErrorsMapping): Promise { + private async downloadSelectedSecrets(secrets: string[], secretsToErrorsMap: SecretsToErrorsMapping) : Promise + { tl.debug(util.format("Downloading selected secrets from subscriptionId: %s, vault: %s", this.taskParameters.subscriptionId, this.taskParameters.keyVaultName)); - return new Promise((resolve, reject) => { - var getSecretValuePromises: Promise[] = []; - selectedSecrets.forEach((secretName: string, index: number) => { - getSecretValuePromises.push(this.downloadSecretValue(secretName, secretsToErrorsMap)); - }); - - Promise.all(getSecretValuePromises).then(() =>{ - return resolve(); - }); - }); + const chunkSize = 20; + for(let i = 0; i < secrets.length; i += chunkSize) + { + const start = new Date().getTime(); + + tl.debug(`Downloading part [${i} - ${Math.min(secrets.length, i + chunkSize)}] (total ${secrets.length} secrets)`); + const secretPromises: Promise[] = []; + for(let j = i; j < secrets.length && j < i + chunkSize; j++) + { + secretPromises.push(this.downloadSecretValue(secrets[j], secretsToErrorsMap)); + } + + await Promise.all(secretPromises); + const end = new Date().getTime(); + tl.debug(`Downloaded part [${i} - ${i + secretPromises.length}] (took ${end - start} ms) (total ${secrets.length} secrets)`); + } } - private filterDisabledAndExpiredSecrets(listOfSecrets: armKeyVault.AzureKeyVaultSecret[]): armKeyVault.AzureKeyVaultSecret[] { - var result: armKeyVault.AzureKeyVaultSecret[] = []; - var now: Date = new Date(); - - listOfSecrets.forEach((value: armKeyVault.AzureKeyVaultSecret, index: number) => { - if (value.enabled && (!value.expires || value.expires > now)) { - result.push(value); - } - }); - + private filterDisabledAndExpiredSecrets(listOfSecrets: armKeyVault.AzureKeyVaultSecret[]): armKeyVault.AzureKeyVaultSecret[] + { + const now: Date = new Date(); + const result = listOfSecrets.filter((value, _) => value.enabled && (!value.expires || value.expires > now)); return result; } - private downloadSecretValue(secretName: string, secretsToErrorsMap: SecretsToErrorsMapping): Promise { + private downloadSecretValue(secretName: string, secretsToErrorsMap: SecretsToErrorsMapping): Promise { tl.debug(util.format("Promise for downloading secret value for: %s", secretName)); secretName = secretName.trim(); diff --git a/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts b/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts index 3a2bb8e592bf..0fc39126602f 100644 --- a/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts +++ b/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts @@ -16,6 +16,9 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { private keyVaultName; private keyVaultUrl; + private readonly retriableErrorCodes = ["ETIMEDOUT", "ECONNRESET", "ENOTFOUND", "ESOCKETTIMEDOUT", "ECONNREFUSED", "EHOSTUNREACH", "EPIPE", "EA_AGAIN", "EAI_AGAIN"]; + private readonly retriableStatusCodes = [408, 409, 500, 502, 503, 504]; + constructor(credentials: msRestAzure.ApplicationTokenCredentials, subscriptionId: string, keyVaultName: string, @@ -28,51 +31,87 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { this.apiVersion = '2016-10-01'; } - public async invokeRequest(request: webClient.WebRequest): Promise { + public async invokeRequest(request: webClient.WebRequest): Promise + { const maxRetryCount: number = 5; const retryIntervalInSeconds: number = 2; - const retriableErrorCodes = ["ETIMEDOUT", "ECONNRESET", "ENOTFOUND", "ESOCKETTIMEDOUT", "ECONNREFUSED", "EHOSTUNREACH", "EPIPE", "EA_AGAIN", "EAI_AGAIN"]; - const retriableStatusCodes = [408, 409, 500, 502, 503, 504]; - let timeToWait: number = retryIntervalInSeconds; + let retryCount: number = 0; - while(true) { - try { - var response = await this.beginRequest(request); - if (response.statusCode == 401) { - var vaultResourceId = this.getValidVaultResourceId(response); - if(!!vaultResourceId) { + while (true) + { + try + { + let response = await this.beginRequest(request); + if (response.statusCode == 401) + { + const vaultResourceId = this.getValidVaultResourceId(response); + if (!!vaultResourceId) + { console.log(tl.loc("RetryingWithVaultResourceIdFromResponse", vaultResourceId)); this.getCredentials().activeDirectoryResourceId = vaultResourceId; // update vault resource Id this.getCredentials().getToken(true); // Refresh authorization token in cache - var response = await this.beginRequest(request); + response = await this.beginRequest(request); } } - if (retriableStatusCodes.indexOf(response.statusCode) != -1 && ++retryCount < maxRetryCount) { - tl.debug(util.format("Encountered a retriable status code: %s. Message: '%s'.", response.statusCode, response.statusMessage)); - await webClient.sleepFor(timeToWait); - timeToWait = timeToWait * retryIntervalInSeconds + retryIntervalInSeconds; - continue; + if (this.retriableStatusCodes.indexOf(response.statusCode) === -1) + { + return response; } - return response; - } catch(error) { - if ((retriableErrorCodes.indexOf(error.code) != -1 - || !!error.message && (error.message.startsWith('Request timeout: ') || error.message.startsWith('getaddrinfo '))) - && ++retryCount < maxRetryCount) { - tl.debug(util.format("Encountered an error. Will retry. Error:%s. Message: %s.", error.code, error.message)); - await webClient.sleepFor(timeToWait); - timeToWait = timeToWait * retryIntervalInSeconds + retryIntervalInSeconds; + if (++retryCount >= maxRetryCount) + { + return response; } - else { + + tl.debug(`Encountered a retriable status code: ${response.statusCode}. Message: '${response.statusMessage}'.`); + } + catch (error) + { + if (++retryCount >= maxRetryCount) + { + throw error; + } + + if (!this.isRetriableError(error)) + { throw error; } + + tl.debug(`Encountered an error. Will retry. Error: ${error.code}. Message: ${error.message}.`); } + + await webClient.sleepFor(retryIntervalInSeconds); } } + private isRetriableError(error: any): boolean + { + if (this.retriableErrorCodes.indexOf(error.code) !== -1) + { + return true; + } + + if (!error.message) + { + return false; + } + + if (error.message.startsWith("Request timeout: ")) + { + return true; + } + + if (error.message.startsWith("getaddrinfo ")) + { + return true; + } + + return false; + } + public getValidVaultResourceId(response: webClient.WebResponse) { if (!!response.headers) { var authenticateHeader = response.headers['www-authenticate']; diff --git a/Tasks/AzureKeyVaultV2/package.json b/Tasks/AzureKeyVaultV2/package.json index f0df66d92b08..a43538e84040 100644 --- a/Tasks/AzureKeyVaultV2/package.json +++ b/Tasks/AzureKeyVaultV2/package.json @@ -8,7 +8,7 @@ "@types/uuid": "^8.3.0", "azure-devops-node-api": "11.2.0", "azure-pipelines-task-lib": "^4.0.1-preview", - "azure-pipelines-tasks-azure-arm-rest-v2": "^3.213.0", + "azure-pipelines-tasks-azure-arm-rest-v2": "file:../../common-npm-packages/azure-arm-rest-v2/_build/azure-pipelines-tasks-azure-arm-rest-v2-3.215.0.tgz", "moment": "^2.29.4" }, "devDependencies": { diff --git a/Tasks/AzureKeyVaultV2/task.json b/Tasks/AzureKeyVaultV2/task.json index 55833281995d..9a9de8b72a46 100644 --- a/Tasks/AzureKeyVaultV2/task.json +++ b/Tasks/AzureKeyVaultV2/task.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 214, - "Patch": 2 + "Minor": 215, + "Patch": 1 }, "demands": [], "minimumAgentVersion": "2.182.1", diff --git a/Tasks/AzureKeyVaultV2/task.loc.json b/Tasks/AzureKeyVaultV2/task.loc.json index 0fe1d329136d..646659964de3 100644 --- a/Tasks/AzureKeyVaultV2/task.loc.json +++ b/Tasks/AzureKeyVaultV2/task.loc.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 214, - "Patch": 2 + "Minor": 215, + "Patch": 1 }, "demands": [], "minimumAgentVersion": "2.182.1", From 240fa42050ebfcd6b7f613615945ea57d91a9131 Mon Sep 17 00:00:00 2001 From: Ondrej Netocny Date: Thu, 22 Dec 2022 18:18:31 +0100 Subject: [PATCH 03/10] Use existing msal lib to check CI --- Tasks/AzureKeyVaultV2/npm-shrinkwrap.json | 19 +++---------------- Tasks/AzureKeyVaultV2/package.json | 2 +- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json b/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json index 346bb83605a4..0a683a9a9004 100644 --- a/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json +++ b/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json @@ -79,14 +79,6 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, - "async-mutex": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", - "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", - "requires": { - "tslib": "^2.4.0" - } - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -123,15 +115,15 @@ } }, "azure-pipelines-tasks-azure-arm-rest-v2": { - "version": "file:../../common-npm-packages/azure-arm-rest-v2/_build/azure-pipelines-tasks-azure-arm-rest-v2-3.215.0.tgz", - "integrity": "sha512-JIFM3nhecmh2dKItAx1X+4YvmsRkbl9+otsA4ufpZIpSFO8kXGlLZLT0fmWoWb28WTZbmL+FYb086Hif+eAQKA==", + "version": "3.216.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-3.216.0.tgz", + "integrity": "sha512-6E3iOJW28wDfJ0ZoehiwmWG63FPXhSHAQail8yKelygwM+7E2mGus2CbWkjMQVyQvNoFFDJvM03Co7Z70O2Rqw==", "requires": { "@azure/msal-node": "^1.14.2", "@types/jsonwebtoken": "^8.5.8", "@types/mocha": "^5.2.7", "@types/node": "^10.17.0", "@types/q": "1.5.4", - "async-mutex": "^0.4.0", "azure-pipelines-task-lib": "^3.1.0", "jsonwebtoken": "^8.5.1", "q": "1.5.1", @@ -649,11 +641,6 @@ } } }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", diff --git a/Tasks/AzureKeyVaultV2/package.json b/Tasks/AzureKeyVaultV2/package.json index a43538e84040..f0df66d92b08 100644 --- a/Tasks/AzureKeyVaultV2/package.json +++ b/Tasks/AzureKeyVaultV2/package.json @@ -8,7 +8,7 @@ "@types/uuid": "^8.3.0", "azure-devops-node-api": "11.2.0", "azure-pipelines-task-lib": "^4.0.1-preview", - "azure-pipelines-tasks-azure-arm-rest-v2": "file:../../common-npm-packages/azure-arm-rest-v2/_build/azure-pipelines-tasks-azure-arm-rest-v2-3.215.0.tgz", + "azure-pipelines-tasks-azure-arm-rest-v2": "^3.213.0", "moment": "^2.29.4" }, "devDependencies": { From 7ad85f8b16d29394dc3f100f305a6e818ca5bde8 Mon Sep 17 00:00:00 2001 From: Ondrej Netocny Date: Wed, 28 Dec 2022 13:05:53 +0100 Subject: [PATCH 04/10] Fixed formatting --- Tasks/AzureKeyVaultV1/operations/KeyVault.ts | 39 ++++++++------------ Tasks/AzureKeyVaultV2/operations/KeyVault.ts | 39 ++++++++------------ 2 files changed, 32 insertions(+), 46 deletions(-) diff --git a/Tasks/AzureKeyVaultV1/operations/KeyVault.ts b/Tasks/AzureKeyVaultV1/operations/KeyVault.ts index b400158be078..926e1f629b76 100644 --- a/Tasks/AzureKeyVaultV1/operations/KeyVault.ts +++ b/Tasks/AzureKeyVaultV1/operations/KeyVault.ts @@ -6,7 +6,7 @@ import tl = require("azure-pipelines-task-lib/task"); import * as path from 'path'; import * as fs from 'fs'; -export class SecretsToErrorsMapping { +export class SecretsToErrorsMapping { public errorsMap: { [key: string]: string; }; constructor() { @@ -48,13 +48,13 @@ export class KeyVault { this.taskParameters = taskParameters; this.keyVaultClient = new armKeyVault.KeyVaultClient( - this.taskParameters.vaultCredentials, + this.taskParameters.vaultCredentials, this.taskParameters.subscriptionId, this.taskParameters.keyVaultName, this.taskParameters.keyVaultUrl); let scriptContentFormat; - if(this.taskParameters.scheme === "ManagedServiceIdentity") { + if (this.taskParameters.scheme === "ManagedServiceIdentity") { scriptContentFormat = `$ErrorActionPreference=\"Stop\"; Login-AzureRmAccount -SubscriptionId %s; $vmMetadata = Invoke-RestMethod -Headers @{"Metadata"="true"} -URI http://169.254.169.254/metadata/instance?api-version=2017-08-01 -Method get @@ -75,8 +75,7 @@ export class KeyVault { public async downloadSecrets(secretsToErrorsMap: SecretsToErrorsMapping): Promise { var downloadAllSecrets = false; - if (this.taskParameters.secretsFilter && this.taskParameters.secretsFilter.length > 0) - { + if (this.taskParameters.secretsFilter && this.taskParameters.secretsFilter.length > 0) { if (this.taskParameters.secretsFilter.length === 1 && this.taskParameters.secretsFilter[0] === "*") { downloadAllSecrets = true; } @@ -90,12 +89,10 @@ export class KeyVault { // Key vault task explicitly handles multi line masking - hence setting SYSTEM_UNSAFEALLOWMULTILINESECRET to true tl.setVariable("SYSTEM_UNSAFEALLOWMULTILINESECRET", "true"); - if (downloadAllSecrets) - { + if (downloadAllSecrets) { return await this.downloadAllSecrets(secretsToErrorsMap); } - else - { + else { return await this.downloadSelectedSecrets(this.taskParameters.secretsFilter, secretsToErrorsMap); } } @@ -117,7 +114,7 @@ export class KeyVault { console.log(tl.loc("NumberOfSecretsFound", this.taskParameters.keyVaultName, listOfSecrets.length)); const secrets = this.filterDisabledAndExpiredSecrets(listOfSecrets).map(secret => secret.name); console.log(tl.loc("NumberOfEnabledSecretsFound", this.taskParameters.keyVaultName, secrets.length)); - + this.downloadSelectedSecrets(secrets, secretsToErrorsMap).then(() => { return resolve(); }); @@ -125,32 +122,28 @@ export class KeyVault { }); } - private async downloadSelectedSecrets(secrets: string[], secretsToErrorsMap: SecretsToErrorsMapping) : Promise - { + private async downloadSelectedSecrets(secrets: string[], secretsToErrorsMap: SecretsToErrorsMapping): Promise { tl.debug(util.format("Downloading selected secrets from subscriptionId: %s, vault: %s", this.taskParameters.subscriptionId, this.taskParameters.keyVaultName)); const chunkSize = 20; - for(let i = 0; i < secrets.length; i += chunkSize) - { - const start = new Date().getTime(); - + for (let i = 0; i < secrets.length; i += chunkSize) { + const start = new Date().getTime(); + tl.debug(`Downloading part [${i} - ${Math.min(secrets.length, i + chunkSize)}] (total ${secrets.length} secrets)`); const secretPromises: Promise[] = []; - for(let j = i; j < secrets.length && j < i + chunkSize; j++) - { + for (let j = i; j < secrets.length && j < i + chunkSize; j++) { secretPromises.push(this.downloadSecretValue(secrets[j], secretsToErrorsMap)); } - + await Promise.all(secretPromises); const end = new Date().getTime(); tl.debug(`Downloaded part [${i} - ${i + secretPromises.length}] (took ${end - start} ms) (total ${secrets.length} secrets)`); } } - private filterDisabledAndExpiredSecrets(listOfSecrets: armKeyVault.AzureKeyVaultSecret[]): armKeyVault.AzureKeyVaultSecret[] - { + private filterDisabledAndExpiredSecrets(listOfSecrets: armKeyVault.AzureKeyVaultSecret[]): armKeyVault.AzureKeyVaultSecret[] { const now: Date = new Date(); - const result = listOfSecrets.filter((value, _) => value.enabled && (!value.expires || value.expires > now)); + const result = listOfSecrets.filter((value, _) => value.enabled && (!value.expires || value.expires > now)); return result; } @@ -167,7 +160,7 @@ export class KeyVault { else { this.setVaultVariable(secretName, secretValue); } - + return resolve(); }); }); diff --git a/Tasks/AzureKeyVaultV2/operations/KeyVault.ts b/Tasks/AzureKeyVaultV2/operations/KeyVault.ts index 33c4b9149887..c485a2b301bd 100644 --- a/Tasks/AzureKeyVaultV2/operations/KeyVault.ts +++ b/Tasks/AzureKeyVaultV2/operations/KeyVault.ts @@ -8,7 +8,7 @@ import * as fs from 'fs'; const DECODE_PERCENTS = "DECODE_PERCENTS"; -export class SecretsToErrorsMapping { +export class SecretsToErrorsMapping { public errorsMap: { [key: string]: string; }; constructor() { @@ -50,13 +50,13 @@ export class KeyVault { this.taskParameters = taskParameters; this.keyVaultClient = new armKeyVault.KeyVaultClient( - this.taskParameters.vaultCredentials, + this.taskParameters.vaultCredentials, this.taskParameters.subscriptionId, this.taskParameters.keyVaultName, this.taskParameters.keyVaultUrl); let scriptContentFormat; - if(this.taskParameters.scheme === "ManagedServiceIdentity") { + if (this.taskParameters.scheme === "ManagedServiceIdentity") { scriptContentFormat = `$ErrorActionPreference=\"Stop\"; Login-AzureRmAccount -SubscriptionId %s; $vmMetadata = Invoke-RestMethod -Headers @{"Metadata"="true"} -URI http://169.254.169.254/metadata/instance?api-version=2017-08-01 -Method get @@ -77,8 +77,7 @@ export class KeyVault { public async downloadSecrets(secretsToErrorsMap: SecretsToErrorsMapping): Promise { var downloadAllSecrets = false; - if (this.taskParameters.secretsFilter && this.taskParameters.secretsFilter.length > 0) - { + if (this.taskParameters.secretsFilter && this.taskParameters.secretsFilter.length > 0) { if (this.taskParameters.secretsFilter.length === 1 && this.taskParameters.secretsFilter[0] === "*") { downloadAllSecrets = true; } @@ -92,12 +91,10 @@ export class KeyVault { // Key vault task explicitly handles multi line masking - hence setting SYSTEM_UNSAFEALLOWMULTILINESECRET to true tl.setVariable("SYSTEM_UNSAFEALLOWMULTILINESECRET", "true"); - if (downloadAllSecrets) - { + if (downloadAllSecrets) { return await this.downloadAllSecrets(secretsToErrorsMap); } - else - { + else { return await this.downloadSelectedSecrets(this.taskParameters.secretsFilter, secretsToErrorsMap); } } @@ -119,7 +116,7 @@ export class KeyVault { console.log(tl.loc("NumberOfSecretsFound", this.taskParameters.keyVaultName, listOfSecrets.length)); const secrets = this.filterDisabledAndExpiredSecrets(listOfSecrets).map(secret => secret.name); console.log(tl.loc("NumberOfEnabledSecretsFound", this.taskParameters.keyVaultName, secrets.length)); - + this.downloadSelectedSecrets(secrets, secretsToErrorsMap).then(() => { return resolve(); }); @@ -127,32 +124,28 @@ export class KeyVault { }); } - private async downloadSelectedSecrets(secrets: string[], secretsToErrorsMap: SecretsToErrorsMapping) : Promise - { + private async downloadSelectedSecrets(secrets: string[], secretsToErrorsMap: SecretsToErrorsMapping): Promise { tl.debug(util.format("Downloading selected secrets from subscriptionId: %s, vault: %s", this.taskParameters.subscriptionId, this.taskParameters.keyVaultName)); const chunkSize = 20; - for(let i = 0; i < secrets.length; i += chunkSize) - { - const start = new Date().getTime(); - + for (let i = 0; i < secrets.length; i += chunkSize) { + const start = new Date().getTime(); + tl.debug(`Downloading part [${i} - ${Math.min(secrets.length, i + chunkSize)}] (total ${secrets.length} secrets)`); const secretPromises: Promise[] = []; - for(let j = i; j < secrets.length && j < i + chunkSize; j++) - { + for (let j = i; j < secrets.length && j < i + chunkSize; j++) { secretPromises.push(this.downloadSecretValue(secrets[j], secretsToErrorsMap)); } - + await Promise.all(secretPromises); const end = new Date().getTime(); tl.debug(`Downloaded part [${i} - ${i + secretPromises.length}] (took ${end - start} ms) (total ${secrets.length} secrets)`); } } - private filterDisabledAndExpiredSecrets(listOfSecrets: armKeyVault.AzureKeyVaultSecret[]): armKeyVault.AzureKeyVaultSecret[] - { + private filterDisabledAndExpiredSecrets(listOfSecrets: armKeyVault.AzureKeyVaultSecret[]): armKeyVault.AzureKeyVaultSecret[] { const now: Date = new Date(); - const result = listOfSecrets.filter((value, _) => value.enabled && (!value.expires || value.expires > now)); + const result = listOfSecrets.filter((value, _) => value.enabled && (!value.expires || value.expires > now)); return result; } @@ -169,7 +162,7 @@ export class KeyVault { else { this.setVaultVariable(secretName, secretValue); } - + return resolve(); }); }); From 45d2a032a5b58a46a51814452e90d12c80e79c59 Mon Sep 17 00:00:00 2001 From: Ondrej Netocny Date: Wed, 28 Dec 2022 13:19:58 +0100 Subject: [PATCH 05/10] Simplify retriable error check --- .../operations/azure-arm-keyvault.ts | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts b/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts index a8d34c4b1446..dffacbea2e94 100644 --- a/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts +++ b/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts @@ -18,6 +18,7 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { private readonly retriableErrorCodes = ["ETIMEDOUT", "ECONNRESET", "ENOTFOUND", "ESOCKETTIMEDOUT", "ECONNREFUSED", "EHOSTUNREACH", "EPIPE", "EA_AGAIN", "EAI_AGAIN"]; private readonly retriableStatusCodes = [408, 409, 500, 502, 503, 504]; + private readonly retriableErrorMessages = ["Request timeout: ", "getaddrinfo "]; constructor(credentials: msRestAzure.ApplicationTokenCredentials, subscriptionId: string, @@ -99,17 +100,7 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { return false; } - if (error.message.startsWith("Request timeout: ")) - { - return true; - } - - if (error.message.startsWith("getaddrinfo ")) - { - return true; - } - - return false; + return this.retriableErrorMessages.some(m => error.message.startsWith(m)); } public getValidVaultResourceId(response: webClient.WebResponse) { From c45afa34a32e382c7ea65d501cf56961d583ce78 Mon Sep 17 00:00:00 2001 From: Ondrej Netocny Date: Wed, 28 Dec 2022 13:21:01 +0100 Subject: [PATCH 06/10] Fix formatting --- .../operations/azure-arm-keyvault.ts | 57 +++++++------------ 1 file changed, 21 insertions(+), 36 deletions(-) diff --git a/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts b/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts index dffacbea2e94..7ec500514065 100644 --- a/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts +++ b/Tasks/AzureKeyVaultV1/operations/azure-arm-keyvault.ts @@ -19,7 +19,7 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { private readonly retriableErrorCodes = ["ETIMEDOUT", "ECONNRESET", "ENOTFOUND", "ESOCKETTIMEDOUT", "ECONNREFUSED", "EHOSTUNREACH", "EPIPE", "EA_AGAIN", "EAI_AGAIN"]; private readonly retriableStatusCodes = [408, 409, 500, 502, 503, 504]; private readonly retriableErrorMessages = ["Request timeout: ", "getaddrinfo "]; - + constructor(credentials: msRestAzure.ApplicationTokenCredentials, subscriptionId: string, keyVaultName: string, @@ -32,23 +32,18 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { this.apiVersion = '2016-10-01'; } - public async invokeRequest(request: webClient.WebRequest): Promise - { + public async invokeRequest(request: webClient.WebRequest): Promise { const maxRetryCount: number = 5; const retryIntervalInSeconds: number = 2; let retryCount: number = 0; - while (true) - { - try - { + while (true) { + try { let response = await this.beginRequest(request); - if (response.statusCode == 401) - { + if (response.statusCode == 401) { const vaultResourceId = this.getValidVaultResourceId(response); - if (!!vaultResourceId) - { + if (!!vaultResourceId) { console.log(tl.loc("RetryingWithVaultResourceIdFromResponse", vaultResourceId)); this.getCredentials().activeDirectoryResourceId = vaultResourceId; // update vault resource Id @@ -57,46 +52,38 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { } } - if (this.retriableStatusCodes.indexOf(response.statusCode) === -1) - { + if (this.retriableStatusCodes.indexOf(response.statusCode) === -1) { return response; } - if (++retryCount >= maxRetryCount) - { + if (++retryCount >= maxRetryCount) { return response; } - tl.debug(`Encountered a retriable status code: ${response.statusCode}. Message: '${response.statusMessage}'.`); + tl.debug(`Encountered a retriable status code: ${response.statusCode}. Message: '${response.statusMessage}'.`); } - catch (error) - { - if (++retryCount >= maxRetryCount) - { + catch (error) { + if (++retryCount >= maxRetryCount) { throw error; } - if (!this.isRetriableError(error)) - { + if (!this.isRetriableError(error)) { throw error; } - tl.debug(`Encountered an error. Will retry. Error: ${error.code}. Message: ${error.message}.`); + tl.debug(`Encountered an error. Will retry. Error: ${error.code}. Message: ${error.message}.`); } await webClient.sleepFor(retryIntervalInSeconds); } } - private isRetriableError(error: any): boolean - { - if (this.retriableErrorCodes.indexOf(error.code) !== -1) - { + private isRetriableError(error: any): boolean { + if (this.retriableErrorCodes.indexOf(error.code) !== -1) { return true; } - if (!error.message) - { + if (!error.message) { return false; } @@ -107,13 +94,13 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { if (!!response.headers) { var authenticateHeader = response.headers['www-authenticate']; if (!!authenticateHeader) { - var parsedParams = authenticateHeader.split(",").map(pair => pair.split("=").map(function(item) { + var parsedParams = authenticateHeader.split(",").map(pair => pair.split("=").map(function (item) { return item.trim(); })); const properties = {}; - parsedParams.forEach(([key,value]) => properties[key] = value); - if(properties['resource']) { + parsedParams.forEach(([key, value]) => properties[key] = value); + if (properties['resource']) { return properties['resource'].split('"').join(''); } } @@ -129,8 +116,7 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { // Create HTTP transport objects var url = nextLink; - if (!url) - { + if (!url) { url = this.getRequestUriForBaseUri( this.keyVaultUrl, '/secrets', @@ -211,8 +197,7 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { var listOfSecrets: AzureKeyVaultSecret[] = []; result.forEach((value: any, index: number) => { var expires; - if (value.attributes.exp) - { + if (value.attributes.exp) { expires = new Date(0); expires.setSeconds(parseInt(value.attributes.exp)); } From fa3c9218a1edef9b1fb2754eef28df3d926a9426 Mon Sep 17 00:00:00 2001 From: Ondrej Netocny Date: Wed, 28 Dec 2022 13:26:18 +0100 Subject: [PATCH 07/10] Port changes to V2 --- .../operations/azure-arm-keyvault.ts | 22 +++++-------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts b/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts index 0fc39126602f..8593b39d606d 100644 --- a/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts +++ b/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts @@ -18,6 +18,7 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { private readonly retriableErrorCodes = ["ETIMEDOUT", "ECONNRESET", "ENOTFOUND", "ESOCKETTIMEDOUT", "ECONNREFUSED", "EHOSTUNREACH", "EPIPE", "EA_AGAIN", "EAI_AGAIN"]; private readonly retriableStatusCodes = [408, 409, 500, 502, 503, 504]; + private readonly retriableErrorMessages = ["Request timeout: ", "getaddrinfo "]; constructor(credentials: msRestAzure.ApplicationTokenCredentials, subscriptionId: string, @@ -87,29 +88,16 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { } } - private isRetriableError(error: any): boolean - { - if (this.retriableErrorCodes.indexOf(error.code) !== -1) - { + private isRetriableError(error: any): boolean { + if (this.retriableErrorCodes.indexOf(error.code) !== -1) { return true; } - if (!error.message) - { + if (!error.message) { return false; } - if (error.message.startsWith("Request timeout: ")) - { - return true; - } - - if (error.message.startsWith("getaddrinfo ")) - { - return true; - } - - return false; + return this.retriableErrorMessages.some(m => error.message.startsWith(m)); } public getValidVaultResourceId(response: webClient.WebResponse) { From cfec778dcfe6f4c69239150e108ddb8a9ea9c190 Mon Sep 17 00:00:00 2001 From: Ondrej Netocny Date: Wed, 28 Dec 2022 13:26:33 +0100 Subject: [PATCH 08/10] Fix formatting --- .../operations/azure-arm-keyvault.ts | 46 +++++++------------ 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts b/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts index 8593b39d606d..7ec500514065 100644 --- a/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts +++ b/Tasks/AzureKeyVaultV2/operations/azure-arm-keyvault.ts @@ -32,23 +32,18 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { this.apiVersion = '2016-10-01'; } - public async invokeRequest(request: webClient.WebRequest): Promise - { + public async invokeRequest(request: webClient.WebRequest): Promise { const maxRetryCount: number = 5; const retryIntervalInSeconds: number = 2; let retryCount: number = 0; - while (true) - { - try - { + while (true) { + try { let response = await this.beginRequest(request); - if (response.statusCode == 401) - { + if (response.statusCode == 401) { const vaultResourceId = this.getValidVaultResourceId(response); - if (!!vaultResourceId) - { + if (!!vaultResourceId) { console.log(tl.loc("RetryingWithVaultResourceIdFromResponse", vaultResourceId)); this.getCredentials().activeDirectoryResourceId = vaultResourceId; // update vault resource Id @@ -57,31 +52,26 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { } } - if (this.retriableStatusCodes.indexOf(response.statusCode) === -1) - { + if (this.retriableStatusCodes.indexOf(response.statusCode) === -1) { return response; } - if (++retryCount >= maxRetryCount) - { + if (++retryCount >= maxRetryCount) { return response; } - tl.debug(`Encountered a retriable status code: ${response.statusCode}. Message: '${response.statusMessage}'.`); + tl.debug(`Encountered a retriable status code: ${response.statusCode}. Message: '${response.statusMessage}'.`); } - catch (error) - { - if (++retryCount >= maxRetryCount) - { + catch (error) { + if (++retryCount >= maxRetryCount) { throw error; } - if (!this.isRetriableError(error)) - { + if (!this.isRetriableError(error)) { throw error; } - tl.debug(`Encountered an error. Will retry. Error: ${error.code}. Message: ${error.message}.`); + tl.debug(`Encountered an error. Will retry. Error: ${error.code}. Message: ${error.message}.`); } await webClient.sleepFor(retryIntervalInSeconds); @@ -104,13 +94,13 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { if (!!response.headers) { var authenticateHeader = response.headers['www-authenticate']; if (!!authenticateHeader) { - var parsedParams = authenticateHeader.split(",").map(pair => pair.split("=").map(function(item) { + var parsedParams = authenticateHeader.split(",").map(pair => pair.split("=").map(function (item) { return item.trim(); })); const properties = {}; - parsedParams.forEach(([key,value]) => properties[key] = value); - if(properties['resource']) { + parsedParams.forEach(([key, value]) => properties[key] = value); + if (properties['resource']) { return properties['resource'].split('"').join(''); } } @@ -126,8 +116,7 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { // Create HTTP transport objects var url = nextLink; - if (!url) - { + if (!url) { url = this.getRequestUriForBaseUri( this.keyVaultUrl, '/secrets', @@ -208,8 +197,7 @@ export class KeyVaultClient extends azureServiceClient.ServiceClient { var listOfSecrets: AzureKeyVaultSecret[] = []; result.forEach((value: any, index: number) => { var expires; - if (value.attributes.exp) - { + if (value.attributes.exp) { expires = new Date(0); expires.setSeconds(parseInt(value.attributes.exp)); } From 9e910a90b6fe70a60bfe10ccc6f26ba8abac4402 Mon Sep 17 00:00:00 2001 From: Ondrej Netocny Date: Wed, 28 Dec 2022 13:50:22 +0100 Subject: [PATCH 09/10] Update version of common lib --- Tasks/AzureKeyVaultV1/npm-shrinkwrap.json | 129 +++++++++++++++------- Tasks/AzureKeyVaultV1/package.json | 2 +- Tasks/AzureKeyVaultV2/npm-shrinkwrap.json | 80 +++++++++++++- Tasks/AzureKeyVaultV2/package.json | 2 +- 4 files changed, 167 insertions(+), 46 deletions(-) diff --git a/Tasks/AzureKeyVaultV1/npm-shrinkwrap.json b/Tasks/AzureKeyVaultV1/npm-shrinkwrap.json index f7899aa2138a..1b6ede729e77 100644 --- a/Tasks/AzureKeyVaultV1/npm-shrinkwrap.json +++ b/Tasks/AzureKeyVaultV1/npm-shrinkwrap.json @@ -4,16 +4,16 @@ "lockfileVersion": 1, "dependencies": { "@azure/msal-common": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-8.0.0.tgz", - "integrity": "sha512-KLGVmWoDcpWl/SKb4TZUjWm+l3lim4tUwAAvCM8N8rSHu8r0NtMTySMWBv7d3G8as1SvC4nr3eTae1+9hTp4wg==" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.0.1.tgz", + "integrity": "sha512-eNNHIW/cwPTZDWs9KtYgb1X6gtQ+cC+FGX2YN+t4AUVsBdUbqlMTnUs6/c/VBxC2AAGIhgLREuNnO3F66AN2zQ==" }, "@azure/msal-node": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.3.tgz", - "integrity": "sha512-95fuxbSq/5PNlxWybQID8ShFBMjYSN0XvHUPmelwgsgJiO3F+TN5SpIvjgLGa+aMVAxEYq6TvKXK+I3qm1EMqQ==", + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.5.tgz", + "integrity": "sha512-NcVdMfn8Z3ogN+9RjOSF7uwf2Gki5DEJl0BdDSL83KUAgVAobtkZi5W8EqxbJLrTO/ET0jv5DregrcR5qg2pEA==", "requires": { - "@azure/msal-common": "^8.0.0", + "@azure/msal-common": "^9.0.1", "jsonwebtoken": "^8.5.1", "uuid": "^8.3.0" }, @@ -74,11 +74,24 @@ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" }, + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "requires": { + "tslib": "^2.4.0" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -115,17 +128,20 @@ } }, "azure-pipelines-tasks-azure-arm-rest-v2": { - "version": "3.213.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-3.213.0.tgz", - "integrity": "sha512-KW0Yw0YcTcArOEcXVNcyKvM/cbNpCgmvluNrcCr/o/Kpf7mlI7t9YeW9Gv+844/LAb5vreg5mPm9GX9XW8mLCA==", + "version": "3.216.1", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-3.216.1.tgz", + "integrity": "sha512-rOZce80bggUt9XFxXmCBZwsJavtHYZtIbjRLZ/QfQEPyg/Y3pEXmVh138D1f5SVNWaWYybefarNVQAu81s16FA==", "requires": { "@azure/msal-node": "^1.14.2", "@types/jsonwebtoken": "^8.5.8", "@types/mocha": "^5.2.7", "@types/node": "^10.17.0", "@types/q": "1.5.4", + "async-mutex": "^0.4.0", "azure-pipelines-task-lib": "^3.1.0", + "https-proxy-agent": "^4.0.0", "jsonwebtoken": "^8.5.1", + "node-fetch": "^2.6.7", "q": "1.5.1", "typed-rest-client": "1.8.4" }, @@ -136,41 +152,18 @@ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, "azure-pipelines-task-lib": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz", - "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", + "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", "requires": { "minimatch": "3.0.5", - "mockery": "^1.7.0", + "mockery": "^2.1.0", "q": "^1.5.1", "semver": "^5.1.0", "shelljs": "^0.8.5", "sync-request": "6.1.0", "uuid": "^3.0.1" } - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } } } }, @@ -241,6 +234,21 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -344,6 +352,15 @@ "@types/node": "^10.0.3" } }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + } + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -469,9 +486,9 @@ } }, "mockery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", - "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" }, "moment": { "version": "2.29.4", @@ -483,6 +500,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -669,6 +694,16 @@ } } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -717,6 +752,20 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/Tasks/AzureKeyVaultV1/package.json b/Tasks/AzureKeyVaultV1/package.json index f0df66d92b08..cd5c4c1bc08e 100644 --- a/Tasks/AzureKeyVaultV1/package.json +++ b/Tasks/AzureKeyVaultV1/package.json @@ -8,7 +8,7 @@ "@types/uuid": "^8.3.0", "azure-devops-node-api": "11.2.0", "azure-pipelines-task-lib": "^4.0.1-preview", - "azure-pipelines-tasks-azure-arm-rest-v2": "^3.213.0", + "azure-pipelines-tasks-azure-arm-rest-v2": "^3.216.1", "moment": "^2.29.4" }, "devDependencies": { diff --git a/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json b/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json index 0a683a9a9004..d2cf837bce0b 100644 --- a/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json +++ b/Tasks/AzureKeyVaultV2/npm-shrinkwrap.json @@ -74,11 +74,24 @@ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" }, + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "requires": { + "tslib": "^2.4.0" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -115,17 +128,20 @@ } }, "azure-pipelines-tasks-azure-arm-rest-v2": { - "version": "3.216.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-3.216.0.tgz", - "integrity": "sha512-6E3iOJW28wDfJ0ZoehiwmWG63FPXhSHAQail8yKelygwM+7E2mGus2CbWkjMQVyQvNoFFDJvM03Co7Z70O2Rqw==", + "version": "3.216.1", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-3.216.1.tgz", + "integrity": "sha512-rOZce80bggUt9XFxXmCBZwsJavtHYZtIbjRLZ/QfQEPyg/Y3pEXmVh138D1f5SVNWaWYybefarNVQAu81s16FA==", "requires": { "@azure/msal-node": "^1.14.2", "@types/jsonwebtoken": "^8.5.8", "@types/mocha": "^5.2.7", "@types/node": "^10.17.0", "@types/q": "1.5.4", + "async-mutex": "^0.4.0", "azure-pipelines-task-lib": "^3.1.0", + "https-proxy-agent": "^4.0.0", "jsonwebtoken": "^8.5.1", + "node-fetch": "^2.6.7", "q": "1.5.1", "typed-rest-client": "1.8.4" }, @@ -213,6 +229,21 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -316,6 +347,15 @@ "@types/node": "^10.0.3" } }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + } + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -455,6 +495,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -499,7 +547,7 @@ "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" }, "qs": { "version": "6.11.0", @@ -641,6 +689,16 @@ } } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -689,6 +747,20 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/Tasks/AzureKeyVaultV2/package.json b/Tasks/AzureKeyVaultV2/package.json index f0df66d92b08..cd5c4c1bc08e 100644 --- a/Tasks/AzureKeyVaultV2/package.json +++ b/Tasks/AzureKeyVaultV2/package.json @@ -8,7 +8,7 @@ "@types/uuid": "^8.3.0", "azure-devops-node-api": "11.2.0", "azure-pipelines-task-lib": "^4.0.1-preview", - "azure-pipelines-tasks-azure-arm-rest-v2": "^3.213.0", + "azure-pipelines-tasks-azure-arm-rest-v2": "^3.216.1", "moment": "^2.29.4" }, "devDependencies": { From 3cdd9c344feb589ae4c5748474662b858bbc66db Mon Sep 17 00:00:00 2001 From: Ondrej Netocny Date: Wed, 28 Dec 2022 13:55:51 +0100 Subject: [PATCH 10/10] Bump up task versions --- Tasks/AzureKeyVaultV1/task.json | 4 ++-- Tasks/AzureKeyVaultV1/task.loc.json | 4 ++-- Tasks/AzureKeyVaultV2/task.json | 4 ++-- Tasks/AzureKeyVaultV2/task.loc.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Tasks/AzureKeyVaultV1/task.json b/Tasks/AzureKeyVaultV1/task.json index e5f328983471..ecad88d80c53 100644 --- a/Tasks/AzureKeyVaultV1/task.json +++ b/Tasks/AzureKeyVaultV1/task.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 215, - "Patch": 1 + "Minor": 216, + "Patch": 0 }, "demands": [], "minimumAgentVersion": "2.0.0", diff --git a/Tasks/AzureKeyVaultV1/task.loc.json b/Tasks/AzureKeyVaultV1/task.loc.json index 62d661969c12..3b3f336e150f 100644 --- a/Tasks/AzureKeyVaultV1/task.loc.json +++ b/Tasks/AzureKeyVaultV1/task.loc.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 215, - "Patch": 1 + "Minor": 216, + "Patch": 0 }, "demands": [], "minimumAgentVersion": "2.0.0", diff --git a/Tasks/AzureKeyVaultV2/task.json b/Tasks/AzureKeyVaultV2/task.json index 9a9de8b72a46..3baaf65db836 100644 --- a/Tasks/AzureKeyVaultV2/task.json +++ b/Tasks/AzureKeyVaultV2/task.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 215, - "Patch": 1 + "Minor": 216, + "Patch": 0 }, "demands": [], "minimumAgentVersion": "2.182.1", diff --git a/Tasks/AzureKeyVaultV2/task.loc.json b/Tasks/AzureKeyVaultV2/task.loc.json index 646659964de3..6feafa180e2d 100644 --- a/Tasks/AzureKeyVaultV2/task.loc.json +++ b/Tasks/AzureKeyVaultV2/task.loc.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 215, - "Patch": 1 + "Minor": 216, + "Patch": 0 }, "demands": [], "minimumAgentVersion": "2.182.1",