mirror of
https://github.com/actions/cache.git
synced 2026-08-21 17:19:10 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01b0229624 | ||
|
|
c4678ef19f | ||
|
|
fe28a720e4 | ||
|
|
84dee78cdb | ||
|
|
bd9fe45728 | ||
|
|
e9d6e93306 | ||
|
|
a89dcfa06d | ||
|
|
114965806a | ||
|
|
2bdaf00273 |
+3
-2
@@ -9,14 +9,15 @@
|
||||
"plugin:import/errors",
|
||||
"plugin:import/warnings",
|
||||
"plugin:import/typescript",
|
||||
"plugin:prettier/recommended"
|
||||
"plugin:prettier/recommended",
|
||||
"prettier/@typescript-eslint"
|
||||
],
|
||||
"plugins": ["@typescript-eslint", "simple-import-sort", "jest"],
|
||||
"rules": {
|
||||
"import/first": "error",
|
||||
"import/newline-after-import": "error",
|
||||
"import/no-duplicates": "error",
|
||||
"simple-import-sort/imports": "error",
|
||||
"simple-import-sort/sort": "error",
|
||||
"sort-imports": "off"
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -1,2 +1 @@
|
||||
.licenses/** -diff linguist-generated=true
|
||||
* text=auto eol=lf
|
||||
.licenses/** -diff linguist-generated=true
|
||||
+1
-1
@@ -1 +1 @@
|
||||
* @actions/actions-cache
|
||||
* @artifacts-actions
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# `dist/index.js` is a special file in Actions.
|
||||
# When you reference an action with `uses:` in a workflow,
|
||||
# `index.js` is the code that will run.
|
||||
# For our project, we generate this file through a build process
|
||||
# from other source files.
|
||||
# We need to make sure the checked-in `index.js` actually matches what we expect it to be.
|
||||
name: Check dist/
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
check-dist:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Set Node.js 12.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 12.x
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Rebuild the dist/ directory
|
||||
run: npm run build
|
||||
|
||||
- name: Compare the expected and actual dist/ directories
|
||||
run: |
|
||||
if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then
|
||||
echo "Detected uncommitted changes after build. See status below:"
|
||||
git diff
|
||||
exit 1
|
||||
fi
|
||||
id: diff
|
||||
|
||||
# If index.js was different than expected, upload the expected version as an artifact
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: ${{ failure() && steps.diff.conclusion == 'failure' }}
|
||||
with:
|
||||
name: dist
|
||||
path: dist/
|
||||
@@ -1,22 +0,0 @@
|
||||
name: Close inactive issues
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 8 * * *"
|
||||
|
||||
jobs:
|
||||
close-issues:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v3
|
||||
with:
|
||||
days-before-issue-stale: 365
|
||||
days-before-issue-close: 5
|
||||
stale-issue-label: "stale"
|
||||
stale-issue-message: "This issue is stale because it has been open for 365 days with no activity. Leave a comment to avoid closing this issue in 5 days."
|
||||
close-issue-message: "This issue was closed because it has been inactive for 5 days since being marked as stale."
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -1,12 +1,8 @@
|
||||
name: Licensed
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
push: {branches: main}
|
||||
pull_request: {branches: main}
|
||||
|
||||
jobs:
|
||||
test:
|
||||
@@ -21,4 +17,4 @@ jobs:
|
||||
curl -Lfs -o licensed.tar.gz https://github.com/github/licensed/releases/download/2.12.2/licensed-2.12.2-linux-x64.tar.gz
|
||||
sudo tar -xzf licensed.tar.gz
|
||||
sudo mv licensed /usr/local/bin/licensed
|
||||
- run: licensed status
|
||||
- run: licensed status
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
||||
os: [ubuntu-latest, ubuntu-16.04, windows-latest, macOS-latest]
|
||||
fail-fast: false
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
@@ -47,12 +47,23 @@ jobs:
|
||||
run: npm run lint
|
||||
- name: Build & Test
|
||||
run: npm run test
|
||||
- name: Ensure dist/ folder is up-to-date
|
||||
if: ${{ runner.os == 'Linux' }}
|
||||
shell: bash
|
||||
run: |
|
||||
npm run build
|
||||
if [ "$(git diff --ignore-space-at-eol | wc -l)" -gt "0" ]; then
|
||||
echo "Detected uncommitted changes after build. See status below:"
|
||||
git diff
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# End to end save and restore
|
||||
test-save:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
||||
os: [ubuntu-latest, ubuntu-16.04, windows-latest, macOS-latest]
|
||||
fail-fast: false
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
@@ -75,7 +86,7 @@ jobs:
|
||||
needs: test-save
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
||||
os: [ubuntu-latest, ubuntu-16.04, windows-latest, macOS-latest]
|
||||
fail-fast: false
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: "@actions/cache"
|
||||
version: 1.0.9
|
||||
version: 1.0.4
|
||||
type: npm
|
||||
summary: Actions cache lib
|
||||
homepage: https://github.com/actions/toolkit/tree/main/packages/cache
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: "@actions/core"
|
||||
version: 1.6.0
|
||||
version: 1.2.6
|
||||
type: npm
|
||||
summary: Actions core lib
|
||||
homepage: https://github.com/actions/toolkit/tree/main/packages/core
|
||||
|
||||
Generated
+20
-10
@@ -1,20 +1,30 @@
|
||||
---
|
||||
name: "@actions/exec"
|
||||
version: 1.1.0
|
||||
version: 1.0.4
|
||||
type: npm
|
||||
summary: Actions exec lib
|
||||
homepage: https://github.com/actions/toolkit/tree/main/packages/exec
|
||||
homepage: https://github.com/actions/toolkit/tree/master/packages/exec
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE.md
|
||||
text: |-
|
||||
The MIT License (MIT)
|
||||
- sources: Auto-generated MIT license text
|
||||
text: |
|
||||
MIT License
|
||||
|
||||
Copyright 2019 GitHub
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
notices: []
|
||||
|
||||
Generated
+20
-10
@@ -1,20 +1,30 @@
|
||||
---
|
||||
name: "@actions/glob"
|
||||
version: 0.1.2
|
||||
version: 0.1.0
|
||||
type: npm
|
||||
summary: Actions glob lib
|
||||
homepage: https://github.com/actions/toolkit/tree/main/packages/glob
|
||||
homepage: https://github.com/actions/toolkit/tree/master/packages/glob
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE.md
|
||||
text: |-
|
||||
The MIT License (MIT)
|
||||
- sources: Auto-generated MIT license text
|
||||
text: |
|
||||
MIT License
|
||||
|
||||
Copyright 2019 GitHub
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
notices: []
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: "@actions/http-client"
|
||||
version: 1.0.11
|
||||
version: 1.0.9
|
||||
type: npm
|
||||
summary: Actions Http Client
|
||||
homepage: https://github.com/actions/http-client#readme
|
||||
|
||||
Generated
+20
-10
@@ -1,20 +1,30 @@
|
||||
---
|
||||
name: "@actions/io"
|
||||
version: 1.1.1
|
||||
version: 1.0.2
|
||||
type: npm
|
||||
summary: Actions io lib
|
||||
homepage: https://github.com/actions/toolkit/tree/main/packages/io
|
||||
homepage: https://github.com/actions/toolkit/tree/master/packages/io
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE.md
|
||||
text: |-
|
||||
The MIT License (MIT)
|
||||
- sources: Auto-generated MIT license text
|
||||
text: |
|
||||
MIT License
|
||||
|
||||
Copyright 2019 GitHub
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
notices: []
|
||||
|
||||
+20
-20
@@ -1,32 +1,32 @@
|
||||
---
|
||||
name: "@azure/abort-controller"
|
||||
version: 1.0.4
|
||||
version: 1.0.1
|
||||
type: npm
|
||||
summary: Microsoft Azure SDK for JavaScript - Aborter
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/core/abort-controller/README.md
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/core/abort-controller
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
text: |
|
||||
The MIT License (MIT)
|
||||
text: |2
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Microsoft
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE
|
||||
notices: []
|
||||
|
||||
Generated
+2
-2
@@ -1,10 +1,10 @@
|
||||
---
|
||||
name: "@azure/core-auth"
|
||||
version: 1.3.2
|
||||
version: 1.1.3
|
||||
type: npm
|
||||
summary: Provides low-level interfaces and helper methods for authentication in Azure
|
||||
SDK
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-auth/README.md
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/core/core-auth/README.md
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
|
||||
Generated
+2
-2
@@ -1,10 +1,10 @@
|
||||
---
|
||||
name: "@azure/core-http"
|
||||
version: 2.2.4
|
||||
version: 1.1.9
|
||||
type: npm
|
||||
summary: Isomorphic client Runtime for Typescript/node.js/browser javascript client
|
||||
libraries generated using AutoRest
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-http/README.md
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/core/core-http/README.md
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
|
||||
Generated
+3
-4
@@ -1,10 +1,9 @@
|
||||
---
|
||||
name: "@azure/core-lro"
|
||||
version: 2.2.3
|
||||
version: 1.0.2
|
||||
type: npm
|
||||
summary: Isomorphic client library for supporting long-running operations in node.js
|
||||
and browser.
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-lro/README.md
|
||||
summary: LRO Polling strtegy for the Azure SDK in TypeScript
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/core/core-lro
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
|
||||
Generated
+2
-2
@@ -1,9 +1,9 @@
|
||||
---
|
||||
name: "@azure/core-paging"
|
||||
version: 1.2.1
|
||||
version: 1.1.3
|
||||
type: npm
|
||||
summary: Core types for paging async iterable iterators
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/core-paging/README.md
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/core/core-paging/README.md
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
---
|
||||
name: "@azure/core-tracing"
|
||||
version: 1.0.0-preview.13
|
||||
version: 1.0.0-preview.8
|
||||
type: npm
|
||||
summary: Provides low-level interfaces and helper methods for tracing in Azure SDK
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-tracing/README.md
|
||||
homepage: https://github.com/azure/azure-sdk-for-js/tree/master/sdk/core/core-tracing
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
+8
-6
@@ -1,14 +1,16 @@
|
||||
---
|
||||
name: tr46
|
||||
version: 0.0.3
|
||||
name: "@azure/core-tracing"
|
||||
version: 1.0.0-preview.9
|
||||
type: npm
|
||||
summary: An implementation of the Unicode TR46 spec
|
||||
homepage: https://github.com/Sebmaster/tr46.js#readme
|
||||
summary: Provides low-level interfaces and helper methods for tracing in Azure SDK
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/core/core-tracing/README.md
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: Auto-generated MIT license text
|
||||
- sources: LICENSE
|
||||
text: |
|
||||
MIT License
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2020 Microsoft
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
Generated
+20
-20
@@ -1,32 +1,32 @@
|
||||
---
|
||||
name: "@azure/logger"
|
||||
version: 1.0.3
|
||||
version: 1.0.0
|
||||
type: npm
|
||||
summary: Microsoft Azure SDK for JavaScript - Logger
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/logger/README.md
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/core/logger
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
text: |
|
||||
The MIT License (MIT)
|
||||
text: |2
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Microsoft
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE
|
||||
notices: []
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: "@azure/ms-rest-js"
|
||||
version: 2.6.0
|
||||
version: 2.1.0
|
||||
type: npm
|
||||
summary: Isomorphic client Runtime for Typescript/node.js/browser javascript client
|
||||
libraries generated using AutoRest
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
---
|
||||
name: "@azure/storage-blob"
|
||||
version: 12.8.0
|
||||
version: 12.2.1
|
||||
type: npm
|
||||
summary: Microsoft Azure Storage SDK for JavaScript - Blob
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/storage/storage-blob/
|
||||
homepage: https://github.com/Azure/azure-sdk-for-js#readme
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
|
||||
+14
-13
@@ -1,13 +1,15 @@
|
||||
---
|
||||
name: "@opentelemetry/api"
|
||||
version: 1.0.4
|
||||
name: "@opencensus/web-types"
|
||||
version: 0.0.7
|
||||
type: npm
|
||||
summary: Public API for OpenTelemetry
|
||||
homepage: https://github.com/open-telemetry/opentelemetry-js-api#readme
|
||||
summary: OpenCensus Web types is a slightly-patched copy of the `types.ts` files from
|
||||
`@opencensus/core` so that they can be easily imported in web-specific packages.
|
||||
homepage: https://github.com/census-instrumentation/opencensus-web#readme
|
||||
license: apache-2.0
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
text: |2
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
@@ -213,13 +215,12 @@ licenses:
|
||||
text: |-
|
||||
Apache 2.0 - See [LICENSE][license-url] for more information.
|
||||
|
||||
[opentelemetry-js]: https://github.com/open-telemetry/opentelemetry-js
|
||||
|
||||
[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions
|
||||
[license-url]: https://github.com/open-telemetry/opentelemetry-js-api/blob/main/LICENSE
|
||||
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
|
||||
[npm-url]: https://www.npmjs.com/package/@opentelemetry/api
|
||||
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fapi.svg
|
||||
[docs-tracing]: https://github.com/open-telemetry/opentelemetry-js-api/blob/main/docs/tracing.md
|
||||
[docs-sdk-registration]: https://github.com/open-telemetry/opentelemetry-js-api/blob/main/docs/sdk-registration.md
|
||||
[gitter-image]: https://badges.gitter.im/census-instrumentation/lobby.svg
|
||||
[gitter-url]: https://gitter.im/census-instrumentation/lobby
|
||||
[opencensus-core-url]: https://github.com/census-instrumentation/opencensus-node/tree/master/packages/opencensus-core
|
||||
[oc-web-readme-url]: https://github.com/census-instrumentation/opencensus-web/blob/master/README.md
|
||||
[license-url]: https://github.com/census-instrumentation/opencensus-web/blob/master/packages/opencensus-web-instrumentation-perf/LICENSE
|
||||
[rules-typescript-url]: https://github.com/bazelbuild/rules_typescript
|
||||
[tsickle-url]: https://github.com/angular/tsickle
|
||||
[closure-url]: https://github.com/google/closure-compiler
|
||||
notices: []
|
||||
+238
@@ -0,0 +1,238 @@
|
||||
---
|
||||
name: "@opentelemetry/api"
|
||||
version: 0.10.2
|
||||
type: npm
|
||||
summary: Public API for OpenTelemetry
|
||||
homepage: https://github.com/open-telemetry/opentelemetry-js#readme
|
||||
license: apache-2.0
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
text: |2
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
- sources: README.md
|
||||
text: |-
|
||||
Apache 2.0 - See [LICENSE][license-url] for more information.
|
||||
|
||||
[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg
|
||||
[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
||||
[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE
|
||||
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
|
||||
[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-api
|
||||
[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-api
|
||||
[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-api
|
||||
[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-api&type=dev
|
||||
[npm-url]: https://www.npmjs.com/package/@opentelemetry/api
|
||||
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fapi.svg
|
||||
|
||||
[trace-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/traceapi.html
|
||||
[metrics-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/metricsapi.html
|
||||
[propagation-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/propagationapi.html
|
||||
[context-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/contextapi.html
|
||||
|
||||
[web]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-web
|
||||
[tracing]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-tracing
|
||||
[node]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-node
|
||||
[metrics]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-metrics
|
||||
|
||||
[other-tracing-backends]: https://github.com/open-telemetry/opentelemetry-js#trace-exporters
|
||||
notices: []
|
||||
+238
@@ -0,0 +1,238 @@
|
||||
---
|
||||
name: "@opentelemetry/api"
|
||||
version: 0.6.1
|
||||
type: npm
|
||||
summary: Public API for OpenTelemetry
|
||||
homepage: https://github.com/open-telemetry/opentelemetry-js#readme
|
||||
license: apache-2.0
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
text: |2
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
- sources: README.md
|
||||
text: |-
|
||||
Apache 2.0 - See [LICENSE][license-url] for more information.
|
||||
|
||||
[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg
|
||||
[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
||||
[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE
|
||||
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
|
||||
[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-api
|
||||
[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-api
|
||||
[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-api
|
||||
[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-api&type=dev
|
||||
[npm-url]: https://www.npmjs.com/package/@opentelemetry/api
|
||||
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fapi.svg
|
||||
|
||||
[trace-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/traceapi.html
|
||||
[metrics-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/metricsapi.html
|
||||
[propagation-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/propagationapi.html
|
||||
[context-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/contextapi.html
|
||||
|
||||
[web]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-web
|
||||
[tracing]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-tracing
|
||||
[node]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-node
|
||||
[metrics]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-metrics
|
||||
|
||||
[other-tracing-backends]: https://github.com/open-telemetry/opentelemetry-js#trace-exporters
|
||||
notices: []
|
||||
@@ -0,0 +1,227 @@
|
||||
---
|
||||
name: "@opentelemetry/context-base"
|
||||
version: 0.10.2
|
||||
type: npm
|
||||
summary: OpenTelemetry Base Context Manager
|
||||
homepage: https://github.com/open-telemetry/opentelemetry-js#readme
|
||||
license: apache-2.0
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
text: |2
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
- sources: README.md
|
||||
text: |-
|
||||
Apache 2.0 - See [LICENSE][license-url] for more information.
|
||||
|
||||
[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg
|
||||
[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
||||
[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE
|
||||
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
|
||||
[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-context-base
|
||||
[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-context-base
|
||||
[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-context-base
|
||||
[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-context-base&type=dev
|
||||
[ah-context-manager]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-context-async-hooks
|
||||
[npm-url]: https://www.npmjs.com/package/@opentelemetry/context-base
|
||||
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fcontext-base.svg
|
||||
notices: []
|
||||
+227
@@ -0,0 +1,227 @@
|
||||
---
|
||||
name: "@opentelemetry/context-base"
|
||||
version: 0.6.1
|
||||
type: npm
|
||||
summary: OpenTelemetry Base Context Manager
|
||||
homepage: https://github.com/open-telemetry/opentelemetry-js#readme
|
||||
license: apache-2.0
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
text: |2
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
- sources: README.md
|
||||
text: |-
|
||||
Apache 2.0 - See [LICENSE][license-url] for more information.
|
||||
|
||||
[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg
|
||||
[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
||||
[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE
|
||||
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
|
||||
[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-context-base
|
||||
[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-context-base
|
||||
[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-context-base
|
||||
[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-context-base&type=dev
|
||||
[ah-context-manager]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-context-async-hooks
|
||||
[npm-url]: https://www.npmjs.com/package/@opentelemetry/context-base
|
||||
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fcontext-base.svg
|
||||
notices: []
|
||||
Generated
+2
-2
@@ -1,9 +1,9 @@
|
||||
---
|
||||
name: "@types/node-fetch"
|
||||
version: 2.5.12
|
||||
version: 2.5.7
|
||||
type: npm
|
||||
summary: TypeScript definitions for node-fetch
|
||||
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node-fetch
|
||||
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped#readme
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
|
||||
Generated
+2
-2
@@ -1,9 +1,9 @@
|
||||
---
|
||||
name: "@types/node"
|
||||
version: 12.20.42
|
||||
version: 12.12.40
|
||||
type: npm
|
||||
summary: TypeScript definitions for Node.js
|
||||
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node
|
||||
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped#readme
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
|
||||
Generated
+18
-24
@@ -1,32 +1,26 @@
|
||||
---
|
||||
name: "@types/tunnel"
|
||||
version: 0.0.3
|
||||
version: 0.0.1
|
||||
type: npm
|
||||
summary: TypeScript definitions for tunnel
|
||||
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/tunnel
|
||||
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped#readme
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE
|
||||
text: |2
|
||||
MIT License
|
||||
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE
|
||||
text: " MIT License\r\n\r\n Copyright (c) Microsoft Corporation. All rights
|
||||
reserved.\r\n\r\n Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy\r\n of this software and associated documentation files (the
|
||||
\"Software\"), to deal\r\n in the Software without restriction, including without
|
||||
limitation the rights\r\n to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell\r\n copies of the Software, and to permit persons to
|
||||
whom the Software is\r\n furnished to do so, subject to the following conditions:\r\n\r\n
|
||||
\ The above copyright notice and this permission notice shall be included in
|
||||
all\r\n copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE
|
||||
IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS
|
||||
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT
|
||||
OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n
|
||||
\ SOFTWARE\r\n"
|
||||
notices: []
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: balanced-match
|
||||
version: 1.0.2
|
||||
version: 1.0.0
|
||||
type: npm
|
||||
summary: Match balanced character pairs, like "{" and "}"
|
||||
homepage: https://github.com/juliangruber/balanced-match
|
||||
|
||||
Generated
+1
-2
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: events
|
||||
version: 3.3.0
|
||||
version: 3.2.0
|
||||
type: npm
|
||||
summary: Node's event emitter for all engines.
|
||||
homepage: https://github.com/Gozala/events#readme
|
||||
@@ -33,6 +33,5 @@ licenses:
|
||||
- sources: Readme.md
|
||||
text: |-
|
||||
[MIT](./LICENSE)
|
||||
|
||||
[node.js docs]: https://nodejs.org/dist/v11.13.0/docs/api/events.html
|
||||
notices: []
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: form-data
|
||||
version: 3.0.1
|
||||
version: 3.0.0
|
||||
type: npm
|
||||
summary: A library to create readable "multipart/form-data" streams. Can be used to
|
||||
submit forms and file uploads to other web applications.
|
||||
@@ -28,6 +28,6 @@ licenses:
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
- sources: Readme.md
|
||||
- sources: README.md
|
||||
text: Form-Data is released under the [MIT](License) license.
|
||||
notices: []
|
||||
Generated
-33
@@ -1,33 +0,0 @@
|
||||
---
|
||||
name: form-data
|
||||
version: 4.0.0
|
||||
type: npm
|
||||
summary: A library to create readable "multipart/form-data" streams. Can be used to
|
||||
submit forms and file uploads to other web applications.
|
||||
homepage: https://github.com/form-data/form-data#readme
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: License
|
||||
text: |
|
||||
Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
- sources: Readme.md
|
||||
text: Form-Data is released under the [MIT](License) license.
|
||||
notices: []
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: mime-db
|
||||
version: 1.51.0
|
||||
version: 1.44.0
|
||||
type: npm
|
||||
summary: Media Type Database
|
||||
homepage: https://github.com/jshttp/mime-db#readme
|
||||
|
||||
Generated
+3
-3
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: mime-types
|
||||
version: 2.1.34
|
||||
version: 2.1.27
|
||||
type: npm
|
||||
summary: The ultimate javascript content-type utility.
|
||||
homepage: https://github.com/jshttp/mime-types#readme
|
||||
@@ -35,8 +35,6 @@ licenses:
|
||||
text: |-
|
||||
[MIT](LICENSE)
|
||||
|
||||
[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci
|
||||
[ci-url]: https://github.com/jshttp/mime-types/actions?query=workflow%3Aci
|
||||
[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master
|
||||
[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master
|
||||
[node-version-image]: https://badgen.net/npm/node/mime-types
|
||||
@@ -44,4 +42,6 @@ licenses:
|
||||
[npm-downloads-image]: https://badgen.net/npm/dm/mime-types
|
||||
[npm-url]: https://npmjs.org/package/mime-types
|
||||
[npm-version-image]: https://badgen.net/npm/v/mime-types
|
||||
[travis-image]: https://badgen.net/travis/jshttp/mime-types/master
|
||||
[travis-url]: https://travis-ci.org/jshttp/mime-types
|
||||
notices: []
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: node-fetch
|
||||
version: 2.6.7
|
||||
version: 2.6.1
|
||||
type: npm
|
||||
summary: A light-weight module that brings window.fetch to node.js
|
||||
homepage: https://github.com/bitinn/node-fetch
|
||||
|
||||
Generated
+31
@@ -0,0 +1,31 @@
|
||||
---
|
||||
name: tslib
|
||||
version: 1.13.0
|
||||
type: npm
|
||||
summary: Runtime library for TypeScript helper functions
|
||||
homepage: https://www.typescriptlang.org/
|
||||
license: 0bsd
|
||||
licenses:
|
||||
- sources: LICENSE.txt
|
||||
text: "Copyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify,
|
||||
and/or distribute this software for any\r\npurpose with or without fee is hereby
|
||||
granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL
|
||||
WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
||||
RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
|
||||
USE OR\r\nPERFORMANCE OF THIS SOFTWARE."
|
||||
notices:
|
||||
- sources: CopyrightNotice.txt
|
||||
text: "/*! *****************************************************************************\r\nCopyright
|
||||
(c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute
|
||||
this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE
|
||||
SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD
|
||||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR
|
||||
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE,
|
||||
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS
|
||||
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS
|
||||
SOFTWARE.\r\n*****************************************************************************
|
||||
*/"
|
||||
Generated
+9
-13
@@ -7,19 +7,15 @@ homepage: https://www.typescriptlang.org/
|
||||
license: 0bsd
|
||||
licenses:
|
||||
- sources: LICENSE.txt
|
||||
text: |-
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
text: "Copyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify,
|
||||
and/or distribute this software for any\r\npurpose with or without fee is hereby
|
||||
granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL
|
||||
WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
||||
RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
|
||||
USE OR\r\nPERFORMANCE OF THIS SOFTWARE."
|
||||
notices:
|
||||
- sources: CopyrightNotice.txt
|
||||
text: "/*! *****************************************************************************\r\nCopyright
|
||||
|
||||
@@ -1,25 +1,21 @@
|
||||
---
|
||||
name: tslib
|
||||
version: 2.3.1
|
||||
version: 2.0.3
|
||||
type: npm
|
||||
summary: Runtime library for TypeScript helper functions
|
||||
homepage: https://www.typescriptlang.org/
|
||||
license: 0bsd
|
||||
licenses:
|
||||
- sources: LICENSE.txt
|
||||
text: |-
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
text: "Copyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify,
|
||||
and/or distribute this software for any\r\npurpose with or without fee is hereby
|
||||
granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL
|
||||
WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
||||
RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
|
||||
USE OR\r\nPERFORMANCE OF THIS SOFTWARE."
|
||||
notices:
|
||||
- sources: CopyrightNotice.txt
|
||||
text: "/*! *****************************************************************************\r\nCopyright
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: uuid
|
||||
version: 8.3.2
|
||||
version: 8.3.1
|
||||
type: npm
|
||||
summary: RFC4122 (v1, v4, and v5) UUIDs
|
||||
homepage: https://github.com/uuidjs/uuid#readme
|
||||
Generated
-23
@@ -1,23 +0,0 @@
|
||||
---
|
||||
name: webidl-conversions
|
||||
version: 3.0.1
|
||||
type: npm
|
||||
summary: Implements the WebIDL algorithms for converting to and from JavaScript values
|
||||
homepage: https://github.com/jsdom/webidl-conversions#readme
|
||||
license: bsd-2-clause
|
||||
licenses:
|
||||
- sources: LICENSE.md
|
||||
text: |
|
||||
# The BSD 2-Clause License
|
||||
|
||||
Copyright (c) 2014, Domenic Denicola
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
notices: []
|
||||
Generated
-32
@@ -1,32 +0,0 @@
|
||||
---
|
||||
name: whatwg-url
|
||||
version: 5.0.0
|
||||
type: npm
|
||||
summary: An implementation of the WHATWG URL Standard's URL API and parsing machinery
|
||||
homepage: https://github.com/jsdom/whatwg-url#readme
|
||||
license: mit
|
||||
licenses:
|
||||
- sources: LICENSE.txt
|
||||
text: |
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015–2016 Sebastian Mayr
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
notices: []
|
||||
@@ -19,6 +19,7 @@ See ["Caching dependencies to speed up workflows"](https://help.github.com/githu
|
||||
path: |
|
||||
~/cache
|
||||
!~/cache/exclude
|
||||
**/node_modules
|
||||
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
|
||||
```
|
||||
|
||||
@@ -34,8 +35,6 @@ Refer [here](https://github.com/actions/cache/blob/v1/README.md) for previous ve
|
||||
### Pre-requisites
|
||||
Create a workflow `.yml` file in your repositories `.github/workflows` directory. An [example workflow](#example-workflow) is available below. For more information, reference the GitHub Help Documentation for [Creating a workflow file](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file).
|
||||
|
||||
If you are using this inside a container, a POSIX-compliant `tar` needs to be included and accessible in the execution path.
|
||||
|
||||
### Inputs
|
||||
|
||||
* `path` - A list of files, directories, and wildcard patterns to cache and restore. See [`@actions/glob`](https://github.com/actions/toolkit/tree/main/packages/glob) for supported patterns.
|
||||
@@ -101,7 +100,6 @@ See [Examples](examples.md) for a list of `actions/cache` implementations for us
|
||||
- [OCaml/Reason - esy](./examples.md#ocamlreason---esy)
|
||||
- [PHP - Composer](./examples.md#php---composer)
|
||||
- [Python - pip](./examples.md#python---pip)
|
||||
- [Python - pipenv](./examples.md#python---pipenv)
|
||||
- [R - renv](./examples.md#r---renv)
|
||||
- [Ruby - Bundler](./examples.md#ruby---bundler)
|
||||
- [Rust - Cargo](./examples.md#rust---cargo)
|
||||
@@ -145,7 +143,7 @@ See [Using contexts to create cache keys](https://help.github.com/en/actions/con
|
||||
|
||||
## Cache Limits
|
||||
|
||||
A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted.
|
||||
A repository can have up to 5GB of caches. Once the 5GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted.
|
||||
|
||||
## Skipping steps based on cache-hit
|
||||
|
||||
@@ -169,12 +167,6 @@ steps:
|
||||
|
||||
> Note: The `id` defined in `actions/cache` must match the `id` in the `if` statement (i.e. `steps.[ID].outputs.cache-hit`)
|
||||
|
||||
## Known limitation
|
||||
|
||||
- `action/cache` is currently not supported on GitHub Enterprise Server. <https://github.com/github/roadmap/issues/273> is tracking this.
|
||||
|
||||
Since GitHub Enterprise Server uses self-hosted runners, dependencies are typically cached on the runner by whatever dependency management tool is being used (npm, maven, etc.). This eliminates the need for explicit caching in some scenarios.
|
||||
|
||||
## Contributing
|
||||
We would love for you to contribute to `actions/cache`, pull requests are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) for more information.
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ test("isGhes returns true if server url is not github.com", () => {
|
||||
}
|
||||
});
|
||||
|
||||
test("isGhes returns false when server url is github.com", () => {
|
||||
test("isGhes returns true when server url is github.com", () => {
|
||||
try {
|
||||
process.env["GITHUB_SERVER_URL"] = "http://github.com";
|
||||
expect(actionUtils.isGhes()).toBe(false);
|
||||
@@ -213,6 +213,39 @@ test("getInputAsArray handles empty lines correctly", () => {
|
||||
expect(actionUtils.getInputAsArray("foo")).toEqual(["bar", "baz"]);
|
||||
});
|
||||
|
||||
test("getInputAsArray sorts files correctly", () => {
|
||||
testUtils.setInput(
|
||||
"foo",
|
||||
"bar\n!baz\nwaldo\nqux\nquux\ncorge\ngrault\ngarply"
|
||||
);
|
||||
expect(actionUtils.getInputAsArray("foo")).toEqual([
|
||||
"!baz",
|
||||
"bar",
|
||||
"corge",
|
||||
"garply",
|
||||
"grault",
|
||||
"quux",
|
||||
"qux",
|
||||
"waldo"
|
||||
]);
|
||||
});
|
||||
|
||||
test("getInputAsArray removes spaces after ! at the beginning", () => {
|
||||
testUtils.setInput(
|
||||
"foo",
|
||||
"! bar\n! baz\n! qux\n!quux\ncorge\ngrault! garply\n!\r\t waldo"
|
||||
);
|
||||
expect(actionUtils.getInputAsArray("foo")).toEqual([
|
||||
"!bar",
|
||||
"!baz",
|
||||
"!quux",
|
||||
"!qux",
|
||||
"!waldo",
|
||||
"corge",
|
||||
"grault! garply"
|
||||
]);
|
||||
});
|
||||
|
||||
test("getInputAsInt returns undefined if input not set", () => {
|
||||
expect(actionUtils.getInputAsInt("undefined")).toBeUndefined();
|
||||
});
|
||||
|
||||
@@ -68,7 +68,7 @@ test("restore on GHES should no-op", async () => {
|
||||
expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1);
|
||||
expect(setCacheHitOutputMock).toHaveBeenCalledWith(false);
|
||||
expect(logWarningMock).toHaveBeenCalledWith(
|
||||
"Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details"
|
||||
"Cache action is not supported on GHES"
|
||||
);
|
||||
});
|
||||
|
||||
@@ -97,7 +97,7 @@ test("restore with no key", async () => {
|
||||
test("restore with too many keys should fail", async () => {
|
||||
const path = "node_modules";
|
||||
const key = "node-test";
|
||||
const restoreKeys = [...Array(20).keys()].map(x => x.toString());
|
||||
const restoreKeys = [...Array(20).keys()].map(x => x.toString()).sort();
|
||||
testUtils.setInputs({
|
||||
path: path,
|
||||
key,
|
||||
|
||||
@@ -111,7 +111,7 @@ test("save on GHES should no-op", async () => {
|
||||
|
||||
expect(saveCacheMock).toHaveBeenCalledTimes(0);
|
||||
expect(logWarningMock).toHaveBeenCalledWith(
|
||||
"Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details"
|
||||
"Cache action is not supported on GHES"
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
Vendored
+1235
-1533
@@ -3419,15 +3419,14 @@ var DiagAPI = /** @class */ (function () {
|
||||
function DiagAPI() {
|
||||
function _logProxy(funcName) {
|
||||
return function () {
|
||||
var args = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
args[_i] = arguments[_i];
|
||||
}
|
||||
var logger = global_utils_1.getGlobal('diag');
|
||||
// shortcut if logger not set
|
||||
if (!logger)
|
||||
return;
|
||||
return logger[funcName].apply(logger, args);
|
||||
return logger[funcName].apply(logger,
|
||||
// work around Function.prototype.apply types
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
arguments);
|
||||
};
|
||||
}
|
||||
// Using self local variable for minification purposes as 'this' cannot be minified
|
||||
@@ -5112,22 +5111,17 @@ var DiagConsoleLogger = /** @class */ (function () {
|
||||
function DiagConsoleLogger() {
|
||||
function _consoleFunc(funcName) {
|
||||
return function () {
|
||||
var args = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
args[_i] = arguments[_i];
|
||||
}
|
||||
var orgArguments = arguments;
|
||||
if (console) {
|
||||
// Some environments only expose the console when the F12 developer console is open
|
||||
// eslint-disable-next-line no-console
|
||||
var theFunc = console[funcName];
|
||||
if (typeof theFunc !== 'function') {
|
||||
// Not all environments support all functions
|
||||
// eslint-disable-next-line no-console
|
||||
theFunc = console.log;
|
||||
}
|
||||
// One last final check
|
||||
if (typeof theFunc === 'function') {
|
||||
return theFunc.apply(console, args);
|
||||
return theFunc.apply(console, orgArguments);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -8953,7 +8947,7 @@ function expand(str, isTop) {
|
||||
|
||||
XMLDocumentCB = __webpack_require__(768);
|
||||
|
||||
XMLStringWriter = __webpack_require__(750);
|
||||
XMLStringWriter = __webpack_require__(347);
|
||||
|
||||
XMLStreamWriter = __webpack_require__(458);
|
||||
|
||||
@@ -9401,7 +9395,47 @@ var SamplingDecision;
|
||||
/* 344 */,
|
||||
/* 345 */,
|
||||
/* 346 */,
|
||||
/* 347 */,
|
||||
/* 347 */
|
||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||
|
||||
// Generated by CoffeeScript 1.12.7
|
||||
(function() {
|
||||
var XMLStringWriter, XMLWriterBase,
|
||||
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||
hasProp = {}.hasOwnProperty;
|
||||
|
||||
XMLWriterBase = __webpack_require__(423);
|
||||
|
||||
module.exports = XMLStringWriter = (function(superClass) {
|
||||
extend(XMLStringWriter, superClass);
|
||||
|
||||
function XMLStringWriter(options) {
|
||||
XMLStringWriter.__super__.constructor.call(this, options);
|
||||
}
|
||||
|
||||
XMLStringWriter.prototype.document = function(doc, options) {
|
||||
var child, i, len, r, ref;
|
||||
options = this.filterOptions(options);
|
||||
r = '';
|
||||
ref = doc.children;
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
child = ref[i];
|
||||
r += this.writeChildNode(child, options, 0);
|
||||
}
|
||||
if (options.pretty && r.slice(-options.newline.length) === options.newline) {
|
||||
r = r.slice(0, -options.newline.length);
|
||||
}
|
||||
return r;
|
||||
};
|
||||
|
||||
return XMLStringWriter;
|
||||
|
||||
})(XMLWriterBase);
|
||||
|
||||
}).call(this);
|
||||
|
||||
|
||||
/***/ }),
|
||||
/* 348 */
|
||||
/***/ (function(__unusedmodule, exports) {
|
||||
|
||||
@@ -36347,8 +36381,9 @@ function getInputAsArray(name, options) {
|
||||
return core
|
||||
.getInput(name, options)
|
||||
.split("\n")
|
||||
.map(s => s.trim())
|
||||
.filter(x => x !== "");
|
||||
.map(s => s.replace(/^!\s+/, "!").trim())
|
||||
.filter(x => x !== "")
|
||||
.sort();
|
||||
}
|
||||
exports.getInputAsArray = getInputAsArray;
|
||||
function getInputAsInt(name, options) {
|
||||
@@ -37869,17 +37904,9 @@ AbortError.prototype = Object.create(Error.prototype);
|
||||
AbortError.prototype.constructor = AbortError;
|
||||
AbortError.prototype.name = 'AbortError';
|
||||
|
||||
const URL$1 = Url.URL || whatwgUrl.URL;
|
||||
|
||||
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
|
||||
const PassThrough$1 = Stream.PassThrough;
|
||||
|
||||
const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
|
||||
const orig = new URL$1(original).hostname;
|
||||
const dest = new URL$1(destination).hostname;
|
||||
|
||||
return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
|
||||
};
|
||||
const resolve_url = Url.resolve;
|
||||
|
||||
/**
|
||||
* Fetch function
|
||||
@@ -37967,19 +37994,7 @@ function fetch(url, opts) {
|
||||
const location = headers.get('Location');
|
||||
|
||||
// HTTP fetch step 5.3
|
||||
let locationURL = null;
|
||||
try {
|
||||
locationURL = location === null ? null : new URL$1(location, request.url).toString();
|
||||
} catch (err) {
|
||||
// error here can only be invalid URL in Location: header
|
||||
// do not throw when options.redirect == manual
|
||||
// let the user extract the errorneous redirect URL
|
||||
if (request.redirect !== 'manual') {
|
||||
reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
|
||||
finalize();
|
||||
return;
|
||||
}
|
||||
}
|
||||
const locationURL = location === null ? null : resolve_url(request.url, location);
|
||||
|
||||
// HTTP fetch step 5.5
|
||||
switch (request.redirect) {
|
||||
@@ -38027,12 +38042,6 @@ function fetch(url, opts) {
|
||||
size: request.size
|
||||
};
|
||||
|
||||
if (!isDomainOrSubdomain(request.url, locationURL)) {
|
||||
for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
|
||||
requestOpts.headers.delete(name);
|
||||
}
|
||||
}
|
||||
|
||||
// HTTP-redirect fetch step 9
|
||||
if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
|
||||
reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
|
||||
@@ -39174,7 +39183,7 @@ function getPagedAsyncIterator(pagedResult) {
|
||||
},
|
||||
byPage: (_a = pagedResult === null || pagedResult === void 0 ? void 0 : pagedResult.byPage) !== null && _a !== void 0 ? _a : ((settings) => {
|
||||
return getPageAsyncIterator(pagedResult, settings === null || settings === void 0 ? void 0 : settings.maxPageSize);
|
||||
}),
|
||||
})
|
||||
};
|
||||
}
|
||||
function getItemAsyncIterator(pagedResult, maxPageSize) {
|
||||
@@ -40394,7 +40403,7 @@ CombinedStream.prototype._emitError = function(err) {
|
||||
|
||||
XMLStringifier = __webpack_require__(602);
|
||||
|
||||
XMLStringWriter = __webpack_require__(750);
|
||||
XMLStringWriter = __webpack_require__(347);
|
||||
|
||||
module.exports = XMLDocument = (function(superClass) {
|
||||
extend(XMLDocument, superClass);
|
||||
@@ -40686,7 +40695,7 @@ exports.baggageEntryMetadataSymbol = Symbol('BaggageEntryMetadata');
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
const psl = __webpack_require__(632);
|
||||
const psl = __webpack_require__(750);
|
||||
|
||||
function getPublicSuffix(domain) {
|
||||
return psl.get(domain);
|
||||
@@ -41939,282 +41948,7 @@ exports.wrapSpanContext = wrapSpanContext;
|
||||
module.exports = require("net");
|
||||
|
||||
/***/ }),
|
||||
/* 632 */
|
||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
|
||||
|
||||
|
||||
|
||||
var Punycode = __webpack_require__(815);
|
||||
|
||||
|
||||
var internals = {};
|
||||
|
||||
|
||||
//
|
||||
// Read rules from file.
|
||||
//
|
||||
internals.rules = __webpack_require__(50).map(function (rule) {
|
||||
|
||||
return {
|
||||
rule: rule,
|
||||
suffix: rule.replace(/^(\*\.|\!)/, ''),
|
||||
punySuffix: -1,
|
||||
wildcard: rule.charAt(0) === '*',
|
||||
exception: rule.charAt(0) === '!'
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
//
|
||||
// Check is given string ends with `suffix`.
|
||||
//
|
||||
internals.endsWith = function (str, suffix) {
|
||||
|
||||
return str.indexOf(suffix, str.length - suffix.length) !== -1;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Find rule for a given domain.
|
||||
//
|
||||
internals.findRule = function (domain) {
|
||||
|
||||
var punyDomain = Punycode.toASCII(domain);
|
||||
return internals.rules.reduce(function (memo, rule) {
|
||||
|
||||
if (rule.punySuffix === -1){
|
||||
rule.punySuffix = Punycode.toASCII(rule.suffix);
|
||||
}
|
||||
if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
|
||||
return memo;
|
||||
}
|
||||
// This has been commented out as it never seems to run. This is because
|
||||
// sub tlds always appear after their parents and we never find a shorter
|
||||
// match.
|
||||
//if (memo) {
|
||||
// var memoSuffix = Punycode.toASCII(memo.suffix);
|
||||
// if (memoSuffix.length >= punySuffix.length) {
|
||||
// return memo;
|
||||
// }
|
||||
//}
|
||||
return rule;
|
||||
}, null);
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Error codes and messages.
|
||||
//
|
||||
exports.errorCodes = {
|
||||
DOMAIN_TOO_SHORT: 'Domain name too short.',
|
||||
DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
|
||||
LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
|
||||
LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
|
||||
LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
|
||||
LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
|
||||
LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Validate domain name and throw if not valid.
|
||||
//
|
||||
// From wikipedia:
|
||||
//
|
||||
// Hostnames are composed of series of labels concatenated with dots, as are all
|
||||
// domain names. Each label must be between 1 and 63 characters long, and the
|
||||
// entire hostname (including the delimiting dots) has a maximum of 255 chars.
|
||||
//
|
||||
// Allowed chars:
|
||||
//
|
||||
// * `a-z`
|
||||
// * `0-9`
|
||||
// * `-` but not as a starting or ending character
|
||||
// * `.` as a separator for the textual portions of a domain name
|
||||
//
|
||||
// * http://en.wikipedia.org/wiki/Domain_name
|
||||
// * http://en.wikipedia.org/wiki/Hostname
|
||||
//
|
||||
internals.validate = function (input) {
|
||||
|
||||
// Before we can validate we need to take care of IDNs with unicode chars.
|
||||
var ascii = Punycode.toASCII(input);
|
||||
|
||||
if (ascii.length < 1) {
|
||||
return 'DOMAIN_TOO_SHORT';
|
||||
}
|
||||
if (ascii.length > 255) {
|
||||
return 'DOMAIN_TOO_LONG';
|
||||
}
|
||||
|
||||
// Check each part's length and allowed chars.
|
||||
var labels = ascii.split('.');
|
||||
var label;
|
||||
|
||||
for (var i = 0; i < labels.length; ++i) {
|
||||
label = labels[i];
|
||||
if (!label.length) {
|
||||
return 'LABEL_TOO_SHORT';
|
||||
}
|
||||
if (label.length > 63) {
|
||||
return 'LABEL_TOO_LONG';
|
||||
}
|
||||
if (label.charAt(0) === '-') {
|
||||
return 'LABEL_STARTS_WITH_DASH';
|
||||
}
|
||||
if (label.charAt(label.length - 1) === '-') {
|
||||
return 'LABEL_ENDS_WITH_DASH';
|
||||
}
|
||||
if (!/^[a-z0-9\-]+$/.test(label)) {
|
||||
return 'LABEL_INVALID_CHARS';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Public API
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// Parse domain.
|
||||
//
|
||||
exports.parse = function (input) {
|
||||
|
||||
if (typeof input !== 'string') {
|
||||
throw new TypeError('Domain name must be a string.');
|
||||
}
|
||||
|
||||
// Force domain to lowercase.
|
||||
var domain = input.slice(0).toLowerCase();
|
||||
|
||||
// Handle FQDN.
|
||||
// TODO: Simply remove trailing dot?
|
||||
if (domain.charAt(domain.length - 1) === '.') {
|
||||
domain = domain.slice(0, domain.length - 1);
|
||||
}
|
||||
|
||||
// Validate and sanitise input.
|
||||
var error = internals.validate(domain);
|
||||
if (error) {
|
||||
return {
|
||||
input: input,
|
||||
error: {
|
||||
message: exports.errorCodes[error],
|
||||
code: error
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var parsed = {
|
||||
input: input,
|
||||
tld: null,
|
||||
sld: null,
|
||||
domain: null,
|
||||
subdomain: null,
|
||||
listed: false
|
||||
};
|
||||
|
||||
var domainParts = domain.split('.');
|
||||
|
||||
// Non-Internet TLD
|
||||
if (domainParts[domainParts.length - 1] === 'local') {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
var handlePunycode = function () {
|
||||
|
||||
if (!/xn--/.test(domain)) {
|
||||
return parsed;
|
||||
}
|
||||
if (parsed.domain) {
|
||||
parsed.domain = Punycode.toASCII(parsed.domain);
|
||||
}
|
||||
if (parsed.subdomain) {
|
||||
parsed.subdomain = Punycode.toASCII(parsed.subdomain);
|
||||
}
|
||||
return parsed;
|
||||
};
|
||||
|
||||
var rule = internals.findRule(domain);
|
||||
|
||||
// Unlisted tld.
|
||||
if (!rule) {
|
||||
if (domainParts.length < 2) {
|
||||
return parsed;
|
||||
}
|
||||
parsed.tld = domainParts.pop();
|
||||
parsed.sld = domainParts.pop();
|
||||
parsed.domain = [parsed.sld, parsed.tld].join('.');
|
||||
if (domainParts.length) {
|
||||
parsed.subdomain = domainParts.pop();
|
||||
}
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
// At this point we know the public suffix is listed.
|
||||
parsed.listed = true;
|
||||
|
||||
var tldParts = rule.suffix.split('.');
|
||||
var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
|
||||
|
||||
if (rule.exception) {
|
||||
privateParts.push(tldParts.shift());
|
||||
}
|
||||
|
||||
parsed.tld = tldParts.join('.');
|
||||
|
||||
if (!privateParts.length) {
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
if (rule.wildcard) {
|
||||
tldParts.unshift(privateParts.pop());
|
||||
parsed.tld = tldParts.join('.');
|
||||
}
|
||||
|
||||
if (!privateParts.length) {
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
parsed.sld = privateParts.pop();
|
||||
parsed.domain = [parsed.sld, parsed.tld].join('.');
|
||||
|
||||
if (privateParts.length) {
|
||||
parsed.subdomain = privateParts.join('.');
|
||||
}
|
||||
|
||||
return handlePunycode();
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Get domain.
|
||||
//
|
||||
exports.get = function (domain) {
|
||||
|
||||
if (!domain) {
|
||||
return null;
|
||||
}
|
||||
return exports.parse(domain).domain || null;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Check whether domain belongs to a known public suffix.
|
||||
//
|
||||
exports.isValid = function (domain) {
|
||||
|
||||
var parsed = exports.parse(domain);
|
||||
return Boolean(parsed.domain && parsed.listed);
|
||||
};
|
||||
|
||||
|
||||
/***/ }),
|
||||
/* 632 */,
|
||||
/* 633 */,
|
||||
/* 634 */,
|
||||
/* 635 */,
|
||||
@@ -46017,43 +45751,278 @@ module.exports = require("fs");
|
||||
/* 748 */,
|
||||
/* 749 */,
|
||||
/* 750 */
|
||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
||||
|
||||
// Generated by CoffeeScript 1.12.7
|
||||
(function() {
|
||||
var XMLStringWriter, XMLWriterBase,
|
||||
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||
hasProp = {}.hasOwnProperty;
|
||||
"use strict";
|
||||
/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
|
||||
|
||||
XMLWriterBase = __webpack_require__(423);
|
||||
|
||||
module.exports = XMLStringWriter = (function(superClass) {
|
||||
extend(XMLStringWriter, superClass);
|
||||
|
||||
function XMLStringWriter(options) {
|
||||
XMLStringWriter.__super__.constructor.call(this, options);
|
||||
var Punycode = __webpack_require__(815);
|
||||
|
||||
|
||||
var internals = {};
|
||||
|
||||
|
||||
//
|
||||
// Read rules from file.
|
||||
//
|
||||
internals.rules = __webpack_require__(50).map(function (rule) {
|
||||
|
||||
return {
|
||||
rule: rule,
|
||||
suffix: rule.replace(/^(\*\.|\!)/, ''),
|
||||
punySuffix: -1,
|
||||
wildcard: rule.charAt(0) === '*',
|
||||
exception: rule.charAt(0) === '!'
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
//
|
||||
// Check is given string ends with `suffix`.
|
||||
//
|
||||
internals.endsWith = function (str, suffix) {
|
||||
|
||||
return str.indexOf(suffix, str.length - suffix.length) !== -1;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Find rule for a given domain.
|
||||
//
|
||||
internals.findRule = function (domain) {
|
||||
|
||||
var punyDomain = Punycode.toASCII(domain);
|
||||
return internals.rules.reduce(function (memo, rule) {
|
||||
|
||||
if (rule.punySuffix === -1){
|
||||
rule.punySuffix = Punycode.toASCII(rule.suffix);
|
||||
}
|
||||
if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
|
||||
return memo;
|
||||
}
|
||||
// This has been commented out as it never seems to run. This is because
|
||||
// sub tlds always appear after their parents and we never find a shorter
|
||||
// match.
|
||||
//if (memo) {
|
||||
// var memoSuffix = Punycode.toASCII(memo.suffix);
|
||||
// if (memoSuffix.length >= punySuffix.length) {
|
||||
// return memo;
|
||||
// }
|
||||
//}
|
||||
return rule;
|
||||
}, null);
|
||||
};
|
||||
|
||||
XMLStringWriter.prototype.document = function(doc, options) {
|
||||
var child, i, len, r, ref;
|
||||
options = this.filterOptions(options);
|
||||
r = '';
|
||||
ref = doc.children;
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
child = ref[i];
|
||||
r += this.writeChildNode(child, options, 0);
|
||||
|
||||
//
|
||||
// Error codes and messages.
|
||||
//
|
||||
exports.errorCodes = {
|
||||
DOMAIN_TOO_SHORT: 'Domain name too short.',
|
||||
DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
|
||||
LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
|
||||
LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
|
||||
LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
|
||||
LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
|
||||
LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Validate domain name and throw if not valid.
|
||||
//
|
||||
// From wikipedia:
|
||||
//
|
||||
// Hostnames are composed of series of labels concatenated with dots, as are all
|
||||
// domain names. Each label must be between 1 and 63 characters long, and the
|
||||
// entire hostname (including the delimiting dots) has a maximum of 255 chars.
|
||||
//
|
||||
// Allowed chars:
|
||||
//
|
||||
// * `a-z`
|
||||
// * `0-9`
|
||||
// * `-` but not as a starting or ending character
|
||||
// * `.` as a separator for the textual portions of a domain name
|
||||
//
|
||||
// * http://en.wikipedia.org/wiki/Domain_name
|
||||
// * http://en.wikipedia.org/wiki/Hostname
|
||||
//
|
||||
internals.validate = function (input) {
|
||||
|
||||
// Before we can validate we need to take care of IDNs with unicode chars.
|
||||
var ascii = Punycode.toASCII(input);
|
||||
|
||||
if (ascii.length < 1) {
|
||||
return 'DOMAIN_TOO_SHORT';
|
||||
}
|
||||
if (ascii.length > 255) {
|
||||
return 'DOMAIN_TOO_LONG';
|
||||
}
|
||||
|
||||
// Check each part's length and allowed chars.
|
||||
var labels = ascii.split('.');
|
||||
var label;
|
||||
|
||||
for (var i = 0; i < labels.length; ++i) {
|
||||
label = labels[i];
|
||||
if (!label.length) {
|
||||
return 'LABEL_TOO_SHORT';
|
||||
}
|
||||
if (label.length > 63) {
|
||||
return 'LABEL_TOO_LONG';
|
||||
}
|
||||
if (label.charAt(0) === '-') {
|
||||
return 'LABEL_STARTS_WITH_DASH';
|
||||
}
|
||||
if (label.charAt(label.length - 1) === '-') {
|
||||
return 'LABEL_ENDS_WITH_DASH';
|
||||
}
|
||||
if (!/^[a-z0-9\-]+$/.test(label)) {
|
||||
return 'LABEL_INVALID_CHARS';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Public API
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// Parse domain.
|
||||
//
|
||||
exports.parse = function (input) {
|
||||
|
||||
if (typeof input !== 'string') {
|
||||
throw new TypeError('Domain name must be a string.');
|
||||
}
|
||||
|
||||
// Force domain to lowercase.
|
||||
var domain = input.slice(0).toLowerCase();
|
||||
|
||||
// Handle FQDN.
|
||||
// TODO: Simply remove trailing dot?
|
||||
if (domain.charAt(domain.length - 1) === '.') {
|
||||
domain = domain.slice(0, domain.length - 1);
|
||||
}
|
||||
|
||||
// Validate and sanitise input.
|
||||
var error = internals.validate(domain);
|
||||
if (error) {
|
||||
return {
|
||||
input: input,
|
||||
error: {
|
||||
message: exports.errorCodes[error],
|
||||
code: error
|
||||
}
|
||||
if (options.pretty && r.slice(-options.newline.length) === options.newline) {
|
||||
r = r.slice(0, -options.newline.length);
|
||||
}
|
||||
return r;
|
||||
};
|
||||
}
|
||||
|
||||
return XMLStringWriter;
|
||||
var parsed = {
|
||||
input: input,
|
||||
tld: null,
|
||||
sld: null,
|
||||
domain: null,
|
||||
subdomain: null,
|
||||
listed: false
|
||||
};
|
||||
|
||||
})(XMLWriterBase);
|
||||
var domainParts = domain.split('.');
|
||||
|
||||
}).call(this);
|
||||
// Non-Internet TLD
|
||||
if (domainParts[domainParts.length - 1] === 'local') {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
var handlePunycode = function () {
|
||||
|
||||
if (!/xn--/.test(domain)) {
|
||||
return parsed;
|
||||
}
|
||||
if (parsed.domain) {
|
||||
parsed.domain = Punycode.toASCII(parsed.domain);
|
||||
}
|
||||
if (parsed.subdomain) {
|
||||
parsed.subdomain = Punycode.toASCII(parsed.subdomain);
|
||||
}
|
||||
return parsed;
|
||||
};
|
||||
|
||||
var rule = internals.findRule(domain);
|
||||
|
||||
// Unlisted tld.
|
||||
if (!rule) {
|
||||
if (domainParts.length < 2) {
|
||||
return parsed;
|
||||
}
|
||||
parsed.tld = domainParts.pop();
|
||||
parsed.sld = domainParts.pop();
|
||||
parsed.domain = [parsed.sld, parsed.tld].join('.');
|
||||
if (domainParts.length) {
|
||||
parsed.subdomain = domainParts.pop();
|
||||
}
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
// At this point we know the public suffix is listed.
|
||||
parsed.listed = true;
|
||||
|
||||
var tldParts = rule.suffix.split('.');
|
||||
var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
|
||||
|
||||
if (rule.exception) {
|
||||
privateParts.push(tldParts.shift());
|
||||
}
|
||||
|
||||
parsed.tld = tldParts.join('.');
|
||||
|
||||
if (!privateParts.length) {
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
if (rule.wildcard) {
|
||||
tldParts.unshift(privateParts.pop());
|
||||
parsed.tld = tldParts.join('.');
|
||||
}
|
||||
|
||||
if (!privateParts.length) {
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
parsed.sld = privateParts.pop();
|
||||
parsed.domain = [parsed.sld, parsed.tld].join('.');
|
||||
|
||||
if (privateParts.length) {
|
||||
parsed.subdomain = privateParts.join('.');
|
||||
}
|
||||
|
||||
return handlePunycode();
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Get domain.
|
||||
//
|
||||
exports.get = function (domain) {
|
||||
|
||||
if (!domain) {
|
||||
return null;
|
||||
}
|
||||
return exports.parse(domain).domain || null;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Check whether domain belongs to a known public suffix.
|
||||
//
|
||||
exports.isValid = function (domain) {
|
||||
|
||||
var parsed = exports.parse(domain);
|
||||
return Boolean(parsed.domain && parsed.listed);
|
||||
};
|
||||
|
||||
|
||||
/***/ }),
|
||||
@@ -46209,7 +46178,7 @@ module.exports = function(dst, src) {
|
||||
|
||||
XMLStringifier = __webpack_require__(602);
|
||||
|
||||
XMLStringWriter = __webpack_require__(750);
|
||||
XMLStringWriter = __webpack_require__(347);
|
||||
|
||||
WriterState = __webpack_require__(541);
|
||||
|
||||
@@ -46752,7 +46721,7 @@ function run() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
if (utils.isGhes()) {
|
||||
utils.logWarning("Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details");
|
||||
utils.logWarning("Cache action is not supported on GHES");
|
||||
utils.setCacheHitOutput(false);
|
||||
return;
|
||||
}
|
||||
@@ -48285,7 +48254,7 @@ module.exports = v4;
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.VERSION = void 0;
|
||||
// this is autogenerated file, see scripts/version-update.js
|
||||
exports.VERSION = '1.0.4';
|
||||
exports.VERSION = '1.0.3';
|
||||
//# sourceMappingURL=version.js.map
|
||||
|
||||
/***/ }),
|
||||
@@ -49603,7 +49572,7 @@ class Poller {
|
||||
if (!this.isDone()) {
|
||||
this.operation = await this.operation.update({
|
||||
abortSignal: options.abortSignal,
|
||||
fireProgress: this.fireProgress.bind(this),
|
||||
fireProgress: this.fireProgress.bind(this)
|
||||
});
|
||||
if (this.isDone() && this.resolve) {
|
||||
// If the poller has finished polling, this means we now have a result.
|
||||
@@ -49802,6 +49771,13 @@ class Poller {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* The `@azure/logger` configuration for this package.
|
||||
* @internal
|
||||
*/
|
||||
const logger = logger$1.createClientLogger("core-lro");
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
@@ -49829,20 +49805,20 @@ function inferLroMode(requestPath, requestMethod, rawResponse) {
|
||||
mode: "AzureAsync",
|
||||
resourceLocation: requestMethod === "PUT"
|
||||
? requestPath
|
||||
: requestMethod === "POST" || requestMethod === "PATCH"
|
||||
: requestMethod === "POST"
|
||||
? getLocation(rawResponse)
|
||||
: undefined,
|
||||
: undefined
|
||||
};
|
||||
}
|
||||
else if (getLocation(rawResponse) !== undefined ||
|
||||
getOperationLocation(rawResponse) !== undefined) {
|
||||
return {
|
||||
mode: "Location",
|
||||
mode: "Location"
|
||||
};
|
||||
}
|
||||
else if (["PUT", "PATCH"].includes(requestMethod)) {
|
||||
return {
|
||||
mode: "Body",
|
||||
mode: "Body"
|
||||
};
|
||||
}
|
||||
return {};
|
||||
@@ -49875,35 +49851,6 @@ function isUnexpectedPollingResponse(rawResponse) {
|
||||
const successStates = ["succeeded"];
|
||||
const failureStates = ["failed", "canceled", "cancelled"];
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getProvisioningState(rawResponse) {
|
||||
var _a, _b;
|
||||
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
|
||||
const state = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
|
||||
return typeof state === "string" ? state.toLowerCase() : "succeeded";
|
||||
}
|
||||
function isBodyPollingDone(rawResponse) {
|
||||
const state = getProvisioningState(rawResponse);
|
||||
if (isUnexpectedPollingResponse(rawResponse) || failureStates.includes(state)) {
|
||||
throw new Error(`The long running operation has failed. The provisioning state: ${state}.`);
|
||||
}
|
||||
return successStates.includes(state);
|
||||
}
|
||||
/**
|
||||
* Creates a polling strategy based on BodyPolling which uses the provisioning state
|
||||
* from the result to determine the current operation state
|
||||
*/
|
||||
function processBodyPollingOperationResult(response) {
|
||||
return Object.assign(Object.assign({}, response), { done: isBodyPollingDone(response.rawResponse) });
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* The `@azure/logger` configuration for this package.
|
||||
* @internal
|
||||
*/
|
||||
const logger = logger$1.createClientLogger("core-lro");
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getResponseStatus(rawResponse) {
|
||||
var _a;
|
||||
@@ -49948,6 +49895,28 @@ function processAzureAsyncOperationResult(lro, resourceLocation, lroResourceLoca
|
||||
};
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getProvisioningState(rawResponse) {
|
||||
var _a, _b;
|
||||
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
|
||||
const state = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
|
||||
return typeof state === "string" ? state.toLowerCase() : "succeeded";
|
||||
}
|
||||
function isBodyPollingDone(rawResponse) {
|
||||
const state = getProvisioningState(rawResponse);
|
||||
if (isUnexpectedPollingResponse(rawResponse) || failureStates.includes(state)) {
|
||||
throw new Error(`The long running operation has failed. The provisioning state: ${state}.`);
|
||||
}
|
||||
return successStates.includes(state);
|
||||
}
|
||||
/**
|
||||
* Creates a polling strategy based on BodyPolling which uses the provisioning state
|
||||
* from the result to determine the current operation state
|
||||
*/
|
||||
function processBodyPollingOperationResult(response) {
|
||||
return Object.assign(Object.assign({}, response), { done: isBodyPollingDone(response.rawResponse) });
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function isLocationPollingDone(rawResponse) {
|
||||
return !isUnexpectedPollingResponse(rawResponse) && rawResponse.statusCode !== 202;
|
||||
@@ -49990,11 +49959,10 @@ function createPoll(lroPrimitives) {
|
||||
const response = await lroPrimitives.sendPollRequest(path);
|
||||
const retryAfter = response.rawResponse.headers["retry-after"];
|
||||
if (retryAfter !== undefined) {
|
||||
// Retry-After header value is either in HTTP date format, or in seconds
|
||||
const retryAfterInSeconds = parseInt(retryAfter);
|
||||
pollerConfig.intervalInMs = isNaN(retryAfterInSeconds)
|
||||
const retryAfterInMs = parseInt(retryAfter);
|
||||
pollerConfig.intervalInMs = isNaN(retryAfterInMs)
|
||||
? calculatePollingIntervalFromDate(new Date(retryAfter), pollerConfig.intervalInMs)
|
||||
: retryAfterInSeconds * 1000;
|
||||
: retryAfterInMs;
|
||||
}
|
||||
return getLroStatusFromResponse(response);
|
||||
};
|
||||
@@ -50117,7 +50085,7 @@ class GenericPollOperation {
|
||||
*/
|
||||
toString() {
|
||||
return JSON.stringify({
|
||||
state: this.state,
|
||||
state: this.state
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -53411,54 +53379,27 @@ exports.isCompatible = _makeCompatibilityCheck(version_1.VERSION);
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
||||
|
||||
var uuid = __webpack_require__(585);
|
||||
var util = __webpack_require__(669);
|
||||
var tslib = __webpack_require__(865);
|
||||
var xml2js = __webpack_require__(992);
|
||||
var abortController = __webpack_require__(106);
|
||||
var logger$1 = __webpack_require__(928);
|
||||
var coreAuth = __webpack_require__(229);
|
||||
var os = __webpack_require__(87);
|
||||
var tough = __webpack_require__(393);
|
||||
var http = __webpack_require__(605);
|
||||
var https = __webpack_require__(211);
|
||||
var tough = __webpack_require__(393);
|
||||
var tunnel = __webpack_require__(413);
|
||||
var stream = __webpack_require__(794);
|
||||
var FormData = __webpack_require__(790);
|
||||
var node_fetch = __webpack_require__(454);
|
||||
var coreTracing = __webpack_require__(263);
|
||||
var node_fetch = _interopDefault(__webpack_require__(454));
|
||||
var abortController = __webpack_require__(106);
|
||||
var FormData = _interopDefault(__webpack_require__(790));
|
||||
var util = __webpack_require__(669);
|
||||
var url = __webpack_require__(835);
|
||||
var stream = __webpack_require__(794);
|
||||
var logger$1 = __webpack_require__(928);
|
||||
var tunnel = __webpack_require__(413);
|
||||
var tslib = __webpack_require__(865);
|
||||
var coreAuth = __webpack_require__(229);
|
||||
var xml2js = __webpack_require__(992);
|
||||
var os = __webpack_require__(87);
|
||||
var coreTracing = __webpack_require__(263);
|
||||
__webpack_require__(71);
|
||||
|
||||
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
||||
|
||||
function _interopNamespace(e) {
|
||||
if (e && e.__esModule) return e;
|
||||
var n = Object.create(null);
|
||||
if (e) {
|
||||
Object.keys(e).forEach(function (k) {
|
||||
if (k !== 'default') {
|
||||
var d = Object.getOwnPropertyDescriptor(e, k);
|
||||
Object.defineProperty(n, k, d.get ? d : {
|
||||
enumerable: true,
|
||||
get: function () { return e[k]; }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
n["default"] = e;
|
||||
return Object.freeze(n);
|
||||
}
|
||||
|
||||
var xml2js__namespace = /*#__PURE__*/_interopNamespace(xml2js);
|
||||
var os__namespace = /*#__PURE__*/_interopNamespace(os);
|
||||
var http__namespace = /*#__PURE__*/_interopNamespace(http);
|
||||
var https__namespace = /*#__PURE__*/_interopNamespace(https);
|
||||
var tough__namespace = /*#__PURE__*/_interopNamespace(tough);
|
||||
var tunnel__namespace = /*#__PURE__*/_interopNamespace(tunnel);
|
||||
var FormData__default = /*#__PURE__*/_interopDefaultLegacy(FormData);
|
||||
var node_fetch__default = /*#__PURE__*/_interopDefaultLegacy(node_fetch);
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
@@ -53506,7 +53447,7 @@ class HttpHeaders {
|
||||
set(headerName, headerValue) {
|
||||
this._headersMap[getHeaderKey(headerName)] = {
|
||||
name: headerName,
|
||||
value: headerValue.toString(),
|
||||
value: headerValue.toString()
|
||||
};
|
||||
}
|
||||
/**
|
||||
@@ -53538,7 +53479,12 @@ class HttpHeaders {
|
||||
* Get the headers that are contained this collection as an object.
|
||||
*/
|
||||
rawHeaders() {
|
||||
return this.toJson({ preserveCase: true });
|
||||
const result = {};
|
||||
for (const headerKey in this._headersMap) {
|
||||
const header = this._headersMap[headerKey];
|
||||
result[header.name.toLowerCase()] = header.value;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Get the headers that are contained in this collection as an array.
|
||||
@@ -53575,27 +53521,14 @@ class HttpHeaders {
|
||||
/**
|
||||
* Get the JSON object representation of this HTTP header collection.
|
||||
*/
|
||||
toJson(options = {}) {
|
||||
const result = {};
|
||||
if (options.preserveCase) {
|
||||
for (const headerKey in this._headersMap) {
|
||||
const header = this._headersMap[headerKey];
|
||||
result[header.name] = header.value;
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (const headerKey in this._headersMap) {
|
||||
const header = this._headersMap[headerKey];
|
||||
result[getHeaderKey(header.name)] = header.value;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
toJson() {
|
||||
return this.rawHeaders();
|
||||
}
|
||||
/**
|
||||
* Get the string representation of this HTTP header collection.
|
||||
*/
|
||||
toString() {
|
||||
return JSON.stringify(this.toJson({ preserveCase: true }));
|
||||
return JSON.stringify(this.toJson());
|
||||
}
|
||||
/**
|
||||
* Create a deep clone/copy of this HttpHeaders collection.
|
||||
@@ -53639,14 +53572,11 @@ function decodeString(value) {
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
* A set of constants used internally when processing requests.
|
||||
*/
|
||||
const Constants = {
|
||||
/**
|
||||
* The core-http version
|
||||
*/
|
||||
coreHttpVersion: "2.2.4",
|
||||
coreHttpVersion: "2.2.2",
|
||||
/**
|
||||
* Specifies HTTP.
|
||||
*/
|
||||
@@ -53682,12 +53612,12 @@ const Constants = {
|
||||
POST: "POST",
|
||||
MERGE: "MERGE",
|
||||
HEAD: "HEAD",
|
||||
PATCH: "PATCH",
|
||||
PATCH: "PATCH"
|
||||
},
|
||||
StatusCodes: {
|
||||
TooManyRequests: 429,
|
||||
ServiceUnavailable: 503,
|
||||
},
|
||||
ServiceUnavailable: 503
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Defines constants for use with HTTP headers.
|
||||
@@ -53707,8 +53637,8 @@ const Constants = {
|
||||
/**
|
||||
* The UserAgent header.
|
||||
*/
|
||||
USER_AGENT: "User-Agent",
|
||||
},
|
||||
USER_AGENT: "User-Agent"
|
||||
}
|
||||
};
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
@@ -53923,38 +53853,18 @@ function isObject(input) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// This file contains utility code to serialize and deserialize network operations according to `OperationSpec` objects generated by AutoRest.TypeScript from OpenAPI specifications.
|
||||
/**
|
||||
* Used to map raw response objects to final shapes.
|
||||
* Helps packing and unpacking Dates and other encoded types that are not intrinsic to JSON.
|
||||
* Also allows pulling values from headers, as well as inserting default values and constants.
|
||||
*/
|
||||
class Serializer {
|
||||
constructor(
|
||||
/**
|
||||
* The provided model mapper.
|
||||
*/
|
||||
modelMappers = {},
|
||||
/**
|
||||
* Whether the contents are XML or not.
|
||||
*/
|
||||
isXML) {
|
||||
constructor(modelMappers = {}, isXML) {
|
||||
this.modelMappers = modelMappers;
|
||||
this.isXML = isXML;
|
||||
}
|
||||
/**
|
||||
* Validates constraints, if any. This function will throw if the provided value does not respect those constraints.
|
||||
* @param mapper - The definition of data models.
|
||||
* @param value - The value.
|
||||
* @param objectName - Name of the object. Used in the error messages.
|
||||
*/
|
||||
validateConstraints(mapper, value, objectName) {
|
||||
const failValidation = (constraintName, constraintValue) => {
|
||||
throw new Error(`"${objectName}" with value "${value}" should satisfy the constraint "${constraintName}": ${constraintValue}.`);
|
||||
};
|
||||
if (mapper.constraints && value != undefined) {
|
||||
const valueAsNumber = value;
|
||||
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems, } = mapper.constraints;
|
||||
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems } = mapper.constraints;
|
||||
if (ExclusiveMaximum != undefined && valueAsNumber >= ExclusiveMaximum) {
|
||||
failValidation("ExclusiveMaximum", ExclusiveMaximum);
|
||||
}
|
||||
@@ -53996,20 +53906,20 @@ class Serializer {
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Serialize the given object based on its metadata defined in the mapper.
|
||||
* Serialize the given object based on its metadata defined in the mapper
|
||||
*
|
||||
* @param mapper - The mapper which defines the metadata of the serializable object.
|
||||
* @param object - A valid Javascript object to be serialized.
|
||||
* @param objectName - Name of the serialized object.
|
||||
* @param options - additional options to deserialization.
|
||||
* @returns A valid serialized Javascript object.
|
||||
* @param mapper - The mapper which defines the metadata of the serializable object
|
||||
* @param object - A valid Javascript object to be serialized
|
||||
* @param objectName - Name of the serialized object
|
||||
* @param options - additional options to deserialization
|
||||
* @returns A valid serialized Javascript object
|
||||
*/
|
||||
serialize(mapper, object, objectName, options = {}) {
|
||||
var _a, _b, _c;
|
||||
const updatedOptions = {
|
||||
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
|
||||
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
|
||||
};
|
||||
let payload = {};
|
||||
const mapperType = mapper.type.name;
|
||||
@@ -54079,20 +53989,20 @@ class Serializer {
|
||||
return payload;
|
||||
}
|
||||
/**
|
||||
* Deserialize the given object based on its metadata defined in the mapper.
|
||||
* Deserialize the given object based on its metadata defined in the mapper
|
||||
*
|
||||
* @param mapper - The mapper which defines the metadata of the serializable object.
|
||||
* @param responseBody - A valid Javascript entity to be deserialized.
|
||||
* @param objectName - Name of the deserialized object.
|
||||
* @param mapper - The mapper which defines the metadata of the serializable object
|
||||
* @param responseBody - A valid Javascript entity to be deserialized
|
||||
* @param objectName - Name of the deserialized object
|
||||
* @param options - Controls behavior of XML parser and builder.
|
||||
* @returns A valid deserialized Javascript object.
|
||||
* @returns A valid deserialized Javascript object
|
||||
*/
|
||||
deserialize(mapper, responseBody, objectName, options = {}) {
|
||||
var _a, _b, _c;
|
||||
const updatedOptions = {
|
||||
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
|
||||
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
|
||||
};
|
||||
if (responseBody == undefined) {
|
||||
if (this.isXML && mapper.type.name === "Sequence" && !mapper.xmlIsWrapped) {
|
||||
@@ -54191,7 +54101,9 @@ function bufferToBase64Url(buffer) {
|
||||
// Uint8Array to Base64.
|
||||
const str = encodeByteArray(buffer);
|
||||
// Base64 to Base64Url.
|
||||
return trimEnd(str, "=").replace(/\+/g, "-").replace(/\//g, "_");
|
||||
return trimEnd(str, "=")
|
||||
.replace(/\+/g, "-")
|
||||
.replace(/\//g, "_");
|
||||
}
|
||||
function base64UrlToByteArray(str) {
|
||||
if (!str) {
|
||||
@@ -54407,10 +54319,10 @@ function serializeDictionaryType(serializer, mapper, object, objectName, isXml,
|
||||
return tempDictionary;
|
||||
}
|
||||
/**
|
||||
* Resolves the additionalProperties property from a referenced mapper.
|
||||
* @param serializer - The serializer containing the entire set of mappers.
|
||||
* @param mapper - The composite mapper to resolve.
|
||||
* @param objectName - Name of the object being serialized.
|
||||
* Resolves the additionalProperties property from a referenced mapper
|
||||
* @param serializer - The serializer containing the entire set of mappers
|
||||
* @param mapper - The composite mapper to resolve
|
||||
* @param objectName - Name of the object being serialized
|
||||
*/
|
||||
function resolveAdditionalProperties(serializer, mapper, objectName) {
|
||||
const additionalProperties = mapper.type.additionalProperties;
|
||||
@@ -54421,7 +54333,7 @@ function resolveAdditionalProperties(serializer, mapper, objectName) {
|
||||
return additionalProperties;
|
||||
}
|
||||
/**
|
||||
* Finds the mapper referenced by `className`.
|
||||
* Finds the mapper referenced by className
|
||||
* @param serializer - The serializer containing the entire set of mappers
|
||||
* @param mapper - The composite mapper to resolve
|
||||
* @param objectName - Name of the object being serialized
|
||||
@@ -54760,9 +54672,7 @@ function getPolymorphicDiscriminatorSafely(serializer, typeName) {
|
||||
serializer.modelMappers[typeName] &&
|
||||
serializer.modelMappers[typeName].type.polymorphicDiscriminator);
|
||||
}
|
||||
/**
|
||||
* Utility function that serializes an object that might contain binary information into a plain object, array or a string.
|
||||
*/
|
||||
// TODO: why is this here?
|
||||
function serializeObject(toSerialize) {
|
||||
const castToSerialize = toSerialize;
|
||||
if (toSerialize == undefined)
|
||||
@@ -54800,9 +54710,6 @@ function strEnum(o) {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* String enum containing the string types of property mappers.
|
||||
*/
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
const MapperType = strEnum([
|
||||
"Base64Url",
|
||||
@@ -54820,7 +54727,7 @@ const MapperType = strEnum([
|
||||
"String",
|
||||
"Stream",
|
||||
"TimeSpan",
|
||||
"UnixTime",
|
||||
"UnixTime"
|
||||
]);
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
@@ -55083,6 +54990,9 @@ class WebResource {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const custom = util.inspect.custom;
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* A class that handles the query portion of a URLBuilder.
|
||||
@@ -55380,10 +55290,6 @@ class URLBuilder {
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Serializes the URL as a string.
|
||||
* @returns the URL as a string.
|
||||
*/
|
||||
toString() {
|
||||
let result = "";
|
||||
if (this._scheme) {
|
||||
@@ -55419,9 +55325,6 @@ class URLBuilder {
|
||||
this.setQuery(replaceAll(this.getQuery(), searchValue, replaceValue));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Parses a given string URL into a new {@link URLBuilder}.
|
||||
*/
|
||||
static parse(text) {
|
||||
const result = new URLBuilder();
|
||||
result.set(text, "SCHEME_OR_HOST");
|
||||
@@ -55678,60 +55581,6 @@ function nextQuery(tokenizer) {
|
||||
tokenizer._currentState = "DONE";
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function createProxyAgent(requestUrl, proxySettings, headers) {
|
||||
const host = URLBuilder.parse(proxySettings.host).getHost();
|
||||
if (!host) {
|
||||
throw new Error("Expecting a non-empty host in proxy settings.");
|
||||
}
|
||||
if (!isValidPort(proxySettings.port)) {
|
||||
throw new Error("Expecting a valid port number in the range of [0, 65535] in proxy settings.");
|
||||
}
|
||||
const tunnelOptions = {
|
||||
proxy: {
|
||||
host: host,
|
||||
port: proxySettings.port,
|
||||
headers: (headers && headers.rawHeaders()) || {},
|
||||
},
|
||||
};
|
||||
if (proxySettings.username && proxySettings.password) {
|
||||
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}:${proxySettings.password}`;
|
||||
}
|
||||
else if (proxySettings.username) {
|
||||
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}`;
|
||||
}
|
||||
const isRequestHttps = isUrlHttps(requestUrl);
|
||||
const isProxyHttps = isUrlHttps(proxySettings.host);
|
||||
const proxyAgent = {
|
||||
isHttps: isRequestHttps,
|
||||
agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions),
|
||||
};
|
||||
return proxyAgent;
|
||||
}
|
||||
function isUrlHttps(url) {
|
||||
const urlScheme = URLBuilder.parse(url).getScheme() || "";
|
||||
return urlScheme.toLowerCase() === "https";
|
||||
}
|
||||
function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) {
|
||||
if (isRequestHttps && isProxyHttps) {
|
||||
return tunnel__namespace.httpsOverHttps(tunnelOptions);
|
||||
}
|
||||
else if (isRequestHttps && !isProxyHttps) {
|
||||
return tunnel__namespace.httpsOverHttp(tunnelOptions);
|
||||
}
|
||||
else if (!isRequestHttps && isProxyHttps) {
|
||||
return tunnel__namespace.httpOverHttps(tunnelOptions);
|
||||
}
|
||||
else {
|
||||
return tunnel__namespace.httpOverHttp(tunnelOptions);
|
||||
}
|
||||
}
|
||||
function isValidPort(port) {
|
||||
// any port in 0-65535 range is valid (RFC 793) even though almost all implementations
|
||||
// will reserve 0 for a specific purpose, and a range of numbers for ephemeral ports
|
||||
return 0 <= port && port <= 65535;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const RedactedString = "REDACTED";
|
||||
const defaultAllowedHeaderNames = [
|
||||
@@ -55772,7 +55621,7 @@ const defaultAllowedHeaderNames = [
|
||||
"Retry-After",
|
||||
"Server",
|
||||
"Transfer-Encoding",
|
||||
"User-Agent",
|
||||
"User-Agent"
|
||||
];
|
||||
const defaultAllowedQueryParameters = ["api-version"];
|
||||
class Sanitizer {
|
||||
@@ -55865,14 +55714,8 @@ class Sanitizer {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const custom = util.inspect.custom;
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const errorSanitizer = new Sanitizer();
|
||||
/**
|
||||
* An error resulting from an HTTP request to a service endpoint.
|
||||
*/
|
||||
class RestError extends Error {
|
||||
constructor(message, code, statusCode, request, response) {
|
||||
super(message);
|
||||
@@ -55890,22 +55733,13 @@ class RestError extends Error {
|
||||
return `RestError: ${this.message} \n ${errorSanitizer.sanitize(this)}`;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* A constant string to identify errors that may arise when making an HTTP request that indicates an issue with the transport layer (e.g. the hostname of the URL cannot be resolved via DNS.)
|
||||
*/
|
||||
RestError.REQUEST_SEND_ERROR = "REQUEST_SEND_ERROR";
|
||||
/**
|
||||
* A constant string to identify errors that may arise from parsing an incoming HTTP response. Usually indicates a malformed HTTP body, such as an encoded JSON payload that is incomplete.
|
||||
*/
|
||||
RestError.PARSE_ERROR = "PARSE_ERROR";
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const logger = logger$1.createClientLogger("core-http");
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getCachedAgent(isHttps, agentCache) {
|
||||
return isHttps ? agentCache.httpsAgent : agentCache.httpAgent;
|
||||
}
|
||||
class ReportTransform extends stream.Transform {
|
||||
constructor(progressCallback) {
|
||||
super();
|
||||
@@ -55919,44 +55753,7 @@ class ReportTransform extends stream.Transform {
|
||||
callback(undefined);
|
||||
}
|
||||
}
|
||||
function isReadableStream(body) {
|
||||
return body && typeof body.pipe === "function";
|
||||
}
|
||||
function isStreamComplete(stream, aborter) {
|
||||
return new Promise((resolve) => {
|
||||
stream.once("close", () => {
|
||||
aborter === null || aborter === void 0 ? void 0 : aborter.abort();
|
||||
resolve();
|
||||
});
|
||||
stream.once("end", resolve);
|
||||
stream.once("error", resolve);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Transforms a set of headers into the key/value pair defined by {@link HttpHeadersLike}
|
||||
*/
|
||||
function parseHeaders(headers) {
|
||||
const httpHeaders = new HttpHeaders();
|
||||
headers.forEach((value, key) => {
|
||||
httpHeaders.set(key, value);
|
||||
});
|
||||
return httpHeaders;
|
||||
}
|
||||
/**
|
||||
* An HTTP client that uses `node-fetch`.
|
||||
*/
|
||||
class NodeFetchHttpClient {
|
||||
constructor() {
|
||||
// a mapping of proxy settings string `${host}:${port}:${username}:${password}` to agent
|
||||
this.proxyAgentMap = new Map();
|
||||
this.keepAliveAgents = {};
|
||||
this.cookieJar = new tough__namespace.CookieJar(undefined, { looseMode: true });
|
||||
}
|
||||
/**
|
||||
* Provides minimum viable error handling and the logic that executes the abstract methods.
|
||||
* @param httpRequest - Object representing the outgoing HTTP request.
|
||||
* @returns An object representing the incoming HTTP response.
|
||||
*/
|
||||
class FetchHttpClient {
|
||||
async sendRequest(httpRequest) {
|
||||
var _a;
|
||||
if (!httpRequest && typeof httpRequest !== "object") {
|
||||
@@ -55982,7 +55779,7 @@ class NodeFetchHttpClient {
|
||||
}
|
||||
if (httpRequest.formData) {
|
||||
const formData = httpRequest.formData;
|
||||
const requestForm = new FormData__default["default"]();
|
||||
const requestForm = new FormData();
|
||||
const appendFormValue = (key, value) => {
|
||||
// value function probably returns a stream so we can provide a fresh stream on each retry
|
||||
if (typeof value === "function") {
|
||||
@@ -56052,7 +55849,7 @@ class NodeFetchHttpClient {
|
||||
readableStreamBody: streaming
|
||||
? response.body
|
||||
: undefined,
|
||||
bodyAsText: !streaming ? await response.text() : undefined,
|
||||
bodyAsText: !streaming ? await response.text() : undefined
|
||||
};
|
||||
const onDownloadProgress = httpRequest.onDownloadProgress;
|
||||
if (onDownloadProgress) {
|
||||
@@ -56106,6 +55903,94 @@ class NodeFetchHttpClient {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function isReadableStream(body) {
|
||||
return body && typeof body.pipe === "function";
|
||||
}
|
||||
function isStreamComplete(stream, aborter) {
|
||||
return new Promise((resolve) => {
|
||||
stream.once("close", () => {
|
||||
aborter === null || aborter === void 0 ? void 0 : aborter.abort();
|
||||
resolve();
|
||||
});
|
||||
stream.once("end", resolve);
|
||||
stream.once("error", resolve);
|
||||
});
|
||||
}
|
||||
function parseHeaders(headers) {
|
||||
const httpHeaders = new HttpHeaders();
|
||||
headers.forEach((value, key) => {
|
||||
httpHeaders.set(key, value);
|
||||
});
|
||||
return httpHeaders;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function createProxyAgent(requestUrl, proxySettings, headers) {
|
||||
const host = URLBuilder.parse(proxySettings.host).getHost();
|
||||
if (!host) {
|
||||
throw new Error("Expecting a non-empty host in proxy settings.");
|
||||
}
|
||||
if (!isValidPort(proxySettings.port)) {
|
||||
throw new Error("Expecting a valid port number in the range of [0, 65535] in proxy settings.");
|
||||
}
|
||||
const tunnelOptions = {
|
||||
proxy: {
|
||||
host: host,
|
||||
port: proxySettings.port,
|
||||
headers: (headers && headers.rawHeaders()) || {}
|
||||
}
|
||||
};
|
||||
if (proxySettings.username && proxySettings.password) {
|
||||
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}:${proxySettings.password}`;
|
||||
}
|
||||
else if (proxySettings.username) {
|
||||
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}`;
|
||||
}
|
||||
const isRequestHttps = isUrlHttps(requestUrl);
|
||||
const isProxyHttps = isUrlHttps(proxySettings.host);
|
||||
const proxyAgent = {
|
||||
isHttps: isRequestHttps,
|
||||
agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions)
|
||||
};
|
||||
return proxyAgent;
|
||||
}
|
||||
function isUrlHttps(url) {
|
||||
const urlScheme = URLBuilder.parse(url).getScheme() || "";
|
||||
return urlScheme.toLowerCase() === "https";
|
||||
}
|
||||
function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) {
|
||||
if (isRequestHttps && isProxyHttps) {
|
||||
return tunnel.httpsOverHttps(tunnelOptions);
|
||||
}
|
||||
else if (isRequestHttps && !isProxyHttps) {
|
||||
return tunnel.httpsOverHttp(tunnelOptions);
|
||||
}
|
||||
else if (!isRequestHttps && isProxyHttps) {
|
||||
return tunnel.httpOverHttps(tunnelOptions);
|
||||
}
|
||||
else {
|
||||
return tunnel.httpOverHttp(tunnelOptions);
|
||||
}
|
||||
}
|
||||
function isValidPort(port) {
|
||||
// any port in 0-65535 range is valid (RFC 793) even though almost all implementations
|
||||
// will reserve 0 for a specific purpose, and a range of numbers for ephemeral ports
|
||||
return 0 <= port && port <= 65535;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getCachedAgent(isHttps, agentCache) {
|
||||
return isHttps ? agentCache.httpsAgent : agentCache.httpAgent;
|
||||
}
|
||||
class NodeFetchHttpClient extends FetchHttpClient {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
// a mapping of proxy settings string `${host}:${port}:${username}:${password}` to agent
|
||||
this.proxyAgentMap = new Map();
|
||||
this.keepAliveAgents = {};
|
||||
this.cookieJar = new tough.CookieJar(undefined, { looseMode: true });
|
||||
}
|
||||
getOrCreateAgent(httpRequest) {
|
||||
var _a;
|
||||
const isHttps = isUrlHttps(httpRequest.url);
|
||||
@@ -56137,30 +56022,24 @@ class NodeFetchHttpClient {
|
||||
return agent;
|
||||
}
|
||||
const agentOptions = {
|
||||
keepAlive: httpRequest.keepAlive,
|
||||
keepAlive: httpRequest.keepAlive
|
||||
};
|
||||
if (isHttps) {
|
||||
agent = this.keepAliveAgents.httpsAgent = new https__namespace.Agent(agentOptions);
|
||||
agent = this.keepAliveAgents.httpsAgent = new https.Agent(agentOptions);
|
||||
}
|
||||
else {
|
||||
agent = this.keepAliveAgents.httpAgent = new http__namespace.Agent(agentOptions);
|
||||
agent = this.keepAliveAgents.httpAgent = new http.Agent(agentOptions);
|
||||
}
|
||||
return agent;
|
||||
}
|
||||
else {
|
||||
return isHttps ? https__namespace.globalAgent : http__namespace.globalAgent;
|
||||
return isHttps ? https.globalAgent : http.globalAgent;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Uses `node-fetch` to perform the request.
|
||||
*/
|
||||
// eslint-disable-next-line @azure/azure-sdk/ts-apisurface-standardized-verbs
|
||||
async fetch(input, init) {
|
||||
return node_fetch__default["default"](input, init);
|
||||
return node_fetch(input, init);
|
||||
}
|
||||
/**
|
||||
* Prepares a request based on the provided web resource.
|
||||
*/
|
||||
async prepareRequest(httpRequest) {
|
||||
const requestInit = {};
|
||||
if (this.cookieJar && !httpRequest.headers.get("Cookie")) {
|
||||
@@ -56181,9 +56060,6 @@ class NodeFetchHttpClient {
|
||||
requestInit.compress = httpRequest.decompressResponse;
|
||||
return requestInit;
|
||||
}
|
||||
/**
|
||||
* Process an HTTP response. Handles persisting a cookie for subsequent requests if the response has a "Set-Cookie" header.
|
||||
*/
|
||||
async processRequest(operationResponse) {
|
||||
if (this.cookieJar) {
|
||||
const setCookieHeader = operationResponse.headers.get("Set-Cookie");
|
||||
@@ -56204,11 +56080,6 @@ class NodeFetchHttpClient {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
* The different levels of logs that can be used with the HttpPipelineLogger.
|
||||
*/
|
||||
exports.HttpPipelineLogLevel = void 0;
|
||||
(function (HttpPipelineLogLevel) {
|
||||
/**
|
||||
* A log level that indicates that no logs will be logged.
|
||||
@@ -56228,7 +56099,6 @@ exports.HttpPipelineLogLevel = void 0;
|
||||
HttpPipelineLogLevel[HttpPipelineLogLevel["INFO"] = 3] = "INFO";
|
||||
})(exports.HttpPipelineLogLevel || (exports.HttpPipelineLogLevel = {}));
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Converts an OperationOptions to a RequestOptionsBase
|
||||
*
|
||||
@@ -56250,22 +56120,8 @@ function operationOptionsToRequestOptionsBase(opts) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* The base class from which all request policies derive.
|
||||
*/
|
||||
class BaseRequestPolicy {
|
||||
/**
|
||||
* The main method to implement that manipulates a request/response.
|
||||
*/
|
||||
constructor(
|
||||
/**
|
||||
* The next policy in the pipeline. Each policy is responsible for executing the next one if the request is to continue through the pipeline.
|
||||
*/
|
||||
_nextPolicy,
|
||||
/**
|
||||
* The options that can be passed to a given request policy.
|
||||
*/
|
||||
_options) {
|
||||
constructor(_nextPolicy, _options) {
|
||||
this._nextPolicy = _nextPolicy;
|
||||
this._options = _options;
|
||||
}
|
||||
@@ -56317,6 +56173,113 @@ class RequestPolicyOptions {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function logPolicy(loggingOptions = {}) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new LogPolicy(nextPolicy, options, loggingOptions);
|
||||
}
|
||||
};
|
||||
}
|
||||
class LogPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, { logger: logger$1 = logger.info, allowedHeaderNames = [], allowedQueryParameters = [] } = {}) {
|
||||
super(nextPolicy, options);
|
||||
this.logger = logger$1;
|
||||
this.sanitizer = new Sanitizer({ allowedHeaderNames, allowedQueryParameters });
|
||||
}
|
||||
/**
|
||||
* Header names whose values will be logged when logging is enabled. Defaults to
|
||||
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
|
||||
* specified in this field will be added to that list. Any other values will
|
||||
* be written to logs as "REDACTED".
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
get allowedHeaderNames() {
|
||||
return this.sanitizer.allowedHeaderNames;
|
||||
}
|
||||
/**
|
||||
* Header names whose values will be logged when logging is enabled. Defaults to
|
||||
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
|
||||
* specified in this field will be added to that list. Any other values will
|
||||
* be written to logs as "REDACTED".
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
set allowedHeaderNames(allowedHeaderNames) {
|
||||
this.sanitizer.allowedHeaderNames = allowedHeaderNames;
|
||||
}
|
||||
/**
|
||||
* Query string names whose values will be logged when logging is enabled. By default no
|
||||
* query string values are logged.
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
get allowedQueryParameters() {
|
||||
return this.sanitizer.allowedQueryParameters;
|
||||
}
|
||||
/**
|
||||
* Query string names whose values will be logged when logging is enabled. By default no
|
||||
* query string values are logged.
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
set allowedQueryParameters(allowedQueryParameters) {
|
||||
this.sanitizer.allowedQueryParameters = allowedQueryParameters;
|
||||
}
|
||||
sendRequest(request) {
|
||||
if (!this.logger.enabled)
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
this.logRequest(request);
|
||||
return this._nextPolicy.sendRequest(request).then((response) => this.logResponse(response));
|
||||
}
|
||||
logRequest(request) {
|
||||
this.logger(`Request: ${this.sanitizer.sanitize(request)}`);
|
||||
}
|
||||
logResponse(response) {
|
||||
this.logger(`Response status code: ${response.status}`);
|
||||
this.logger(`Headers: ${this.sanitizer.sanitize(response.headers)}`);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
* Get the path to this parameter's value as a dotted string (a.b.c).
|
||||
* @param parameter - The parameter to get the path string for.
|
||||
* @returns The path to this parameter's value as a dotted string.
|
||||
*/
|
||||
function getPathStringFromParameter(parameter) {
|
||||
return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);
|
||||
}
|
||||
function getPathStringFromParameterPath(parameterPath, mapper) {
|
||||
let result;
|
||||
if (typeof parameterPath === "string") {
|
||||
result = parameterPath;
|
||||
}
|
||||
else if (Array.isArray(parameterPath)) {
|
||||
result = parameterPath.join(".");
|
||||
}
|
||||
else {
|
||||
result = mapper.serializedName;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Gets the list of status codes for streaming responses.
|
||||
* @internal
|
||||
*/
|
||||
function getStreamResponseStatusCodes(operationSpec) {
|
||||
const result = new Set();
|
||||
for (const statusCode in operationSpec.responses) {
|
||||
const operationResponse = operationSpec.responses[statusCode];
|
||||
if (operationResponse.bodyMapper &&
|
||||
operationResponse.bodyMapper.type.name === MapperType.Stream) {
|
||||
result.add(Number(statusCode));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Note: The reason we re-define all of the xml2js default settings (version 2.0) here is because the default settings object exposed
|
||||
// by the xm2js library is mutable. See https://github.com/Leonidas-from-XIV/node-xml2js/issues/536
|
||||
@@ -56349,18 +56312,18 @@ const xml2jsDefaultOptionsV2 = {
|
||||
xmldec: {
|
||||
version: "1.0",
|
||||
encoding: "UTF-8",
|
||||
standalone: true,
|
||||
standalone: true
|
||||
},
|
||||
doctype: undefined,
|
||||
renderOpts: {
|
||||
pretty: true,
|
||||
indent: " ",
|
||||
newline: "\n",
|
||||
newline: "\n"
|
||||
},
|
||||
headless: false,
|
||||
chunkSize: 10000,
|
||||
emptyTag: "",
|
||||
cdata: false,
|
||||
cdata: false
|
||||
};
|
||||
// The xml2js settings for general XML parsing operations.
|
||||
const xml2jsParserSettings = Object.assign({}, xml2jsDefaultOptionsV2);
|
||||
@@ -56369,7 +56332,7 @@ xml2jsParserSettings.explicitArray = false;
|
||||
const xml2jsBuilderSettings = Object.assign({}, xml2jsDefaultOptionsV2);
|
||||
xml2jsBuilderSettings.explicitArray = false;
|
||||
xml2jsBuilderSettings.renderOpts = {
|
||||
pretty: false,
|
||||
pretty: false
|
||||
};
|
||||
/**
|
||||
* Converts given JSON object to XML string
|
||||
@@ -56380,7 +56343,7 @@ function stringifyXML(obj, opts = {}) {
|
||||
var _a;
|
||||
xml2jsBuilderSettings.rootName = opts.rootName;
|
||||
xml2jsBuilderSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
|
||||
const builder = new xml2js__namespace.Builder(xml2jsBuilderSettings);
|
||||
const builder = new xml2js.Builder(xml2jsBuilderSettings);
|
||||
return builder.buildObject(obj);
|
||||
}
|
||||
/**
|
||||
@@ -56392,7 +56355,7 @@ function parseXML(str, opts = {}) {
|
||||
var _a;
|
||||
xml2jsParserSettings.explicitRoot = !!opts.includeRoot;
|
||||
xml2jsParserSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
|
||||
const xmlParser = new xml2js__namespace.Parser(xml2jsParserSettings);
|
||||
const xmlParser = new xml2js.Parser(xml2jsParserSettings);
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!str) {
|
||||
reject(new Error("Document is empty"));
|
||||
@@ -56419,7 +56382,7 @@ function deserializationPolicy(deserializationContentTypes, parsingOptions) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new DeserializationPolicy(nextPolicy, options, deserializationContentTypes, parsingOptions);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
const defaultJsonContentTypes = ["application/json", "text/json"];
|
||||
@@ -56427,8 +56390,8 @@ const defaultXmlContentTypes = ["application/xml", "application/atom+xml"];
|
||||
const DefaultDeserializationOptions = {
|
||||
expectedContentTypes: {
|
||||
json: defaultJsonContentTypes,
|
||||
xml: defaultXmlContentTypes,
|
||||
},
|
||||
xml: defaultXmlContentTypes
|
||||
}
|
||||
};
|
||||
/**
|
||||
* A RequestPolicy that will deserialize HTTP response bodies and headers as they pass through the
|
||||
@@ -56446,7 +56409,7 @@ class DeserializationPolicy extends BaseRequestPolicy {
|
||||
}
|
||||
async sendRequest(request) {
|
||||
return this._nextPolicy.sendRequest(request).then((response) => deserializeResponseBody(this.jsonContentTypes, this.xmlContentTypes, response, {
|
||||
xmlCharKey: this.xmlCharKey,
|
||||
xmlCharKey: this.xmlCharKey
|
||||
}));
|
||||
}
|
||||
}
|
||||
@@ -56479,20 +56442,12 @@ function shouldDeserializeResponse(parsedResponse) {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Given a particular set of content types to parse as either JSON or XML, consumes the HTTP response to produce the result object defined by the request's {@link OperationSpec}.
|
||||
* @param jsonContentTypes - Response content types to parse the body as JSON.
|
||||
* @param xmlContentTypes - Response content types to parse the body as XML.
|
||||
* @param response - HTTP Response from the pipeline.
|
||||
* @param options - Options to the serializer, mostly for configuring the XML parser if needed.
|
||||
* @returns A parsed {@link HttpOperationResponse} object that can be returned by the {@link ServiceClient}.
|
||||
*/
|
||||
function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options = {}) {
|
||||
var _a, _b, _c;
|
||||
const updatedOptions = {
|
||||
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
|
||||
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
|
||||
};
|
||||
return parse(jsonContentTypes, xmlContentTypes, response, updatedOptions).then((parsedResponse) => {
|
||||
if (!shouldDeserializeResponse(parsedResponse)) {
|
||||
@@ -56643,113 +56598,6 @@ function parse(jsonContentTypes, xmlContentTypes, operationResponse, opts) {
|
||||
return Promise.resolve(operationResponse);
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* By default, HTTP connections are maintained for future requests.
|
||||
*/
|
||||
const DefaultKeepAliveOptions = {
|
||||
enable: true,
|
||||
};
|
||||
/**
|
||||
* Creates a policy that controls whether HTTP connections are maintained on future requests.
|
||||
* @param keepAliveOptions - Keep alive options. By default, HTTP connections are maintained for future requests.
|
||||
* @returns An instance of the {@link KeepAlivePolicy}
|
||||
*/
|
||||
function keepAlivePolicy(keepAliveOptions) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);
|
||||
},
|
||||
};
|
||||
}
|
||||
/**
|
||||
* KeepAlivePolicy is a policy used to control keep alive settings for every request.
|
||||
*/
|
||||
class KeepAlivePolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of KeepAlivePolicy.
|
||||
*
|
||||
* @param nextPolicy -
|
||||
* @param options -
|
||||
* @param keepAliveOptions -
|
||||
*/
|
||||
constructor(nextPolicy, options, keepAliveOptions) {
|
||||
super(nextPolicy, options);
|
||||
this.keepAliveOptions = keepAliveOptions;
|
||||
}
|
||||
/**
|
||||
* Sends out request.
|
||||
*
|
||||
* @param request -
|
||||
* @returns
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
request.keepAlive = this.keepAliveOptions.enable;
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Methods that are allowed to follow redirects 301 and 302
|
||||
*/
|
||||
const allowedRedirect = ["GET", "HEAD"];
|
||||
const DefaultRedirectOptions = {
|
||||
handleRedirects: true,
|
||||
maxRetries: 20,
|
||||
};
|
||||
/**
|
||||
* Creates a redirect policy, which sends a repeats the request to a new destination if a response arrives with a "location" header, and a status code between 300 and 307.
|
||||
* @param maximumRetries - Maximum number of redirects to follow.
|
||||
* @returns An instance of the {@link RedirectPolicy}
|
||||
*/
|
||||
function redirectPolicy(maximumRetries = 20) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new RedirectPolicy(nextPolicy, options, maximumRetries);
|
||||
},
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Resends the request to a new destination if a response arrives with a "location" header, and a status code between 300 and 307.
|
||||
*/
|
||||
class RedirectPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, maxRetries = 20) {
|
||||
super(nextPolicy, options);
|
||||
this.maxRetries = maxRetries;
|
||||
}
|
||||
sendRequest(request) {
|
||||
return this._nextPolicy
|
||||
.sendRequest(request)
|
||||
.then((response) => handleRedirect(this, response, 0));
|
||||
}
|
||||
}
|
||||
function handleRedirect(policy, response, currentRetries) {
|
||||
const { request, status } = response;
|
||||
const locationHeader = response.headers.get("location");
|
||||
if (locationHeader &&
|
||||
(status === 300 ||
|
||||
(status === 301 && allowedRedirect.includes(request.method)) ||
|
||||
(status === 302 && allowedRedirect.includes(request.method)) ||
|
||||
(status === 303 && request.method === "POST") ||
|
||||
status === 307) &&
|
||||
(!policy.maxRetries || currentRetries < policy.maxRetries)) {
|
||||
const builder = URLBuilder.parse(request.url);
|
||||
builder.setPath(locationHeader);
|
||||
request.url = builder.toString();
|
||||
// POST request with Status code 303 should be converted into a
|
||||
// redirected GET request if the redirect url is present in the location header
|
||||
if (status === 303) {
|
||||
request.method = "GET";
|
||||
delete request.body;
|
||||
}
|
||||
return policy._nextPolicy
|
||||
.sendRequest(request)
|
||||
.then((res) => handleRedirect(policy, res, currentRetries + 1));
|
||||
}
|
||||
return Promise.resolve(response);
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
const DEFAULT_CLIENT_RETRY_COUNT = 3;
|
||||
@@ -56813,7 +56661,7 @@ function isDefined(thing) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const StandardAbortMessage$1 = "The operation was aborted.";
|
||||
const StandardAbortMessage = "The operation was aborted.";
|
||||
/**
|
||||
* A wrapper for setTimeout that resolves a promise after delayInMs milliseconds.
|
||||
* @param delayInMs - The number of milliseconds to be delayed.
|
||||
@@ -56828,7 +56676,7 @@ function delay(delayInMs, value, options) {
|
||||
let timer = undefined;
|
||||
let onAborted = undefined;
|
||||
const rejectOnAbort = () => {
|
||||
return reject(new abortController.AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage$1));
|
||||
return reject(new abortController.AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage));
|
||||
};
|
||||
const removeListeners = () => {
|
||||
if ((options === null || options === void 0 ? void 0 : options.abortSignal) && onAborted) {
|
||||
@@ -56856,34 +56704,20 @@ function delay(delayInMs, value, options) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Policy that retries the request as many times as configured for as long as the max retry time interval specified, each retry waiting longer to begin than the last time.
|
||||
* @param retryCount - Maximum number of retries.
|
||||
* @param retryInterval - Base time between retries.
|
||||
* @param maxRetryInterval - Maximum time to wait between retries.
|
||||
*/
|
||||
function exponentialRetryPolicy(retryCount, retryInterval, maxRetryInterval) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, maxRetryInterval);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Describes the Retry Mode type. Currently supporting only Exponential.
|
||||
*/
|
||||
exports.RetryMode = void 0;
|
||||
(function (RetryMode) {
|
||||
/**
|
||||
* Currently supported retry mode.
|
||||
* Each time a retry happens, it will take exponentially more time than the last time.
|
||||
*/
|
||||
RetryMode[RetryMode["Exponential"] = 0] = "Exponential";
|
||||
})(exports.RetryMode || (exports.RetryMode = {}));
|
||||
const DefaultRetryOptions = {
|
||||
maxRetries: DEFAULT_CLIENT_RETRY_COUNT,
|
||||
retryDelayInMs: DEFAULT_CLIENT_RETRY_INTERVAL,
|
||||
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL,
|
||||
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL
|
||||
};
|
||||
/**
|
||||
* Instantiates a new "ExponentialRetryPolicyFilter" instance.
|
||||
@@ -56908,11 +56742,11 @@ class ExponentialRetryPolicy extends BaseRequestPolicy {
|
||||
sendRequest(request) {
|
||||
return this._nextPolicy
|
||||
.sendRequest(request.clone())
|
||||
.then((response) => retry$1(this, request, response))
|
||||
.catch((error) => retry$1(this, request, error.response, undefined, error));
|
||||
.then((response) => retry(this, request, response))
|
||||
.catch((error) => retry(this, request, error.response, undefined, error));
|
||||
}
|
||||
}
|
||||
async function retry$1(policy, request, response, retryData, requestError) {
|
||||
async function retry(policy, request, response, retryData, requestError) {
|
||||
function shouldPolicyRetry(responseParam) {
|
||||
const statusCode = responseParam === null || responseParam === void 0 ? void 0 : responseParam.status;
|
||||
if (statusCode === 503 && (response === null || response === void 0 ? void 0 : response.headers.get(Constants.HeaderConstants.RETRY_AFTER))) {
|
||||
@@ -56929,7 +56763,7 @@ async function retry$1(policy, request, response, retryData, requestError) {
|
||||
retryData = updateRetryData({
|
||||
retryInterval: policy.retryInterval,
|
||||
minRetryInterval: 0,
|
||||
maxRetryInterval: policy.maxRetryInterval,
|
||||
maxRetryInterval: policy.maxRetryInterval
|
||||
}, retryData, requestError);
|
||||
const isAborted = request.abortSignal && request.abortSignal.aborted;
|
||||
if (!isAborted && shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, response)) {
|
||||
@@ -56937,10 +56771,10 @@ async function retry$1(policy, request, response, retryData, requestError) {
|
||||
try {
|
||||
await delay(retryData.retryInterval);
|
||||
const res = await policy._nextPolicy.sendRequest(request.clone());
|
||||
return retry$1(policy, request, res, retryData);
|
||||
return retry(policy, request, res, retryData);
|
||||
}
|
||||
catch (err) {
|
||||
return retry$1(policy, request, response, retryData, err);
|
||||
return retry(policy, request, response, retryData, err);
|
||||
}
|
||||
}
|
||||
else if (isAborted || requestError || !response) {
|
||||
@@ -56955,467 +56789,11 @@ async function retry$1(policy, request, response, retryData, requestError) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Creates a policy that logs information about the outgoing request and the incoming responses.
|
||||
* @param loggingOptions - Logging options.
|
||||
* @returns An instance of the {@link LogPolicy}
|
||||
*/
|
||||
function logPolicy(loggingOptions = {}) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new LogPolicy(nextPolicy, options, loggingOptions);
|
||||
},
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that logs information about the outgoing request and the incoming responses.
|
||||
*/
|
||||
class LogPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, { logger: logger$1 = logger.info, allowedHeaderNames = [], allowedQueryParameters = [], } = {}) {
|
||||
super(nextPolicy, options);
|
||||
this.logger = logger$1;
|
||||
this.sanitizer = new Sanitizer({ allowedHeaderNames, allowedQueryParameters });
|
||||
}
|
||||
/**
|
||||
* Header names whose values will be logged when logging is enabled. Defaults to
|
||||
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
|
||||
* specified in this field will be added to that list. Any other values will
|
||||
* be written to logs as "REDACTED".
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
get allowedHeaderNames() {
|
||||
return this.sanitizer.allowedHeaderNames;
|
||||
}
|
||||
/**
|
||||
* Header names whose values will be logged when logging is enabled. Defaults to
|
||||
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
|
||||
* specified in this field will be added to that list. Any other values will
|
||||
* be written to logs as "REDACTED".
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
set allowedHeaderNames(allowedHeaderNames) {
|
||||
this.sanitizer.allowedHeaderNames = allowedHeaderNames;
|
||||
}
|
||||
/**
|
||||
* Query string names whose values will be logged when logging is enabled. By default no
|
||||
* query string values are logged.
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
get allowedQueryParameters() {
|
||||
return this.sanitizer.allowedQueryParameters;
|
||||
}
|
||||
/**
|
||||
* Query string names whose values will be logged when logging is enabled. By default no
|
||||
* query string values are logged.
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
set allowedQueryParameters(allowedQueryParameters) {
|
||||
this.sanitizer.allowedQueryParameters = allowedQueryParameters;
|
||||
}
|
||||
sendRequest(request) {
|
||||
if (!this.logger.enabled)
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
this.logRequest(request);
|
||||
return this._nextPolicy.sendRequest(request).then((response) => this.logResponse(response));
|
||||
}
|
||||
logRequest(request) {
|
||||
this.logger(`Request: ${this.sanitizer.sanitize(request)}`);
|
||||
}
|
||||
logResponse(response) {
|
||||
this.logger(`Response status code: ${response.status}`);
|
||||
this.logger(`Headers: ${this.sanitizer.sanitize(response.headers)}`);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
* Get the path to this parameter's value as a dotted string (a.b.c).
|
||||
* @param parameter - The parameter to get the path string for.
|
||||
* @returns The path to this parameter's value as a dotted string.
|
||||
*/
|
||||
function getPathStringFromParameter(parameter) {
|
||||
return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);
|
||||
}
|
||||
function getPathStringFromParameterPath(parameterPath, mapper) {
|
||||
let result;
|
||||
if (typeof parameterPath === "string") {
|
||||
result = parameterPath;
|
||||
}
|
||||
else if (Array.isArray(parameterPath)) {
|
||||
result = parameterPath.join(".");
|
||||
}
|
||||
else {
|
||||
result = mapper.serializedName;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Gets the list of status codes for streaming responses.
|
||||
* @internal
|
||||
*/
|
||||
function getStreamResponseStatusCodes(operationSpec) {
|
||||
const result = new Set();
|
||||
for (const statusCode in operationSpec.responses) {
|
||||
const operationResponse = operationSpec.responses[statusCode];
|
||||
if (operationResponse.bodyMapper &&
|
||||
operationResponse.bodyMapper.type.name === MapperType.Stream) {
|
||||
result.add(Number(statusCode));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getDefaultUserAgentKey() {
|
||||
return Constants.HeaderConstants.USER_AGENT;
|
||||
}
|
||||
function getPlatformSpecificData() {
|
||||
const runtimeInfo = {
|
||||
key: "Node",
|
||||
value: process.version,
|
||||
};
|
||||
const osInfo = {
|
||||
key: "OS",
|
||||
value: `(${os__namespace.arch()}-${os__namespace.type()}-${os__namespace.release()})`,
|
||||
};
|
||||
return [runtimeInfo, osInfo];
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getRuntimeInfo() {
|
||||
const msRestRuntime = {
|
||||
key: "core-http",
|
||||
value: Constants.coreHttpVersion,
|
||||
};
|
||||
return [msRestRuntime];
|
||||
}
|
||||
function getUserAgentString(telemetryInfo, keySeparator = " ", valueSeparator = "/") {
|
||||
return telemetryInfo
|
||||
.map((info) => {
|
||||
const value = info.value ? `${valueSeparator}${info.value}` : "";
|
||||
return `${info.key}${value}`;
|
||||
})
|
||||
.join(keySeparator);
|
||||
}
|
||||
const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
|
||||
/**
|
||||
* The default approach to generate user agents.
|
||||
* Uses static information from this package, plus system information available from the runtime.
|
||||
*/
|
||||
function getDefaultUserAgentValue() {
|
||||
const runtimeInfo = getRuntimeInfo();
|
||||
const platformSpecificData = getPlatformSpecificData();
|
||||
const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
|
||||
return userAgent;
|
||||
}
|
||||
/**
|
||||
* Returns a policy that adds the user agent header to outgoing requests based on the given {@link TelemetryInfo}.
|
||||
* @param userAgentData - Telemetry information.
|
||||
* @returns A new {@link UserAgentPolicy}.
|
||||
*/
|
||||
function userAgentPolicy(userAgentData) {
|
||||
const key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null
|
||||
? getDefaultUserAgentKey()
|
||||
: userAgentData.key;
|
||||
const value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null
|
||||
? getDefaultUserAgentValue()
|
||||
: userAgentData.value;
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new UserAgentPolicy(nextPolicy, options, key, value);
|
||||
},
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that adds the user agent header to outgoing requests based on the given {@link TelemetryInfo}.
|
||||
*/
|
||||
class UserAgentPolicy extends BaseRequestPolicy {
|
||||
constructor(_nextPolicy, _options, headerKey, headerValue) {
|
||||
super(_nextPolicy, _options);
|
||||
this._nextPolicy = _nextPolicy;
|
||||
this._options = _options;
|
||||
this.headerKey = headerKey;
|
||||
this.headerValue = headerValue;
|
||||
}
|
||||
sendRequest(request) {
|
||||
this.addUserAgentHeader(request);
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
/**
|
||||
* Adds the user agent header to the outgoing request.
|
||||
*/
|
||||
addUserAgentHeader(request) {
|
||||
if (!request.headers) {
|
||||
request.headers = new HttpHeaders();
|
||||
}
|
||||
if (!request.headers.get(this.headerKey) && this.headerValue) {
|
||||
request.headers.set(this.headerKey, this.headerValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
* The format that will be used to join an array of values together for a query parameter value.
|
||||
*/
|
||||
exports.QueryCollectionFormat = void 0;
|
||||
(function (QueryCollectionFormat) {
|
||||
/**
|
||||
* CSV: Each pair of segments joined by a single comma.
|
||||
*/
|
||||
QueryCollectionFormat["Csv"] = ",";
|
||||
/**
|
||||
* SSV: Each pair of segments joined by a single space character.
|
||||
*/
|
||||
QueryCollectionFormat["Ssv"] = " ";
|
||||
/**
|
||||
* TSV: Each pair of segments joined by a single tab character.
|
||||
*/
|
||||
QueryCollectionFormat["Tsv"] = "\t";
|
||||
/**
|
||||
* Pipes: Each pair of segments joined by a single pipe character.
|
||||
*/
|
||||
QueryCollectionFormat["Pipes"] = "|";
|
||||
/**
|
||||
* Denotes this is an array of values that should be passed to the server in multiple key/value pairs, e.g. `?queryParam=value1&queryParam=value2`
|
||||
*/
|
||||
QueryCollectionFormat["Multi"] = "Multi";
|
||||
})(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {}));
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Default options for the cycler if none are provided
|
||||
const DEFAULT_CYCLER_OPTIONS = {
|
||||
forcedRefreshWindowInMs: 1000,
|
||||
retryIntervalInMs: 3000,
|
||||
refreshWindowInMs: 1000 * 60 * 2, // Start refreshing 2m before expiry
|
||||
};
|
||||
/**
|
||||
* Converts an an unreliable access token getter (which may resolve with null)
|
||||
* into an AccessTokenGetter by retrying the unreliable getter in a regular
|
||||
* interval.
|
||||
*
|
||||
* @param getAccessToken - a function that produces a promise of an access
|
||||
* token that may fail by returning null
|
||||
* @param retryIntervalInMs - the time (in milliseconds) to wait between retry
|
||||
* attempts
|
||||
* @param timeoutInMs - the timestamp after which the refresh attempt will fail,
|
||||
* throwing an exception
|
||||
* @returns - a promise that, if it resolves, will resolve with an access token
|
||||
*/
|
||||
async function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {
|
||||
// This wrapper handles exceptions gracefully as long as we haven't exceeded
|
||||
// the timeout.
|
||||
async function tryGetAccessToken() {
|
||||
if (Date.now() < timeoutInMs) {
|
||||
try {
|
||||
return await getAccessToken();
|
||||
}
|
||||
catch (_a) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
const finalToken = await getAccessToken();
|
||||
// Timeout is up, so throw if it's still null
|
||||
if (finalToken === null) {
|
||||
throw new Error("Failed to refresh access token.");
|
||||
}
|
||||
return finalToken;
|
||||
}
|
||||
}
|
||||
let token = await tryGetAccessToken();
|
||||
while (token === null) {
|
||||
await delay(retryIntervalInMs);
|
||||
token = await tryGetAccessToken();
|
||||
}
|
||||
return token;
|
||||
}
|
||||
/**
|
||||
* Creates a token cycler from a credential, scopes, and optional settings.
|
||||
*
|
||||
* A token cycler represents a way to reliably retrieve a valid access token
|
||||
* from a TokenCredential. It will handle initializing the token, refreshing it
|
||||
* when it nears expiration, and synchronizes refresh attempts to avoid
|
||||
* concurrency hazards.
|
||||
*
|
||||
* @param credential - the underlying TokenCredential that provides the access
|
||||
* token
|
||||
* @param scopes - the scopes to request authorization for
|
||||
* @param tokenCyclerOptions - optionally override default settings for the cycler
|
||||
*
|
||||
* @returns - a function that reliably produces a valid access token
|
||||
*/
|
||||
function createTokenCycler(credential, scopes, tokenCyclerOptions) {
|
||||
let refreshWorker = null;
|
||||
let token = null;
|
||||
const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);
|
||||
/**
|
||||
* This little holder defines several predicates that we use to construct
|
||||
* the rules of refreshing the token.
|
||||
*/
|
||||
const cycler = {
|
||||
/**
|
||||
* Produces true if a refresh job is currently in progress.
|
||||
*/
|
||||
get isRefreshing() {
|
||||
return refreshWorker !== null;
|
||||
},
|
||||
/**
|
||||
* Produces true if the cycler SHOULD refresh (we are within the refresh
|
||||
* window and not already refreshing)
|
||||
*/
|
||||
get shouldRefresh() {
|
||||
var _a;
|
||||
return (!cycler.isRefreshing &&
|
||||
((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now());
|
||||
},
|
||||
/**
|
||||
* Produces true if the cycler MUST refresh (null or nearly-expired
|
||||
* token).
|
||||
*/
|
||||
get mustRefresh() {
|
||||
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
|
||||
},
|
||||
};
|
||||
/**
|
||||
* Starts a refresh job or returns the existing job if one is already
|
||||
* running.
|
||||
*/
|
||||
function refresh(getTokenOptions) {
|
||||
var _a;
|
||||
if (!cycler.isRefreshing) {
|
||||
// We bind `scopes` here to avoid passing it around a lot
|
||||
const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);
|
||||
// Take advantage of promise chaining to insert an assignment to `token`
|
||||
// before the refresh can be considered done.
|
||||
refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,
|
||||
// If we don't have a token, then we should timeout immediately
|
||||
(_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now())
|
||||
.then((_token) => {
|
||||
refreshWorker = null;
|
||||
token = _token;
|
||||
return token;
|
||||
})
|
||||
.catch((reason) => {
|
||||
// We also should reset the refresher if we enter a failed state. All
|
||||
// existing awaiters will throw, but subsequent requests will start a
|
||||
// new retry chain.
|
||||
refreshWorker = null;
|
||||
token = null;
|
||||
throw reason;
|
||||
});
|
||||
}
|
||||
return refreshWorker;
|
||||
}
|
||||
return async (tokenOptions) => {
|
||||
//
|
||||
// Simple rules:
|
||||
// - If we MUST refresh, then return the refresh task, blocking
|
||||
// the pipeline until a token is available.
|
||||
// - If we SHOULD refresh, then run refresh but don't return it
|
||||
// (we can still use the cached token).
|
||||
// - Return the token, since it's fine if we didn't return in
|
||||
// step 1.
|
||||
//
|
||||
if (cycler.mustRefresh)
|
||||
return refresh(tokenOptions);
|
||||
if (cycler.shouldRefresh) {
|
||||
refresh(tokenOptions);
|
||||
}
|
||||
return token;
|
||||
};
|
||||
}
|
||||
// #endregion
|
||||
/**
|
||||
* Creates a new factory for a RequestPolicy that applies a bearer token to
|
||||
* the requests' `Authorization` headers.
|
||||
*
|
||||
* @param credential - The TokenCredential implementation that can supply the bearer token.
|
||||
* @param scopes - The scopes for which the bearer token applies.
|
||||
*/
|
||||
function bearerTokenAuthenticationPolicy(credential, scopes) {
|
||||
// This simple function encapsulates the entire process of reliably retrieving the token
|
||||
const getToken = createTokenCycler(credential, scopes /* , options */);
|
||||
class BearerTokenAuthenticationPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
}
|
||||
async sendRequest(webResource) {
|
||||
if (!webResource.url.toLowerCase().startsWith("https://")) {
|
||||
throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");
|
||||
}
|
||||
const { token } = await getToken({
|
||||
abortSignal: webResource.abortSignal,
|
||||
tracingOptions: {
|
||||
tracingContext: webResource.tracingContext,
|
||||
},
|
||||
});
|
||||
webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);
|
||||
return this._nextPolicy.sendRequest(webResource);
|
||||
}
|
||||
}
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new BearerTokenAuthenticationPolicy(nextPolicy, options);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Returns a request policy factory that can be used to create an instance of
|
||||
* {@link DisableResponseDecompressionPolicy}.
|
||||
*/
|
||||
function disableResponseDecompressionPolicy() {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new DisableResponseDecompressionPolicy(nextPolicy, options);
|
||||
},
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy to disable response decompression according to Accept-Encoding header
|
||||
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
|
||||
*/
|
||||
class DisableResponseDecompressionPolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of DisableResponseDecompressionPolicy.
|
||||
*
|
||||
* @param nextPolicy -
|
||||
* @param options -
|
||||
*/
|
||||
// The parent constructor is protected.
|
||||
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor */
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
}
|
||||
/**
|
||||
* Sends out request.
|
||||
*
|
||||
* @param request -
|
||||
* @returns
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
request.decompressResponse = false;
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Creates a policy that assigns a unique request id to outgoing requests.
|
||||
* @param requestIdHeaderName - The name of the header to use when assigning the unique id to the request.
|
||||
*/
|
||||
function generateClientRequestIdPolicy(requestIdHeaderName = "x-ms-client-request-id") {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new GenerateClientRequestIdPolicy(nextPolicy, options, requestIdHeaderName);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
class GenerateClientRequestIdPolicy extends BaseRequestPolicy {
|
||||
@@ -57432,198 +56810,138 @@ class GenerateClientRequestIdPolicy extends BaseRequestPolicy {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
let cachedHttpClient;
|
||||
function getCachedDefaultHttpClient() {
|
||||
if (!cachedHttpClient) {
|
||||
cachedHttpClient = new NodeFetchHttpClient();
|
||||
}
|
||||
return cachedHttpClient;
|
||||
function getDefaultUserAgentKey() {
|
||||
return Constants.HeaderConstants.USER_AGENT;
|
||||
}
|
||||
function getPlatformSpecificData() {
|
||||
const runtimeInfo = {
|
||||
key: "Node",
|
||||
value: process.version
|
||||
};
|
||||
const osInfo = {
|
||||
key: "OS",
|
||||
value: `(${os.arch()}-${os.type()}-${os.release()})`
|
||||
};
|
||||
return [runtimeInfo, osInfo];
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function ndJsonPolicy() {
|
||||
function getRuntimeInfo() {
|
||||
const msRestRuntime = {
|
||||
key: "core-http",
|
||||
value: Constants.coreHttpVersion
|
||||
};
|
||||
return [msRestRuntime];
|
||||
}
|
||||
function getUserAgentString(telemetryInfo, keySeparator = " ", valueSeparator = "/") {
|
||||
return telemetryInfo
|
||||
.map((info) => {
|
||||
const value = info.value ? `${valueSeparator}${info.value}` : "";
|
||||
return `${info.key}${value}`;
|
||||
})
|
||||
.join(keySeparator);
|
||||
}
|
||||
const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
|
||||
function getDefaultUserAgentValue() {
|
||||
const runtimeInfo = getRuntimeInfo();
|
||||
const platformSpecificData = getPlatformSpecificData();
|
||||
const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
|
||||
return userAgent;
|
||||
}
|
||||
function userAgentPolicy(userAgentData) {
|
||||
const key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null
|
||||
? getDefaultUserAgentKey()
|
||||
: userAgentData.key;
|
||||
const value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null
|
||||
? getDefaultUserAgentValue()
|
||||
: userAgentData.value;
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new NdJsonPolicy(nextPolicy, options);
|
||||
},
|
||||
return new UserAgentPolicy(nextPolicy, options, key, value);
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* NdJsonPolicy that formats a JSON array as newline-delimited JSON
|
||||
*/
|
||||
class NdJsonPolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of KeepAlivePolicy.
|
||||
*/
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
class UserAgentPolicy extends BaseRequestPolicy {
|
||||
constructor(_nextPolicy, _options, headerKey, headerValue) {
|
||||
super(_nextPolicy, _options);
|
||||
this._nextPolicy = _nextPolicy;
|
||||
this._options = _options;
|
||||
this.headerKey = headerKey;
|
||||
this.headerValue = headerValue;
|
||||
}
|
||||
/**
|
||||
* Sends a request.
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
// There currently isn't a good way to bypass the serializer
|
||||
if (typeof request.body === "string" && request.body.startsWith("[")) {
|
||||
const body = JSON.parse(request.body);
|
||||
if (Array.isArray(body)) {
|
||||
request.body = body.map((item) => JSON.stringify(item) + "\n").join("");
|
||||
}
|
||||
}
|
||||
sendRequest(request) {
|
||||
this.addUserAgentHeader(request);
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
addUserAgentHeader(request) {
|
||||
if (!request.headers) {
|
||||
request.headers = new HttpHeaders();
|
||||
}
|
||||
if (!request.headers.get(this.headerKey) && this.headerValue) {
|
||||
request.headers.set(this.headerKey, this.headerValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Stores the patterns specified in NO_PROXY environment variable.
|
||||
* @internal
|
||||
* Methods that are allowed to follow redirects 301 and 302
|
||||
*/
|
||||
const globalNoProxyList = [];
|
||||
let noProxyListLoaded = false;
|
||||
/** A cache of whether a host should bypass the proxy. */
|
||||
const globalBypassedMap = new Map();
|
||||
function loadEnvironmentProxyValue() {
|
||||
if (!process) {
|
||||
return undefined;
|
||||
}
|
||||
const httpsProxy = getEnvironmentValue(Constants.HTTPS_PROXY);
|
||||
const allProxy = getEnvironmentValue(Constants.ALL_PROXY);
|
||||
const httpProxy = getEnvironmentValue(Constants.HTTP_PROXY);
|
||||
return httpsProxy || allProxy || httpProxy;
|
||||
}
|
||||
/**
|
||||
* Check whether the host of a given `uri` matches any pattern in the no proxy list.
|
||||
* If there's a match, any request sent to the same host shouldn't have the proxy settings set.
|
||||
* This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
|
||||
*/
|
||||
function isBypassed(uri, noProxyList, bypassedMap) {
|
||||
if (noProxyList.length === 0) {
|
||||
return false;
|
||||
}
|
||||
const host = URLBuilder.parse(uri).getHost();
|
||||
if (bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.has(host)) {
|
||||
return bypassedMap.get(host);
|
||||
}
|
||||
let isBypassedFlag = false;
|
||||
for (const pattern of noProxyList) {
|
||||
if (pattern[0] === ".") {
|
||||
// This should match either domain it self or any subdomain or host
|
||||
// .foo.com will match foo.com it self or *.foo.com
|
||||
if (host.endsWith(pattern)) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
else {
|
||||
if (host.length === pattern.length - 1 && host === pattern.slice(1)) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (host === pattern) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.set(host, isBypassedFlag);
|
||||
return isBypassedFlag;
|
||||
}
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
function loadNoProxy() {
|
||||
const noProxy = getEnvironmentValue(Constants.NO_PROXY);
|
||||
noProxyListLoaded = true;
|
||||
if (noProxy) {
|
||||
return noProxy
|
||||
.split(",")
|
||||
.map((item) => item.trim())
|
||||
.filter((item) => item.length);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
/**
|
||||
* Converts a given URL of a proxy server into `ProxySettings` or attempts to retrieve `ProxySettings` from the current environment if one is not passed.
|
||||
* @param proxyUrl - URL of the proxy
|
||||
* @returns The default proxy settings, or undefined.
|
||||
*/
|
||||
function getDefaultProxySettings(proxyUrl) {
|
||||
if (!proxyUrl) {
|
||||
proxyUrl = loadEnvironmentProxyValue();
|
||||
if (!proxyUrl) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
const { username, password, urlWithoutAuth } = extractAuthFromUrl(proxyUrl);
|
||||
const parsedUrl = URLBuilder.parse(urlWithoutAuth);
|
||||
const schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : "";
|
||||
const allowedRedirect = ["GET", "HEAD"];
|
||||
const DefaultRedirectOptions = {
|
||||
handleRedirects: true,
|
||||
maxRetries: 20
|
||||
};
|
||||
function redirectPolicy(maximumRetries = 20) {
|
||||
return {
|
||||
host: schema + parsedUrl.getHost(),
|
||||
port: Number.parseInt(parsedUrl.getPort() || "80"),
|
||||
username,
|
||||
password,
|
||||
create: (nextPolicy, options) => {
|
||||
return new RedirectPolicy(nextPolicy, options, maximumRetries);
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that allows one to apply proxy settings to all requests.
|
||||
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
|
||||
* or HTTP_PROXY environment variables.
|
||||
* @param proxySettings - ProxySettings to use on each request.
|
||||
* @param options - additional settings, for example, custom NO_PROXY patterns
|
||||
*/
|
||||
function proxyPolicy(proxySettings, options) {
|
||||
if (!proxySettings) {
|
||||
proxySettings = getDefaultProxySettings();
|
||||
}
|
||||
if (!noProxyListLoaded) {
|
||||
globalNoProxyList.push(...loadNoProxy());
|
||||
}
|
||||
return {
|
||||
create: (nextPolicy, requestPolicyOptions) => {
|
||||
return new ProxyPolicy(nextPolicy, requestPolicyOptions, proxySettings, options === null || options === void 0 ? void 0 : options.customNoProxyList);
|
||||
},
|
||||
};
|
||||
}
|
||||
function extractAuthFromUrl(url) {
|
||||
const atIndex = url.indexOf("@");
|
||||
if (atIndex === -1) {
|
||||
return { urlWithoutAuth: url };
|
||||
}
|
||||
const schemeIndex = url.indexOf("://");
|
||||
const authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0;
|
||||
const auth = url.substring(authStart, atIndex);
|
||||
const colonIndex = auth.indexOf(":");
|
||||
const hasPassword = colonIndex !== -1;
|
||||
const username = hasPassword ? auth.substring(0, colonIndex) : auth;
|
||||
const password = hasPassword ? auth.substring(colonIndex + 1) : undefined;
|
||||
const urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1);
|
||||
return {
|
||||
username,
|
||||
password,
|
||||
urlWithoutAuth,
|
||||
};
|
||||
}
|
||||
class ProxyPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, proxySettings, customNoProxyList) {
|
||||
class RedirectPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, maxRetries = 20) {
|
||||
super(nextPolicy, options);
|
||||
this.proxySettings = proxySettings;
|
||||
this.customNoProxyList = customNoProxyList;
|
||||
this.maxRetries = maxRetries;
|
||||
}
|
||||
sendRequest(request) {
|
||||
var _a;
|
||||
if (!request.proxySettings &&
|
||||
!isBypassed(request.url, (_a = this.customNoProxyList) !== null && _a !== void 0 ? _a : globalNoProxyList, this.customNoProxyList ? undefined : globalBypassedMap)) {
|
||||
request.proxySettings = this.proxySettings;
|
||||
}
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
return this._nextPolicy
|
||||
.sendRequest(request)
|
||||
.then((response) => handleRedirect(this, response, 0));
|
||||
}
|
||||
}
|
||||
function handleRedirect(policy, response, currentRetries) {
|
||||
const { request, status } = response;
|
||||
const locationHeader = response.headers.get("location");
|
||||
if (locationHeader &&
|
||||
(status === 300 ||
|
||||
(status === 301 && allowedRedirect.includes(request.method)) ||
|
||||
(status === 302 && allowedRedirect.includes(request.method)) ||
|
||||
(status === 303 && request.method === "POST") ||
|
||||
status === 307) &&
|
||||
(!policy.maxRetries || currentRetries < policy.maxRetries)) {
|
||||
const builder = URLBuilder.parse(request.url);
|
||||
builder.setPath(locationHeader);
|
||||
request.url = builder.toString();
|
||||
// POST request with Status code 303 should be converted into a
|
||||
// redirected GET request if the redirect url is present in the location header
|
||||
if (status === 303) {
|
||||
request.method = "GET";
|
||||
delete request.body;
|
||||
}
|
||||
return policy._nextPolicy
|
||||
.sendRequest(request)
|
||||
.then((res) => handleRedirect(policy, res, currentRetries + 1));
|
||||
}
|
||||
return Promise.resolve(response);
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function rpRegistrationPolicy(retryTimeout = 30) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new RPRegistrationPolicy(nextPolicy, options, retryTimeout);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
class RPRegistrationPolicy extends BaseRequestPolicy {
|
||||
@@ -57768,52 +57086,193 @@ async function getRegistrationStatus(policy, url, originalRequest) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Default options for the cycler if none are provided
|
||||
const DEFAULT_CYCLER_OPTIONS = {
|
||||
forcedRefreshWindowInMs: 1000,
|
||||
retryIntervalInMs: 3000,
|
||||
refreshWindowInMs: 1000 * 60 * 2 // Start refreshing 2m before expiry
|
||||
};
|
||||
/**
|
||||
* Creates a policy that signs outgoing requests by calling to the provided `authenticationProvider`'s `signRequest` method.
|
||||
* @param authenticationProvider - The authentication provider.
|
||||
* @returns An instance of the {@link SigningPolicy}.
|
||||
* Converts an an unreliable access token getter (which may resolve with null)
|
||||
* into an AccessTokenGetter by retrying the unreliable getter in a regular
|
||||
* interval.
|
||||
*
|
||||
* @param getAccessToken - a function that produces a promise of an access
|
||||
* token that may fail by returning null
|
||||
* @param retryIntervalInMs - the time (in milliseconds) to wait between retry
|
||||
* attempts
|
||||
* @param timeoutInMs - the timestamp after which the refresh attempt will fail,
|
||||
* throwing an exception
|
||||
* @returns - a promise that, if it resolves, will resolve with an access token
|
||||
*/
|
||||
function signingPolicy(authenticationProvider) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new SigningPolicy(nextPolicy, options, authenticationProvider);
|
||||
},
|
||||
};
|
||||
async function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {
|
||||
// This wrapper handles exceptions gracefully as long as we haven't exceeded
|
||||
// the timeout.
|
||||
async function tryGetAccessToken() {
|
||||
if (Date.now() < timeoutInMs) {
|
||||
try {
|
||||
return await getAccessToken();
|
||||
}
|
||||
catch (_a) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
const finalToken = await getAccessToken();
|
||||
// Timeout is up, so throw if it's still null
|
||||
if (finalToken === null) {
|
||||
throw new Error("Failed to refresh access token.");
|
||||
}
|
||||
return finalToken;
|
||||
}
|
||||
}
|
||||
let token = await tryGetAccessToken();
|
||||
while (token === null) {
|
||||
await delay(retryIntervalInMs);
|
||||
token = await tryGetAccessToken();
|
||||
}
|
||||
return token;
|
||||
}
|
||||
/**
|
||||
* A policy that signs outgoing requests by calling to the provided `authenticationProvider`'s `signRequest` method.
|
||||
* Creates a token cycler from a credential, scopes, and optional settings.
|
||||
*
|
||||
* A token cycler represents a way to reliably retrieve a valid access token
|
||||
* from a TokenCredential. It will handle initializing the token, refreshing it
|
||||
* when it nears expiration, and synchronizes refresh attempts to avoid
|
||||
* concurrency hazards.
|
||||
*
|
||||
* @param credential - the underlying TokenCredential that provides the access
|
||||
* token
|
||||
* @param scopes - the scopes to request authorization for
|
||||
* @param tokenCyclerOptions - optionally override default settings for the cycler
|
||||
*
|
||||
* @returns - a function that reliably produces a valid access token
|
||||
*/
|
||||
class SigningPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, authenticationProvider) {
|
||||
super(nextPolicy, options);
|
||||
this.authenticationProvider = authenticationProvider;
|
||||
function createTokenCycler(credential, scopes, tokenCyclerOptions) {
|
||||
let refreshWorker = null;
|
||||
let token = null;
|
||||
const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);
|
||||
/**
|
||||
* This little holder defines several predicates that we use to construct
|
||||
* the rules of refreshing the token.
|
||||
*/
|
||||
const cycler = {
|
||||
/**
|
||||
* Produces true if a refresh job is currently in progress.
|
||||
*/
|
||||
get isRefreshing() {
|
||||
return refreshWorker !== null;
|
||||
},
|
||||
/**
|
||||
* Produces true if the cycler SHOULD refresh (we are within the refresh
|
||||
* window and not already refreshing)
|
||||
*/
|
||||
get shouldRefresh() {
|
||||
var _a;
|
||||
return (!cycler.isRefreshing &&
|
||||
((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now());
|
||||
},
|
||||
/**
|
||||
* Produces true if the cycler MUST refresh (null or nearly-expired
|
||||
* token).
|
||||
*/
|
||||
get mustRefresh() {
|
||||
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Starts a refresh job or returns the existing job if one is already
|
||||
* running.
|
||||
*/
|
||||
function refresh(getTokenOptions) {
|
||||
var _a;
|
||||
if (!cycler.isRefreshing) {
|
||||
// We bind `scopes` here to avoid passing it around a lot
|
||||
const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);
|
||||
// Take advantage of promise chaining to insert an assignment to `token`
|
||||
// before the refresh can be considered done.
|
||||
refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,
|
||||
// If we don't have a token, then we should timeout immediately
|
||||
(_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now())
|
||||
.then((_token) => {
|
||||
refreshWorker = null;
|
||||
token = _token;
|
||||
return token;
|
||||
})
|
||||
.catch((reason) => {
|
||||
// We also should reset the refresher if we enter a failed state. All
|
||||
// existing awaiters will throw, but subsequent requests will start a
|
||||
// new retry chain.
|
||||
refreshWorker = null;
|
||||
token = null;
|
||||
throw reason;
|
||||
});
|
||||
}
|
||||
return refreshWorker;
|
||||
}
|
||||
signRequest(request) {
|
||||
return this.authenticationProvider.signRequest(request);
|
||||
}
|
||||
sendRequest(request) {
|
||||
return this.signRequest(request).then((nextRequest) => this._nextPolicy.sendRequest(nextRequest));
|
||||
return async (tokenOptions) => {
|
||||
//
|
||||
// Simple rules:
|
||||
// - If we MUST refresh, then return the refresh task, blocking
|
||||
// the pipeline until a token is available.
|
||||
// - If we SHOULD refresh, then run refresh but don't return it
|
||||
// (we can still use the cached token).
|
||||
// - Return the token, since it's fine if we didn't return in
|
||||
// step 1.
|
||||
//
|
||||
if (cycler.mustRefresh)
|
||||
return refresh(tokenOptions);
|
||||
if (cycler.shouldRefresh) {
|
||||
refresh(tokenOptions);
|
||||
}
|
||||
return token;
|
||||
};
|
||||
}
|
||||
// #endregion
|
||||
/**
|
||||
* Creates a new factory for a RequestPolicy that applies a bearer token to
|
||||
* the requests' `Authorization` headers.
|
||||
*
|
||||
* @param credential - The TokenCredential implementation that can supply the bearer token.
|
||||
* @param scopes - The scopes for which the bearer token applies.
|
||||
*/
|
||||
function bearerTokenAuthenticationPolicy(credential, scopes) {
|
||||
// This simple function encapsulates the entire process of reliably retrieving the token
|
||||
const getToken = createTokenCycler(credential, scopes /* , options */);
|
||||
class BearerTokenAuthenticationPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
}
|
||||
async sendRequest(webResource) {
|
||||
if (!webResource.url.toLowerCase().startsWith("https://")) {
|
||||
throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");
|
||||
}
|
||||
const { token } = await getToken({
|
||||
abortSignal: webResource.abortSignal,
|
||||
tracingOptions: {
|
||||
tracingContext: webResource.tracingContext
|
||||
}
|
||||
});
|
||||
webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);
|
||||
return this._nextPolicy.sendRequest(webResource);
|
||||
}
|
||||
}
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new BearerTokenAuthenticationPolicy(nextPolicy, options);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* A policy that retries when there's a system error, identified by the codes "ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNREFUSED", "ECONNRESET" or "ENOENT".
|
||||
* @param retryCount - Maximum number of retries.
|
||||
* @param retryInterval - The client retry interval, in milliseconds.
|
||||
* @param minRetryInterval - The minimum retry interval, in milliseconds.
|
||||
* @param maxRetryInterval - The maximum retry interval, in milliseconds.
|
||||
* @returns An instance of the {@link SystemErrorRetryPolicy}
|
||||
*/
|
||||
function systemErrorRetryPolicy(retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that retries when there's a system error, identified by the codes "ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNREFUSED", "ECONNRESET" or "ENOENT".
|
||||
* @param retryCount - The client retry count.
|
||||
* @param retryInterval - The client retry interval, in milliseconds.
|
||||
* @param minRetryInterval - The minimum retry interval, in milliseconds.
|
||||
@@ -57834,10 +57293,10 @@ class SystemErrorRetryPolicy extends BaseRequestPolicy {
|
||||
sendRequest(request) {
|
||||
return this._nextPolicy
|
||||
.sendRequest(request.clone())
|
||||
.catch((error) => retry(this, request, error.response, error));
|
||||
.catch((error) => retry$1(this, request, error.response, error));
|
||||
}
|
||||
}
|
||||
async function retry(policy, request, operationResponse, err, retryData) {
|
||||
async function retry$1(policy, request, operationResponse, err, retryData) {
|
||||
retryData = updateRetryData(policy, retryData, err);
|
||||
function shouldPolicyRetry(_response, error) {
|
||||
if (error &&
|
||||
@@ -57858,7 +57317,7 @@ async function retry(policy, request, operationResponse, err, retryData) {
|
||||
return policy._nextPolicy.sendRequest(request.clone());
|
||||
}
|
||||
catch (nestedErr) {
|
||||
return retry(policy, request, operationResponse, nestedErr, retryData);
|
||||
return retry$1(policy, request, operationResponse, nestedErr, retryData);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -57870,6 +57329,155 @@ async function retry(policy, request, operationResponse, err, retryData) {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
(function (QueryCollectionFormat) {
|
||||
QueryCollectionFormat["Csv"] = ",";
|
||||
QueryCollectionFormat["Ssv"] = " ";
|
||||
QueryCollectionFormat["Tsv"] = "\t";
|
||||
QueryCollectionFormat["Pipes"] = "|";
|
||||
QueryCollectionFormat["Multi"] = "Multi";
|
||||
})(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {}));
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Stores the patterns specified in NO_PROXY environment variable.
|
||||
* @internal
|
||||
*/
|
||||
const globalNoProxyList = [];
|
||||
let noProxyListLoaded = false;
|
||||
/** A cache of whether a host should bypass the proxy. */
|
||||
const globalBypassedMap = new Map();
|
||||
function loadEnvironmentProxyValue() {
|
||||
if (!process) {
|
||||
return undefined;
|
||||
}
|
||||
const httpsProxy = getEnvironmentValue(Constants.HTTPS_PROXY);
|
||||
const allProxy = getEnvironmentValue(Constants.ALL_PROXY);
|
||||
const httpProxy = getEnvironmentValue(Constants.HTTP_PROXY);
|
||||
return httpsProxy || allProxy || httpProxy;
|
||||
}
|
||||
/**
|
||||
* Check whether the host of a given `uri` matches any pattern in the no proxy list.
|
||||
* If there's a match, any request sent to the same host shouldn't have the proxy settings set.
|
||||
* This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
|
||||
*/
|
||||
function isBypassed(uri, noProxyList, bypassedMap) {
|
||||
if (noProxyList.length === 0) {
|
||||
return false;
|
||||
}
|
||||
const host = URLBuilder.parse(uri).getHost();
|
||||
if (bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.has(host)) {
|
||||
return bypassedMap.get(host);
|
||||
}
|
||||
let isBypassedFlag = false;
|
||||
for (const pattern of noProxyList) {
|
||||
if (pattern[0] === ".") {
|
||||
// This should match either domain it self or any subdomain or host
|
||||
// .foo.com will match foo.com it self or *.foo.com
|
||||
if (host.endsWith(pattern)) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
else {
|
||||
if (host.length === pattern.length - 1 && host === pattern.slice(1)) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (host === pattern) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.set(host, isBypassedFlag);
|
||||
return isBypassedFlag;
|
||||
}
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
function loadNoProxy() {
|
||||
const noProxy = getEnvironmentValue(Constants.NO_PROXY);
|
||||
noProxyListLoaded = true;
|
||||
if (noProxy) {
|
||||
return noProxy
|
||||
.split(",")
|
||||
.map((item) => item.trim())
|
||||
.filter((item) => item.length);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
function getDefaultProxySettings(proxyUrl) {
|
||||
if (!proxyUrl) {
|
||||
proxyUrl = loadEnvironmentProxyValue();
|
||||
if (!proxyUrl) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
const { username, password, urlWithoutAuth } = extractAuthFromUrl(proxyUrl);
|
||||
const parsedUrl = URLBuilder.parse(urlWithoutAuth);
|
||||
const schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : "";
|
||||
return {
|
||||
host: schema + parsedUrl.getHost(),
|
||||
port: Number.parseInt(parsedUrl.getPort() || "80"),
|
||||
username,
|
||||
password
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that allows one to apply proxy settings to all requests.
|
||||
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
|
||||
* or HTTP_PROXY environment variables.
|
||||
* @param proxySettings - ProxySettings to use on each request.
|
||||
* @param options - additional settings, for example, custom NO_PROXY patterns
|
||||
*/
|
||||
function proxyPolicy(proxySettings, options) {
|
||||
if (!proxySettings) {
|
||||
proxySettings = getDefaultProxySettings();
|
||||
}
|
||||
if (!noProxyListLoaded) {
|
||||
globalNoProxyList.push(...loadNoProxy());
|
||||
}
|
||||
return {
|
||||
create: (nextPolicy, requestPolicyOptions) => {
|
||||
return new ProxyPolicy(nextPolicy, requestPolicyOptions, proxySettings, options === null || options === void 0 ? void 0 : options.customNoProxyList);
|
||||
}
|
||||
};
|
||||
}
|
||||
function extractAuthFromUrl(url) {
|
||||
const atIndex = url.indexOf("@");
|
||||
if (atIndex === -1) {
|
||||
return { urlWithoutAuth: url };
|
||||
}
|
||||
const schemeIndex = url.indexOf("://");
|
||||
const authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0;
|
||||
const auth = url.substring(authStart, atIndex);
|
||||
const colonIndex = auth.indexOf(":");
|
||||
const hasPassword = colonIndex !== -1;
|
||||
const username = hasPassword ? auth.substring(0, colonIndex) : auth;
|
||||
const password = hasPassword ? auth.substring(colonIndex + 1) : undefined;
|
||||
const urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1);
|
||||
return {
|
||||
username,
|
||||
password,
|
||||
urlWithoutAuth
|
||||
};
|
||||
}
|
||||
class ProxyPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, proxySettings, customNoProxyList) {
|
||||
super(nextPolicy, options);
|
||||
this.proxySettings = proxySettings;
|
||||
this.customNoProxyList = customNoProxyList;
|
||||
}
|
||||
sendRequest(request) {
|
||||
var _a;
|
||||
if (!request.proxySettings &&
|
||||
!isBypassed(request.url, (_a = this.customNoProxyList) !== null && _a !== void 0 ? _a : globalNoProxyList, this.customNoProxyList ? undefined : globalBypassedMap)) {
|
||||
request.proxySettings = this.proxySettings;
|
||||
}
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
@@ -57879,28 +57487,15 @@ const DEFAULT_CLIENT_MAX_RETRY_COUNT = 3;
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const StatusCodes = Constants.HttpConstants.StatusCodes;
|
||||
/**
|
||||
* Creates a policy that re-sends the request if the response indicates the request failed because of throttling reasons.
|
||||
* For example, if the response contains a `Retry-After` header, it will retry sending the request based on the value of that header.
|
||||
*
|
||||
* To learn more, please refer to
|
||||
* https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,
|
||||
* https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and
|
||||
* https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors
|
||||
* @returns
|
||||
*/
|
||||
function throttlingRetryPolicy() {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new ThrottlingRetryPolicy(nextPolicy, options);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
const StandardAbortMessage = "The operation was aborted.";
|
||||
const StandardAbortMessage$1 = "The operation was aborted.";
|
||||
/**
|
||||
* Creates a policy that re-sends the request if the response indicates the request failed because of throttling reasons.
|
||||
* For example, if the response contains a `Retry-After` header, it will retry sending the request based on the value of that header.
|
||||
*
|
||||
* To learn more, please refer to
|
||||
* https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,
|
||||
* https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and
|
||||
@@ -57931,10 +57526,10 @@ class ThrottlingRetryPolicy extends BaseRequestPolicy {
|
||||
this.numberOfRetries += 1;
|
||||
await delay(delayInMs, undefined, {
|
||||
abortSignal: httpRequest.abortSignal,
|
||||
abortErrorMsg: StandardAbortMessage,
|
||||
abortErrorMsg: StandardAbortMessage$1
|
||||
});
|
||||
if ((_a = httpRequest.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
||||
throw new abortController.AbortError(StandardAbortMessage);
|
||||
throw new abortController.AbortError(StandardAbortMessage$1);
|
||||
}
|
||||
if (this.numberOfRetries < DEFAULT_CLIENT_MAX_RETRY_COUNT) {
|
||||
return this.sendRequest(httpRequest);
|
||||
@@ -57968,26 +57563,77 @@ class ThrottlingRetryPolicy extends BaseRequestPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function signingPolicy(authenticationProvider) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new SigningPolicy(nextPolicy, options, authenticationProvider);
|
||||
}
|
||||
};
|
||||
}
|
||||
class SigningPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, authenticationProvider) {
|
||||
super(nextPolicy, options);
|
||||
this.authenticationProvider = authenticationProvider;
|
||||
}
|
||||
signRequest(request) {
|
||||
return this.authenticationProvider.signRequest(request);
|
||||
}
|
||||
sendRequest(request) {
|
||||
return this.signRequest(request).then((nextRequest) => this._nextPolicy.sendRequest(nextRequest));
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const DefaultKeepAliveOptions = {
|
||||
enable: true
|
||||
};
|
||||
function keepAlivePolicy(keepAliveOptions) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* KeepAlivePolicy is a policy used to control keep alive settings for every request.
|
||||
*/
|
||||
class KeepAlivePolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of KeepAlivePolicy.
|
||||
*
|
||||
* @param nextPolicy -
|
||||
* @param options -
|
||||
* @param keepAliveOptions -
|
||||
*/
|
||||
constructor(nextPolicy, options, keepAliveOptions) {
|
||||
super(nextPolicy, options);
|
||||
this.keepAliveOptions = keepAliveOptions;
|
||||
}
|
||||
/**
|
||||
* Sends out request.
|
||||
*
|
||||
* @param request -
|
||||
* @returns
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
request.keepAlive = this.keepAliveOptions.enable;
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const createSpan = coreTracing.createSpanFunction({
|
||||
packagePrefix: "",
|
||||
namespace: "",
|
||||
namespace: ""
|
||||
});
|
||||
/**
|
||||
* Creates a policy that wraps outgoing requests with a tracing span.
|
||||
* @param tracingOptions - Tracing options.
|
||||
* @returns An instance of the {@link TracingPolicy} class.
|
||||
*/
|
||||
function tracingPolicy(tracingOptions = {}) {
|
||||
return {
|
||||
create(nextPolicy, options) {
|
||||
return new TracingPolicy(nextPolicy, options, tracingOptions);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that wraps outgoing requests with a tracing span.
|
||||
*/
|
||||
class TracingPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, tracingOptions) {
|
||||
super(nextPolicy, options);
|
||||
@@ -58014,13 +57660,14 @@ class TracingPolicy extends BaseRequestPolicy {
|
||||
tryCreateSpan(request) {
|
||||
var _a;
|
||||
try {
|
||||
const path = URLBuilder.parse(request.url).getPath() || "/";
|
||||
// Passing spanOptions as part of tracingOptions to maintain compatibility @azure/core-tracing@preview.13 and earlier.
|
||||
// We can pass this as a separate parameter once we upgrade to the latest core-tracing.
|
||||
const { span } = createSpan(`HTTP ${request.method}`, {
|
||||
const { span } = createSpan(path, {
|
||||
tracingOptions: {
|
||||
spanOptions: Object.assign(Object.assign({}, request.spanOptions), { kind: coreTracing.SpanKind.CLIENT }),
|
||||
tracingContext: request.tracingContext,
|
||||
},
|
||||
tracingContext: request.tracingContext
|
||||
}
|
||||
});
|
||||
// If the span is not recording, don't do any more work.
|
||||
if (!span.isRecording()) {
|
||||
@@ -58034,7 +57681,7 @@ class TracingPolicy extends BaseRequestPolicy {
|
||||
span.setAttributes({
|
||||
"http.method": request.method,
|
||||
"http.url": request.url,
|
||||
requestId: request.requestId,
|
||||
requestId: request.requestId
|
||||
});
|
||||
if (this.userAgent) {
|
||||
span.setAttribute("http.user_agent", this.userAgent);
|
||||
@@ -58061,7 +57708,7 @@ class TracingPolicy extends BaseRequestPolicy {
|
||||
try {
|
||||
span.setStatus({
|
||||
code: coreTracing.SpanStatusCode.ERROR,
|
||||
message: err.message,
|
||||
message: err.message
|
||||
});
|
||||
if (err.statusCode) {
|
||||
span.setAttribute("http.status_code", err.statusCode);
|
||||
@@ -58080,7 +57727,7 @@ class TracingPolicy extends BaseRequestPolicy {
|
||||
span.setAttribute("serviceRequestId", serviceRequestId);
|
||||
}
|
||||
span.setStatus({
|
||||
code: coreTracing.SpanStatusCode.OK,
|
||||
code: coreTracing.SpanStatusCode.OK
|
||||
});
|
||||
span.end();
|
||||
}
|
||||
@@ -58090,6 +57737,88 @@ class TracingPolicy extends BaseRequestPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Returns a request policy factory that can be used to create an instance of
|
||||
* {@link DisableResponseDecompressionPolicy}.
|
||||
*/
|
||||
function disableResponseDecompressionPolicy() {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new DisableResponseDecompressionPolicy(nextPolicy, options);
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy to disable response decompression according to Accept-Encoding header
|
||||
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
|
||||
*/
|
||||
class DisableResponseDecompressionPolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of DisableResponseDecompressionPolicy.
|
||||
*
|
||||
* @param nextPolicy -
|
||||
* @param options -
|
||||
*/
|
||||
// The parent constructor is protected.
|
||||
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor */
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
}
|
||||
/**
|
||||
* Sends out request.
|
||||
*
|
||||
* @param request -
|
||||
* @returns
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
request.decompressResponse = false;
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function ndJsonPolicy() {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new NdJsonPolicy(nextPolicy, options);
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* NdJsonPolicy that formats a JSON array as newline-delimited JSON
|
||||
*/
|
||||
class NdJsonPolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of KeepAlivePolicy.
|
||||
*/
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
}
|
||||
/**
|
||||
* Sends a request.
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
// There currently isn't a good way to bypass the serializer
|
||||
if (typeof request.body === "string" && request.body.startsWith("[")) {
|
||||
const body = JSON.parse(request.body);
|
||||
if (Array.isArray(body)) {
|
||||
request.body = body.map((item) => JSON.stringify(item) + "\n").join("");
|
||||
}
|
||||
}
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
let cachedHttpClient;
|
||||
function getCachedDefaultHttpClient() {
|
||||
if (!cachedHttpClient) {
|
||||
cachedHttpClient = new NodeFetchHttpClient();
|
||||
}
|
||||
return cachedHttpClient;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* ServiceClient sends service requests and receives responses.
|
||||
@@ -58139,7 +57868,7 @@ class ServiceClient {
|
||||
bearerTokenPolicyFactory = bearerTokenAuthenticationPolicy(credentials, credentialScopes);
|
||||
}
|
||||
return bearerTokenPolicyFactory.create(nextPolicy, createOptions);
|
||||
},
|
||||
}
|
||||
};
|
||||
};
|
||||
authPolicyFactory = wrappedPolicyFactory();
|
||||
@@ -58374,7 +58103,7 @@ function serializeRequestBody(serviceClient, httpRequest, operationArguments, op
|
||||
const updatedOptions = {
|
||||
rootName: (_c = serializerOptions.rootName) !== null && _c !== void 0 ? _c : "",
|
||||
includeRoot: (_d = serializerOptions.includeRoot) !== null && _d !== void 0 ? _d : false,
|
||||
xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY,
|
||||
xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY
|
||||
};
|
||||
const xmlCharKey = serializerOptions.xmlCharKey;
|
||||
if (operationSpec.requestBody && operationSpec.requestBody.mapper) {
|
||||
@@ -58393,13 +58122,13 @@ function serializeRequestBody(serviceClient, httpRequest, operationArguments, op
|
||||
if (typeName === MapperType.Sequence) {
|
||||
httpRequest.body = stringifyXML(prepareXMLRootList(value, xmlElementName || xmlName || serializedName, xmlnsKey, xmlNamespace), {
|
||||
rootName: xmlName || serializedName,
|
||||
xmlCharKey,
|
||||
xmlCharKey
|
||||
});
|
||||
}
|
||||
else if (!isStream) {
|
||||
httpRequest.body = stringifyXML(value, {
|
||||
rootName: xmlName || serializedName,
|
||||
xmlCharKey,
|
||||
xmlCharKey
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -58483,12 +58212,6 @@ function createDefaultRequestPolicyFactories(authPolicyFactory, options) {
|
||||
factories.push(logPolicy({ logger: logger.info }));
|
||||
return factories;
|
||||
}
|
||||
/**
|
||||
* Creates an HTTP pipeline based on the given options.
|
||||
* @param pipelineOptions - Defines options that are used to configure policies in the HTTP pipeline for an SDK client.
|
||||
* @param authPolicyFactory - An optional authentication policy factory to use for signing requests.
|
||||
* @returns A set of options that can be passed to create a new {@link ServiceClient}.
|
||||
*/
|
||||
function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {
|
||||
const requestPolicyFactories = [];
|
||||
if (pipelineOptions.sendStreamingJson) {
|
||||
@@ -58527,7 +58250,7 @@ function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {
|
||||
}
|
||||
return {
|
||||
httpClient: pipelineOptions.httpClient,
|
||||
requestPolicyFactories,
|
||||
requestPolicyFactories
|
||||
};
|
||||
}
|
||||
function getOperationArgumentValueFromParameter(serviceClient, operationArguments, parameter, serializer) {
|
||||
@@ -58603,18 +58326,12 @@ function getPropertyFromParameterPath(parent, parameterPath) {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Parses an {@link HttpOperationResponse} into a normalized HTTP response object ({@link RestResponse}).
|
||||
* @param _response - Wrapper object for http response.
|
||||
* @param responseSpec - Mappers for how to parse the response properties.
|
||||
* @returns - A normalized response object.
|
||||
*/
|
||||
function flattenResponse(_response, responseSpec) {
|
||||
const parsedHeaders = _response.parsedHeaders;
|
||||
const bodyMapper = responseSpec && responseSpec.bodyMapper;
|
||||
const addOperationResponse = (obj) => {
|
||||
return Object.defineProperty(obj, "_response", {
|
||||
value: _response,
|
||||
value: _response
|
||||
});
|
||||
};
|
||||
if (bodyMapper) {
|
||||
@@ -58700,16 +58417,9 @@ class ExpiringAccessTokenCache {
|
||||
this.cachedToken = undefined;
|
||||
this.tokenRefreshBufferMs = tokenRefreshBufferMs;
|
||||
}
|
||||
/**
|
||||
* Saves an access token into the internal in-memory cache.
|
||||
* @param accessToken - Access token or undefined to clear the cache.
|
||||
*/
|
||||
setCachedToken(accessToken) {
|
||||
this.cachedToken = accessToken;
|
||||
}
|
||||
/**
|
||||
* Returns the cached access token, or `undefined` if one is not cached or the cached one is expiring soon.
|
||||
*/
|
||||
getCachedToken() {
|
||||
if (this.cachedToken &&
|
||||
Date.now() + this.tokenRefreshBufferMs >= this.cachedToken.expiresOnTimestamp) {
|
||||
@@ -58768,9 +58478,6 @@ class AccessTokenRefresher {
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const HeaderConstants = Constants.HeaderConstants;
|
||||
const DEFAULT_AUTHORIZATION_SCHEME = "Basic";
|
||||
/**
|
||||
* A simple {@link ServiceClientCredential} that authenticates with a username and a password.
|
||||
*/
|
||||
class BasicAuthenticationCredentials {
|
||||
/**
|
||||
* Creates a new BasicAuthenticationCredentials object.
|
||||
@@ -58780,10 +58487,6 @@ class BasicAuthenticationCredentials {
|
||||
* @param authorizationScheme - The authorization scheme.
|
||||
*/
|
||||
constructor(userName, password, authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME) {
|
||||
/**
|
||||
* Authorization scheme. Defaults to "Basic".
|
||||
* More information about authorization schemes is available here: https://developer.mozilla.org/docs/Web/HTTP/Authentication#authentication_schemes
|
||||
*/
|
||||
this.authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME;
|
||||
if (userName === null || userName === undefined || typeof userName.valueOf() !== "string") {
|
||||
throw new Error("userName cannot be null or undefined and must be of type string.");
|
||||
@@ -58863,9 +58566,6 @@ class ApiKeyCredentials {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* A {@link TopicCredentials} object used for Azure Event Grid.
|
||||
*/
|
||||
class TopicCredentials extends ApiKeyCredentials {
|
||||
/**
|
||||
* Creates a new EventGrid TopicCredentials object.
|
||||
@@ -58878,8 +58578,8 @@ class TopicCredentials extends ApiKeyCredentials {
|
||||
}
|
||||
const options = {
|
||||
inHeader: {
|
||||
"aeg-sas-key": topicKey,
|
||||
},
|
||||
"aeg-sas-key": topicKey
|
||||
}
|
||||
};
|
||||
super(options);
|
||||
}
|
||||
@@ -58887,7 +58587,9 @@ class TopicCredentials extends ApiKeyCredentials {
|
||||
|
||||
Object.defineProperty(exports, 'isTokenCredential', {
|
||||
enumerable: true,
|
||||
get: function () { return coreAuth.isTokenCredential; }
|
||||
get: function () {
|
||||
return coreAuth.isTokenCredential;
|
||||
}
|
||||
});
|
||||
exports.AccessTokenRefresher = AccessTokenRefresher;
|
||||
exports.ApiKeyCredentials = ApiKeyCredentials;
|
||||
|
||||
Vendored
+1235
-1538
@@ -3419,15 +3419,14 @@ var DiagAPI = /** @class */ (function () {
|
||||
function DiagAPI() {
|
||||
function _logProxy(funcName) {
|
||||
return function () {
|
||||
var args = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
args[_i] = arguments[_i];
|
||||
}
|
||||
var logger = global_utils_1.getGlobal('diag');
|
||||
// shortcut if logger not set
|
||||
if (!logger)
|
||||
return;
|
||||
return logger[funcName].apply(logger, args);
|
||||
return logger[funcName].apply(logger,
|
||||
// work around Function.prototype.apply types
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
arguments);
|
||||
};
|
||||
}
|
||||
// Using self local variable for minification purposes as 'this' cannot be minified
|
||||
@@ -5112,22 +5111,17 @@ var DiagConsoleLogger = /** @class */ (function () {
|
||||
function DiagConsoleLogger() {
|
||||
function _consoleFunc(funcName) {
|
||||
return function () {
|
||||
var args = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
args[_i] = arguments[_i];
|
||||
}
|
||||
var orgArguments = arguments;
|
||||
if (console) {
|
||||
// Some environments only expose the console when the F12 developer console is open
|
||||
// eslint-disable-next-line no-console
|
||||
var theFunc = console[funcName];
|
||||
if (typeof theFunc !== 'function') {
|
||||
// Not all environments support all functions
|
||||
// eslint-disable-next-line no-console
|
||||
theFunc = console.log;
|
||||
}
|
||||
// One last final check
|
||||
if (typeof theFunc === 'function') {
|
||||
return theFunc.apply(console, args);
|
||||
return theFunc.apply(console, orgArguments);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -8953,7 +8947,7 @@ function expand(str, isTop) {
|
||||
|
||||
XMLDocumentCB = __webpack_require__(768);
|
||||
|
||||
XMLStringWriter = __webpack_require__(750);
|
||||
XMLStringWriter = __webpack_require__(347);
|
||||
|
||||
XMLStreamWriter = __webpack_require__(458);
|
||||
|
||||
@@ -9401,7 +9395,47 @@ var SamplingDecision;
|
||||
/* 344 */,
|
||||
/* 345 */,
|
||||
/* 346 */,
|
||||
/* 347 */,
|
||||
/* 347 */
|
||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||
|
||||
// Generated by CoffeeScript 1.12.7
|
||||
(function() {
|
||||
var XMLStringWriter, XMLWriterBase,
|
||||
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||
hasProp = {}.hasOwnProperty;
|
||||
|
||||
XMLWriterBase = __webpack_require__(423);
|
||||
|
||||
module.exports = XMLStringWriter = (function(superClass) {
|
||||
extend(XMLStringWriter, superClass);
|
||||
|
||||
function XMLStringWriter(options) {
|
||||
XMLStringWriter.__super__.constructor.call(this, options);
|
||||
}
|
||||
|
||||
XMLStringWriter.prototype.document = function(doc, options) {
|
||||
var child, i, len, r, ref;
|
||||
options = this.filterOptions(options);
|
||||
r = '';
|
||||
ref = doc.children;
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
child = ref[i];
|
||||
r += this.writeChildNode(child, options, 0);
|
||||
}
|
||||
if (options.pretty && r.slice(-options.newline.length) === options.newline) {
|
||||
r = r.slice(0, -options.newline.length);
|
||||
}
|
||||
return r;
|
||||
};
|
||||
|
||||
return XMLStringWriter;
|
||||
|
||||
})(XMLWriterBase);
|
||||
|
||||
}).call(this);
|
||||
|
||||
|
||||
/***/ }),
|
||||
/* 348 */
|
||||
/***/ (function(__unusedmodule, exports) {
|
||||
|
||||
@@ -36347,8 +36381,9 @@ function getInputAsArray(name, options) {
|
||||
return core
|
||||
.getInput(name, options)
|
||||
.split("\n")
|
||||
.map(s => s.trim())
|
||||
.filter(x => x !== "");
|
||||
.map(s => s.replace(/^!\s+/, "!").trim())
|
||||
.filter(x => x !== "")
|
||||
.sort();
|
||||
}
|
||||
exports.getInputAsArray = getInputAsArray;
|
||||
function getInputAsInt(name, options) {
|
||||
@@ -37869,17 +37904,9 @@ AbortError.prototype = Object.create(Error.prototype);
|
||||
AbortError.prototype.constructor = AbortError;
|
||||
AbortError.prototype.name = 'AbortError';
|
||||
|
||||
const URL$1 = Url.URL || whatwgUrl.URL;
|
||||
|
||||
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
|
||||
const PassThrough$1 = Stream.PassThrough;
|
||||
|
||||
const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
|
||||
const orig = new URL$1(original).hostname;
|
||||
const dest = new URL$1(destination).hostname;
|
||||
|
||||
return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
|
||||
};
|
||||
const resolve_url = Url.resolve;
|
||||
|
||||
/**
|
||||
* Fetch function
|
||||
@@ -37967,19 +37994,7 @@ function fetch(url, opts) {
|
||||
const location = headers.get('Location');
|
||||
|
||||
// HTTP fetch step 5.3
|
||||
let locationURL = null;
|
||||
try {
|
||||
locationURL = location === null ? null : new URL$1(location, request.url).toString();
|
||||
} catch (err) {
|
||||
// error here can only be invalid URL in Location: header
|
||||
// do not throw when options.redirect == manual
|
||||
// let the user extract the errorneous redirect URL
|
||||
if (request.redirect !== 'manual') {
|
||||
reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
|
||||
finalize();
|
||||
return;
|
||||
}
|
||||
}
|
||||
const locationURL = location === null ? null : resolve_url(request.url, location);
|
||||
|
||||
// HTTP fetch step 5.5
|
||||
switch (request.redirect) {
|
||||
@@ -38027,12 +38042,6 @@ function fetch(url, opts) {
|
||||
size: request.size
|
||||
};
|
||||
|
||||
if (!isDomainOrSubdomain(request.url, locationURL)) {
|
||||
for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
|
||||
requestOpts.headers.delete(name);
|
||||
}
|
||||
}
|
||||
|
||||
// HTTP-redirect fetch step 9
|
||||
if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
|
||||
reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
|
||||
@@ -39174,7 +39183,7 @@ function getPagedAsyncIterator(pagedResult) {
|
||||
},
|
||||
byPage: (_a = pagedResult === null || pagedResult === void 0 ? void 0 : pagedResult.byPage) !== null && _a !== void 0 ? _a : ((settings) => {
|
||||
return getPageAsyncIterator(pagedResult, settings === null || settings === void 0 ? void 0 : settings.maxPageSize);
|
||||
}),
|
||||
})
|
||||
};
|
||||
}
|
||||
function getItemAsyncIterator(pagedResult, maxPageSize) {
|
||||
@@ -40394,7 +40403,7 @@ CombinedStream.prototype._emitError = function(err) {
|
||||
|
||||
XMLStringifier = __webpack_require__(602);
|
||||
|
||||
XMLStringWriter = __webpack_require__(750);
|
||||
XMLStringWriter = __webpack_require__(347);
|
||||
|
||||
module.exports = XMLDocument = (function(superClass) {
|
||||
extend(XMLDocument, superClass);
|
||||
@@ -40686,7 +40695,7 @@ exports.baggageEntryMetadataSymbol = Symbol('BaggageEntryMetadata');
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
const psl = __webpack_require__(632);
|
||||
const psl = __webpack_require__(750);
|
||||
|
||||
function getPublicSuffix(domain) {
|
||||
return psl.get(domain);
|
||||
@@ -41939,282 +41948,7 @@ exports.wrapSpanContext = wrapSpanContext;
|
||||
module.exports = require("net");
|
||||
|
||||
/***/ }),
|
||||
/* 632 */
|
||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
|
||||
|
||||
|
||||
|
||||
var Punycode = __webpack_require__(815);
|
||||
|
||||
|
||||
var internals = {};
|
||||
|
||||
|
||||
//
|
||||
// Read rules from file.
|
||||
//
|
||||
internals.rules = __webpack_require__(50).map(function (rule) {
|
||||
|
||||
return {
|
||||
rule: rule,
|
||||
suffix: rule.replace(/^(\*\.|\!)/, ''),
|
||||
punySuffix: -1,
|
||||
wildcard: rule.charAt(0) === '*',
|
||||
exception: rule.charAt(0) === '!'
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
//
|
||||
// Check is given string ends with `suffix`.
|
||||
//
|
||||
internals.endsWith = function (str, suffix) {
|
||||
|
||||
return str.indexOf(suffix, str.length - suffix.length) !== -1;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Find rule for a given domain.
|
||||
//
|
||||
internals.findRule = function (domain) {
|
||||
|
||||
var punyDomain = Punycode.toASCII(domain);
|
||||
return internals.rules.reduce(function (memo, rule) {
|
||||
|
||||
if (rule.punySuffix === -1){
|
||||
rule.punySuffix = Punycode.toASCII(rule.suffix);
|
||||
}
|
||||
if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
|
||||
return memo;
|
||||
}
|
||||
// This has been commented out as it never seems to run. This is because
|
||||
// sub tlds always appear after their parents and we never find a shorter
|
||||
// match.
|
||||
//if (memo) {
|
||||
// var memoSuffix = Punycode.toASCII(memo.suffix);
|
||||
// if (memoSuffix.length >= punySuffix.length) {
|
||||
// return memo;
|
||||
// }
|
||||
//}
|
||||
return rule;
|
||||
}, null);
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Error codes and messages.
|
||||
//
|
||||
exports.errorCodes = {
|
||||
DOMAIN_TOO_SHORT: 'Domain name too short.',
|
||||
DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
|
||||
LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
|
||||
LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
|
||||
LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
|
||||
LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
|
||||
LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Validate domain name and throw if not valid.
|
||||
//
|
||||
// From wikipedia:
|
||||
//
|
||||
// Hostnames are composed of series of labels concatenated with dots, as are all
|
||||
// domain names. Each label must be between 1 and 63 characters long, and the
|
||||
// entire hostname (including the delimiting dots) has a maximum of 255 chars.
|
||||
//
|
||||
// Allowed chars:
|
||||
//
|
||||
// * `a-z`
|
||||
// * `0-9`
|
||||
// * `-` but not as a starting or ending character
|
||||
// * `.` as a separator for the textual portions of a domain name
|
||||
//
|
||||
// * http://en.wikipedia.org/wiki/Domain_name
|
||||
// * http://en.wikipedia.org/wiki/Hostname
|
||||
//
|
||||
internals.validate = function (input) {
|
||||
|
||||
// Before we can validate we need to take care of IDNs with unicode chars.
|
||||
var ascii = Punycode.toASCII(input);
|
||||
|
||||
if (ascii.length < 1) {
|
||||
return 'DOMAIN_TOO_SHORT';
|
||||
}
|
||||
if (ascii.length > 255) {
|
||||
return 'DOMAIN_TOO_LONG';
|
||||
}
|
||||
|
||||
// Check each part's length and allowed chars.
|
||||
var labels = ascii.split('.');
|
||||
var label;
|
||||
|
||||
for (var i = 0; i < labels.length; ++i) {
|
||||
label = labels[i];
|
||||
if (!label.length) {
|
||||
return 'LABEL_TOO_SHORT';
|
||||
}
|
||||
if (label.length > 63) {
|
||||
return 'LABEL_TOO_LONG';
|
||||
}
|
||||
if (label.charAt(0) === '-') {
|
||||
return 'LABEL_STARTS_WITH_DASH';
|
||||
}
|
||||
if (label.charAt(label.length - 1) === '-') {
|
||||
return 'LABEL_ENDS_WITH_DASH';
|
||||
}
|
||||
if (!/^[a-z0-9\-]+$/.test(label)) {
|
||||
return 'LABEL_INVALID_CHARS';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Public API
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// Parse domain.
|
||||
//
|
||||
exports.parse = function (input) {
|
||||
|
||||
if (typeof input !== 'string') {
|
||||
throw new TypeError('Domain name must be a string.');
|
||||
}
|
||||
|
||||
// Force domain to lowercase.
|
||||
var domain = input.slice(0).toLowerCase();
|
||||
|
||||
// Handle FQDN.
|
||||
// TODO: Simply remove trailing dot?
|
||||
if (domain.charAt(domain.length - 1) === '.') {
|
||||
domain = domain.slice(0, domain.length - 1);
|
||||
}
|
||||
|
||||
// Validate and sanitise input.
|
||||
var error = internals.validate(domain);
|
||||
if (error) {
|
||||
return {
|
||||
input: input,
|
||||
error: {
|
||||
message: exports.errorCodes[error],
|
||||
code: error
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var parsed = {
|
||||
input: input,
|
||||
tld: null,
|
||||
sld: null,
|
||||
domain: null,
|
||||
subdomain: null,
|
||||
listed: false
|
||||
};
|
||||
|
||||
var domainParts = domain.split('.');
|
||||
|
||||
// Non-Internet TLD
|
||||
if (domainParts[domainParts.length - 1] === 'local') {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
var handlePunycode = function () {
|
||||
|
||||
if (!/xn--/.test(domain)) {
|
||||
return parsed;
|
||||
}
|
||||
if (parsed.domain) {
|
||||
parsed.domain = Punycode.toASCII(parsed.domain);
|
||||
}
|
||||
if (parsed.subdomain) {
|
||||
parsed.subdomain = Punycode.toASCII(parsed.subdomain);
|
||||
}
|
||||
return parsed;
|
||||
};
|
||||
|
||||
var rule = internals.findRule(domain);
|
||||
|
||||
// Unlisted tld.
|
||||
if (!rule) {
|
||||
if (domainParts.length < 2) {
|
||||
return parsed;
|
||||
}
|
||||
parsed.tld = domainParts.pop();
|
||||
parsed.sld = domainParts.pop();
|
||||
parsed.domain = [parsed.sld, parsed.tld].join('.');
|
||||
if (domainParts.length) {
|
||||
parsed.subdomain = domainParts.pop();
|
||||
}
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
// At this point we know the public suffix is listed.
|
||||
parsed.listed = true;
|
||||
|
||||
var tldParts = rule.suffix.split('.');
|
||||
var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
|
||||
|
||||
if (rule.exception) {
|
||||
privateParts.push(tldParts.shift());
|
||||
}
|
||||
|
||||
parsed.tld = tldParts.join('.');
|
||||
|
||||
if (!privateParts.length) {
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
if (rule.wildcard) {
|
||||
tldParts.unshift(privateParts.pop());
|
||||
parsed.tld = tldParts.join('.');
|
||||
}
|
||||
|
||||
if (!privateParts.length) {
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
parsed.sld = privateParts.pop();
|
||||
parsed.domain = [parsed.sld, parsed.tld].join('.');
|
||||
|
||||
if (privateParts.length) {
|
||||
parsed.subdomain = privateParts.join('.');
|
||||
}
|
||||
|
||||
return handlePunycode();
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Get domain.
|
||||
//
|
||||
exports.get = function (domain) {
|
||||
|
||||
if (!domain) {
|
||||
return null;
|
||||
}
|
||||
return exports.parse(domain).domain || null;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Check whether domain belongs to a known public suffix.
|
||||
//
|
||||
exports.isValid = function (domain) {
|
||||
|
||||
var parsed = exports.parse(domain);
|
||||
return Boolean(parsed.domain && parsed.listed);
|
||||
};
|
||||
|
||||
|
||||
/***/ }),
|
||||
/* 632 */,
|
||||
/* 633 */,
|
||||
/* 634 */,
|
||||
/* 635 */,
|
||||
@@ -45165,15 +44899,11 @@ const cache = __importStar(__webpack_require__(692));
|
||||
const core = __importStar(__webpack_require__(470));
|
||||
const constants_1 = __webpack_require__(196);
|
||||
const utils = __importStar(__webpack_require__(443));
|
||||
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
|
||||
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
|
||||
// throw an uncaught exception. Instead of failing this action, just warn.
|
||||
process.on("uncaughtException", e => utils.logWarning(e.message));
|
||||
function run() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
if (utils.isGhes()) {
|
||||
utils.logWarning("Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details");
|
||||
utils.logWarning("Cache action is not supported on GHES");
|
||||
return;
|
||||
}
|
||||
if (!utils.isValidEvent()) {
|
||||
@@ -45198,7 +44928,6 @@ function run() {
|
||||
yield cache.saveCache(cachePaths, primaryKey, {
|
||||
uploadChunkSize: utils.getInputAsInt(constants_1.Inputs.UploadChunkSize)
|
||||
});
|
||||
core.info(`Cache saved with key: ${primaryKey}`);
|
||||
}
|
||||
catch (error) {
|
||||
if (error.name === cache.ValidationError.name) {
|
||||
@@ -46111,43 +45840,278 @@ module.exports = require("fs");
|
||||
/* 748 */,
|
||||
/* 749 */,
|
||||
/* 750 */
|
||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
||||
|
||||
// Generated by CoffeeScript 1.12.7
|
||||
(function() {
|
||||
var XMLStringWriter, XMLWriterBase,
|
||||
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||
hasProp = {}.hasOwnProperty;
|
||||
"use strict";
|
||||
/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
|
||||
|
||||
XMLWriterBase = __webpack_require__(423);
|
||||
|
||||
module.exports = XMLStringWriter = (function(superClass) {
|
||||
extend(XMLStringWriter, superClass);
|
||||
|
||||
function XMLStringWriter(options) {
|
||||
XMLStringWriter.__super__.constructor.call(this, options);
|
||||
var Punycode = __webpack_require__(815);
|
||||
|
||||
|
||||
var internals = {};
|
||||
|
||||
|
||||
//
|
||||
// Read rules from file.
|
||||
//
|
||||
internals.rules = __webpack_require__(50).map(function (rule) {
|
||||
|
||||
return {
|
||||
rule: rule,
|
||||
suffix: rule.replace(/^(\*\.|\!)/, ''),
|
||||
punySuffix: -1,
|
||||
wildcard: rule.charAt(0) === '*',
|
||||
exception: rule.charAt(0) === '!'
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
//
|
||||
// Check is given string ends with `suffix`.
|
||||
//
|
||||
internals.endsWith = function (str, suffix) {
|
||||
|
||||
return str.indexOf(suffix, str.length - suffix.length) !== -1;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Find rule for a given domain.
|
||||
//
|
||||
internals.findRule = function (domain) {
|
||||
|
||||
var punyDomain = Punycode.toASCII(domain);
|
||||
return internals.rules.reduce(function (memo, rule) {
|
||||
|
||||
if (rule.punySuffix === -1){
|
||||
rule.punySuffix = Punycode.toASCII(rule.suffix);
|
||||
}
|
||||
if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
|
||||
return memo;
|
||||
}
|
||||
// This has been commented out as it never seems to run. This is because
|
||||
// sub tlds always appear after their parents and we never find a shorter
|
||||
// match.
|
||||
//if (memo) {
|
||||
// var memoSuffix = Punycode.toASCII(memo.suffix);
|
||||
// if (memoSuffix.length >= punySuffix.length) {
|
||||
// return memo;
|
||||
// }
|
||||
//}
|
||||
return rule;
|
||||
}, null);
|
||||
};
|
||||
|
||||
XMLStringWriter.prototype.document = function(doc, options) {
|
||||
var child, i, len, r, ref;
|
||||
options = this.filterOptions(options);
|
||||
r = '';
|
||||
ref = doc.children;
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
child = ref[i];
|
||||
r += this.writeChildNode(child, options, 0);
|
||||
|
||||
//
|
||||
// Error codes and messages.
|
||||
//
|
||||
exports.errorCodes = {
|
||||
DOMAIN_TOO_SHORT: 'Domain name too short.',
|
||||
DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
|
||||
LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
|
||||
LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
|
||||
LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
|
||||
LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
|
||||
LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Validate domain name and throw if not valid.
|
||||
//
|
||||
// From wikipedia:
|
||||
//
|
||||
// Hostnames are composed of series of labels concatenated with dots, as are all
|
||||
// domain names. Each label must be between 1 and 63 characters long, and the
|
||||
// entire hostname (including the delimiting dots) has a maximum of 255 chars.
|
||||
//
|
||||
// Allowed chars:
|
||||
//
|
||||
// * `a-z`
|
||||
// * `0-9`
|
||||
// * `-` but not as a starting or ending character
|
||||
// * `.` as a separator for the textual portions of a domain name
|
||||
//
|
||||
// * http://en.wikipedia.org/wiki/Domain_name
|
||||
// * http://en.wikipedia.org/wiki/Hostname
|
||||
//
|
||||
internals.validate = function (input) {
|
||||
|
||||
// Before we can validate we need to take care of IDNs with unicode chars.
|
||||
var ascii = Punycode.toASCII(input);
|
||||
|
||||
if (ascii.length < 1) {
|
||||
return 'DOMAIN_TOO_SHORT';
|
||||
}
|
||||
if (ascii.length > 255) {
|
||||
return 'DOMAIN_TOO_LONG';
|
||||
}
|
||||
|
||||
// Check each part's length and allowed chars.
|
||||
var labels = ascii.split('.');
|
||||
var label;
|
||||
|
||||
for (var i = 0; i < labels.length; ++i) {
|
||||
label = labels[i];
|
||||
if (!label.length) {
|
||||
return 'LABEL_TOO_SHORT';
|
||||
}
|
||||
if (label.length > 63) {
|
||||
return 'LABEL_TOO_LONG';
|
||||
}
|
||||
if (label.charAt(0) === '-') {
|
||||
return 'LABEL_STARTS_WITH_DASH';
|
||||
}
|
||||
if (label.charAt(label.length - 1) === '-') {
|
||||
return 'LABEL_ENDS_WITH_DASH';
|
||||
}
|
||||
if (!/^[a-z0-9\-]+$/.test(label)) {
|
||||
return 'LABEL_INVALID_CHARS';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Public API
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// Parse domain.
|
||||
//
|
||||
exports.parse = function (input) {
|
||||
|
||||
if (typeof input !== 'string') {
|
||||
throw new TypeError('Domain name must be a string.');
|
||||
}
|
||||
|
||||
// Force domain to lowercase.
|
||||
var domain = input.slice(0).toLowerCase();
|
||||
|
||||
// Handle FQDN.
|
||||
// TODO: Simply remove trailing dot?
|
||||
if (domain.charAt(domain.length - 1) === '.') {
|
||||
domain = domain.slice(0, domain.length - 1);
|
||||
}
|
||||
|
||||
// Validate and sanitise input.
|
||||
var error = internals.validate(domain);
|
||||
if (error) {
|
||||
return {
|
||||
input: input,
|
||||
error: {
|
||||
message: exports.errorCodes[error],
|
||||
code: error
|
||||
}
|
||||
if (options.pretty && r.slice(-options.newline.length) === options.newline) {
|
||||
r = r.slice(0, -options.newline.length);
|
||||
}
|
||||
return r;
|
||||
};
|
||||
}
|
||||
|
||||
return XMLStringWriter;
|
||||
var parsed = {
|
||||
input: input,
|
||||
tld: null,
|
||||
sld: null,
|
||||
domain: null,
|
||||
subdomain: null,
|
||||
listed: false
|
||||
};
|
||||
|
||||
})(XMLWriterBase);
|
||||
var domainParts = domain.split('.');
|
||||
|
||||
}).call(this);
|
||||
// Non-Internet TLD
|
||||
if (domainParts[domainParts.length - 1] === 'local') {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
var handlePunycode = function () {
|
||||
|
||||
if (!/xn--/.test(domain)) {
|
||||
return parsed;
|
||||
}
|
||||
if (parsed.domain) {
|
||||
parsed.domain = Punycode.toASCII(parsed.domain);
|
||||
}
|
||||
if (parsed.subdomain) {
|
||||
parsed.subdomain = Punycode.toASCII(parsed.subdomain);
|
||||
}
|
||||
return parsed;
|
||||
};
|
||||
|
||||
var rule = internals.findRule(domain);
|
||||
|
||||
// Unlisted tld.
|
||||
if (!rule) {
|
||||
if (domainParts.length < 2) {
|
||||
return parsed;
|
||||
}
|
||||
parsed.tld = domainParts.pop();
|
||||
parsed.sld = domainParts.pop();
|
||||
parsed.domain = [parsed.sld, parsed.tld].join('.');
|
||||
if (domainParts.length) {
|
||||
parsed.subdomain = domainParts.pop();
|
||||
}
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
// At this point we know the public suffix is listed.
|
||||
parsed.listed = true;
|
||||
|
||||
var tldParts = rule.suffix.split('.');
|
||||
var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
|
||||
|
||||
if (rule.exception) {
|
||||
privateParts.push(tldParts.shift());
|
||||
}
|
||||
|
||||
parsed.tld = tldParts.join('.');
|
||||
|
||||
if (!privateParts.length) {
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
if (rule.wildcard) {
|
||||
tldParts.unshift(privateParts.pop());
|
||||
parsed.tld = tldParts.join('.');
|
||||
}
|
||||
|
||||
if (!privateParts.length) {
|
||||
return handlePunycode();
|
||||
}
|
||||
|
||||
parsed.sld = privateParts.pop();
|
||||
parsed.domain = [parsed.sld, parsed.tld].join('.');
|
||||
|
||||
if (privateParts.length) {
|
||||
parsed.subdomain = privateParts.join('.');
|
||||
}
|
||||
|
||||
return handlePunycode();
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Get domain.
|
||||
//
|
||||
exports.get = function (domain) {
|
||||
|
||||
if (!domain) {
|
||||
return null;
|
||||
}
|
||||
return exports.parse(domain).domain || null;
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Check whether domain belongs to a known public suffix.
|
||||
//
|
||||
exports.isValid = function (domain) {
|
||||
|
||||
var parsed = exports.parse(domain);
|
||||
return Boolean(parsed.domain && parsed.listed);
|
||||
};
|
||||
|
||||
|
||||
/***/ }),
|
||||
@@ -46303,7 +46267,7 @@ module.exports = function(dst, src) {
|
||||
|
||||
XMLStringifier = __webpack_require__(602);
|
||||
|
||||
XMLStringWriter = __webpack_require__(750);
|
||||
XMLStringWriter = __webpack_require__(347);
|
||||
|
||||
WriterState = __webpack_require__(541);
|
||||
|
||||
@@ -48288,7 +48252,7 @@ module.exports = v4;
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.VERSION = void 0;
|
||||
// this is autogenerated file, see scripts/version-update.js
|
||||
exports.VERSION = '1.0.4';
|
||||
exports.VERSION = '1.0.3';
|
||||
//# sourceMappingURL=version.js.map
|
||||
|
||||
/***/ }),
|
||||
@@ -49606,7 +49570,7 @@ class Poller {
|
||||
if (!this.isDone()) {
|
||||
this.operation = await this.operation.update({
|
||||
abortSignal: options.abortSignal,
|
||||
fireProgress: this.fireProgress.bind(this),
|
||||
fireProgress: this.fireProgress.bind(this)
|
||||
});
|
||||
if (this.isDone() && this.resolve) {
|
||||
// If the poller has finished polling, this means we now have a result.
|
||||
@@ -49805,6 +49769,13 @@ class Poller {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* The `@azure/logger` configuration for this package.
|
||||
* @internal
|
||||
*/
|
||||
const logger = logger$1.createClientLogger("core-lro");
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
@@ -49832,20 +49803,20 @@ function inferLroMode(requestPath, requestMethod, rawResponse) {
|
||||
mode: "AzureAsync",
|
||||
resourceLocation: requestMethod === "PUT"
|
||||
? requestPath
|
||||
: requestMethod === "POST" || requestMethod === "PATCH"
|
||||
: requestMethod === "POST"
|
||||
? getLocation(rawResponse)
|
||||
: undefined,
|
||||
: undefined
|
||||
};
|
||||
}
|
||||
else if (getLocation(rawResponse) !== undefined ||
|
||||
getOperationLocation(rawResponse) !== undefined) {
|
||||
return {
|
||||
mode: "Location",
|
||||
mode: "Location"
|
||||
};
|
||||
}
|
||||
else if (["PUT", "PATCH"].includes(requestMethod)) {
|
||||
return {
|
||||
mode: "Body",
|
||||
mode: "Body"
|
||||
};
|
||||
}
|
||||
return {};
|
||||
@@ -49878,35 +49849,6 @@ function isUnexpectedPollingResponse(rawResponse) {
|
||||
const successStates = ["succeeded"];
|
||||
const failureStates = ["failed", "canceled", "cancelled"];
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getProvisioningState(rawResponse) {
|
||||
var _a, _b;
|
||||
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
|
||||
const state = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
|
||||
return typeof state === "string" ? state.toLowerCase() : "succeeded";
|
||||
}
|
||||
function isBodyPollingDone(rawResponse) {
|
||||
const state = getProvisioningState(rawResponse);
|
||||
if (isUnexpectedPollingResponse(rawResponse) || failureStates.includes(state)) {
|
||||
throw new Error(`The long running operation has failed. The provisioning state: ${state}.`);
|
||||
}
|
||||
return successStates.includes(state);
|
||||
}
|
||||
/**
|
||||
* Creates a polling strategy based on BodyPolling which uses the provisioning state
|
||||
* from the result to determine the current operation state
|
||||
*/
|
||||
function processBodyPollingOperationResult(response) {
|
||||
return Object.assign(Object.assign({}, response), { done: isBodyPollingDone(response.rawResponse) });
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* The `@azure/logger` configuration for this package.
|
||||
* @internal
|
||||
*/
|
||||
const logger = logger$1.createClientLogger("core-lro");
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getResponseStatus(rawResponse) {
|
||||
var _a;
|
||||
@@ -49951,6 +49893,28 @@ function processAzureAsyncOperationResult(lro, resourceLocation, lroResourceLoca
|
||||
};
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getProvisioningState(rawResponse) {
|
||||
var _a, _b;
|
||||
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
|
||||
const state = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
|
||||
return typeof state === "string" ? state.toLowerCase() : "succeeded";
|
||||
}
|
||||
function isBodyPollingDone(rawResponse) {
|
||||
const state = getProvisioningState(rawResponse);
|
||||
if (isUnexpectedPollingResponse(rawResponse) || failureStates.includes(state)) {
|
||||
throw new Error(`The long running operation has failed. The provisioning state: ${state}.`);
|
||||
}
|
||||
return successStates.includes(state);
|
||||
}
|
||||
/**
|
||||
* Creates a polling strategy based on BodyPolling which uses the provisioning state
|
||||
* from the result to determine the current operation state
|
||||
*/
|
||||
function processBodyPollingOperationResult(response) {
|
||||
return Object.assign(Object.assign({}, response), { done: isBodyPollingDone(response.rawResponse) });
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function isLocationPollingDone(rawResponse) {
|
||||
return !isUnexpectedPollingResponse(rawResponse) && rawResponse.statusCode !== 202;
|
||||
@@ -49993,11 +49957,10 @@ function createPoll(lroPrimitives) {
|
||||
const response = await lroPrimitives.sendPollRequest(path);
|
||||
const retryAfter = response.rawResponse.headers["retry-after"];
|
||||
if (retryAfter !== undefined) {
|
||||
// Retry-After header value is either in HTTP date format, or in seconds
|
||||
const retryAfterInSeconds = parseInt(retryAfter);
|
||||
pollerConfig.intervalInMs = isNaN(retryAfterInSeconds)
|
||||
const retryAfterInMs = parseInt(retryAfter);
|
||||
pollerConfig.intervalInMs = isNaN(retryAfterInMs)
|
||||
? calculatePollingIntervalFromDate(new Date(retryAfter), pollerConfig.intervalInMs)
|
||||
: retryAfterInSeconds * 1000;
|
||||
: retryAfterInMs;
|
||||
}
|
||||
return getLroStatusFromResponse(response);
|
||||
};
|
||||
@@ -50120,7 +50083,7 @@ class GenericPollOperation {
|
||||
*/
|
||||
toString() {
|
||||
return JSON.stringify({
|
||||
state: this.state,
|
||||
state: this.state
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -53414,54 +53377,27 @@ exports.isCompatible = _makeCompatibilityCheck(version_1.VERSION);
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
||||
|
||||
var uuid = __webpack_require__(585);
|
||||
var util = __webpack_require__(669);
|
||||
var tslib = __webpack_require__(865);
|
||||
var xml2js = __webpack_require__(992);
|
||||
var abortController = __webpack_require__(106);
|
||||
var logger$1 = __webpack_require__(928);
|
||||
var coreAuth = __webpack_require__(229);
|
||||
var os = __webpack_require__(87);
|
||||
var tough = __webpack_require__(393);
|
||||
var http = __webpack_require__(605);
|
||||
var https = __webpack_require__(211);
|
||||
var tough = __webpack_require__(393);
|
||||
var tunnel = __webpack_require__(413);
|
||||
var stream = __webpack_require__(794);
|
||||
var FormData = __webpack_require__(790);
|
||||
var node_fetch = __webpack_require__(454);
|
||||
var coreTracing = __webpack_require__(263);
|
||||
var node_fetch = _interopDefault(__webpack_require__(454));
|
||||
var abortController = __webpack_require__(106);
|
||||
var FormData = _interopDefault(__webpack_require__(790));
|
||||
var util = __webpack_require__(669);
|
||||
var url = __webpack_require__(835);
|
||||
var stream = __webpack_require__(794);
|
||||
var logger$1 = __webpack_require__(928);
|
||||
var tunnel = __webpack_require__(413);
|
||||
var tslib = __webpack_require__(865);
|
||||
var coreAuth = __webpack_require__(229);
|
||||
var xml2js = __webpack_require__(992);
|
||||
var os = __webpack_require__(87);
|
||||
var coreTracing = __webpack_require__(263);
|
||||
__webpack_require__(71);
|
||||
|
||||
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
||||
|
||||
function _interopNamespace(e) {
|
||||
if (e && e.__esModule) return e;
|
||||
var n = Object.create(null);
|
||||
if (e) {
|
||||
Object.keys(e).forEach(function (k) {
|
||||
if (k !== 'default') {
|
||||
var d = Object.getOwnPropertyDescriptor(e, k);
|
||||
Object.defineProperty(n, k, d.get ? d : {
|
||||
enumerable: true,
|
||||
get: function () { return e[k]; }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
n["default"] = e;
|
||||
return Object.freeze(n);
|
||||
}
|
||||
|
||||
var xml2js__namespace = /*#__PURE__*/_interopNamespace(xml2js);
|
||||
var os__namespace = /*#__PURE__*/_interopNamespace(os);
|
||||
var http__namespace = /*#__PURE__*/_interopNamespace(http);
|
||||
var https__namespace = /*#__PURE__*/_interopNamespace(https);
|
||||
var tough__namespace = /*#__PURE__*/_interopNamespace(tough);
|
||||
var tunnel__namespace = /*#__PURE__*/_interopNamespace(tunnel);
|
||||
var FormData__default = /*#__PURE__*/_interopDefaultLegacy(FormData);
|
||||
var node_fetch__default = /*#__PURE__*/_interopDefaultLegacy(node_fetch);
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
@@ -53509,7 +53445,7 @@ class HttpHeaders {
|
||||
set(headerName, headerValue) {
|
||||
this._headersMap[getHeaderKey(headerName)] = {
|
||||
name: headerName,
|
||||
value: headerValue.toString(),
|
||||
value: headerValue.toString()
|
||||
};
|
||||
}
|
||||
/**
|
||||
@@ -53541,7 +53477,12 @@ class HttpHeaders {
|
||||
* Get the headers that are contained this collection as an object.
|
||||
*/
|
||||
rawHeaders() {
|
||||
return this.toJson({ preserveCase: true });
|
||||
const result = {};
|
||||
for (const headerKey in this._headersMap) {
|
||||
const header = this._headersMap[headerKey];
|
||||
result[header.name.toLowerCase()] = header.value;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Get the headers that are contained in this collection as an array.
|
||||
@@ -53578,27 +53519,14 @@ class HttpHeaders {
|
||||
/**
|
||||
* Get the JSON object representation of this HTTP header collection.
|
||||
*/
|
||||
toJson(options = {}) {
|
||||
const result = {};
|
||||
if (options.preserveCase) {
|
||||
for (const headerKey in this._headersMap) {
|
||||
const header = this._headersMap[headerKey];
|
||||
result[header.name] = header.value;
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (const headerKey in this._headersMap) {
|
||||
const header = this._headersMap[headerKey];
|
||||
result[getHeaderKey(header.name)] = header.value;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
toJson() {
|
||||
return this.rawHeaders();
|
||||
}
|
||||
/**
|
||||
* Get the string representation of this HTTP header collection.
|
||||
*/
|
||||
toString() {
|
||||
return JSON.stringify(this.toJson({ preserveCase: true }));
|
||||
return JSON.stringify(this.toJson());
|
||||
}
|
||||
/**
|
||||
* Create a deep clone/copy of this HttpHeaders collection.
|
||||
@@ -53642,14 +53570,11 @@ function decodeString(value) {
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
* A set of constants used internally when processing requests.
|
||||
*/
|
||||
const Constants = {
|
||||
/**
|
||||
* The core-http version
|
||||
*/
|
||||
coreHttpVersion: "2.2.4",
|
||||
coreHttpVersion: "2.2.2",
|
||||
/**
|
||||
* Specifies HTTP.
|
||||
*/
|
||||
@@ -53685,12 +53610,12 @@ const Constants = {
|
||||
POST: "POST",
|
||||
MERGE: "MERGE",
|
||||
HEAD: "HEAD",
|
||||
PATCH: "PATCH",
|
||||
PATCH: "PATCH"
|
||||
},
|
||||
StatusCodes: {
|
||||
TooManyRequests: 429,
|
||||
ServiceUnavailable: 503,
|
||||
},
|
||||
ServiceUnavailable: 503
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Defines constants for use with HTTP headers.
|
||||
@@ -53710,8 +53635,8 @@ const Constants = {
|
||||
/**
|
||||
* The UserAgent header.
|
||||
*/
|
||||
USER_AGENT: "User-Agent",
|
||||
},
|
||||
USER_AGENT: "User-Agent"
|
||||
}
|
||||
};
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
@@ -53926,38 +53851,18 @@ function isObject(input) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// This file contains utility code to serialize and deserialize network operations according to `OperationSpec` objects generated by AutoRest.TypeScript from OpenAPI specifications.
|
||||
/**
|
||||
* Used to map raw response objects to final shapes.
|
||||
* Helps packing and unpacking Dates and other encoded types that are not intrinsic to JSON.
|
||||
* Also allows pulling values from headers, as well as inserting default values and constants.
|
||||
*/
|
||||
class Serializer {
|
||||
constructor(
|
||||
/**
|
||||
* The provided model mapper.
|
||||
*/
|
||||
modelMappers = {},
|
||||
/**
|
||||
* Whether the contents are XML or not.
|
||||
*/
|
||||
isXML) {
|
||||
constructor(modelMappers = {}, isXML) {
|
||||
this.modelMappers = modelMappers;
|
||||
this.isXML = isXML;
|
||||
}
|
||||
/**
|
||||
* Validates constraints, if any. This function will throw if the provided value does not respect those constraints.
|
||||
* @param mapper - The definition of data models.
|
||||
* @param value - The value.
|
||||
* @param objectName - Name of the object. Used in the error messages.
|
||||
*/
|
||||
validateConstraints(mapper, value, objectName) {
|
||||
const failValidation = (constraintName, constraintValue) => {
|
||||
throw new Error(`"${objectName}" with value "${value}" should satisfy the constraint "${constraintName}": ${constraintValue}.`);
|
||||
};
|
||||
if (mapper.constraints && value != undefined) {
|
||||
const valueAsNumber = value;
|
||||
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems, } = mapper.constraints;
|
||||
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems } = mapper.constraints;
|
||||
if (ExclusiveMaximum != undefined && valueAsNumber >= ExclusiveMaximum) {
|
||||
failValidation("ExclusiveMaximum", ExclusiveMaximum);
|
||||
}
|
||||
@@ -53999,20 +53904,20 @@ class Serializer {
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Serialize the given object based on its metadata defined in the mapper.
|
||||
* Serialize the given object based on its metadata defined in the mapper
|
||||
*
|
||||
* @param mapper - The mapper which defines the metadata of the serializable object.
|
||||
* @param object - A valid Javascript object to be serialized.
|
||||
* @param objectName - Name of the serialized object.
|
||||
* @param options - additional options to deserialization.
|
||||
* @returns A valid serialized Javascript object.
|
||||
* @param mapper - The mapper which defines the metadata of the serializable object
|
||||
* @param object - A valid Javascript object to be serialized
|
||||
* @param objectName - Name of the serialized object
|
||||
* @param options - additional options to deserialization
|
||||
* @returns A valid serialized Javascript object
|
||||
*/
|
||||
serialize(mapper, object, objectName, options = {}) {
|
||||
var _a, _b, _c;
|
||||
const updatedOptions = {
|
||||
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
|
||||
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
|
||||
};
|
||||
let payload = {};
|
||||
const mapperType = mapper.type.name;
|
||||
@@ -54082,20 +53987,20 @@ class Serializer {
|
||||
return payload;
|
||||
}
|
||||
/**
|
||||
* Deserialize the given object based on its metadata defined in the mapper.
|
||||
* Deserialize the given object based on its metadata defined in the mapper
|
||||
*
|
||||
* @param mapper - The mapper which defines the metadata of the serializable object.
|
||||
* @param responseBody - A valid Javascript entity to be deserialized.
|
||||
* @param objectName - Name of the deserialized object.
|
||||
* @param mapper - The mapper which defines the metadata of the serializable object
|
||||
* @param responseBody - A valid Javascript entity to be deserialized
|
||||
* @param objectName - Name of the deserialized object
|
||||
* @param options - Controls behavior of XML parser and builder.
|
||||
* @returns A valid deserialized Javascript object.
|
||||
* @returns A valid deserialized Javascript object
|
||||
*/
|
||||
deserialize(mapper, responseBody, objectName, options = {}) {
|
||||
var _a, _b, _c;
|
||||
const updatedOptions = {
|
||||
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
|
||||
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
|
||||
};
|
||||
if (responseBody == undefined) {
|
||||
if (this.isXML && mapper.type.name === "Sequence" && !mapper.xmlIsWrapped) {
|
||||
@@ -54194,7 +54099,9 @@ function bufferToBase64Url(buffer) {
|
||||
// Uint8Array to Base64.
|
||||
const str = encodeByteArray(buffer);
|
||||
// Base64 to Base64Url.
|
||||
return trimEnd(str, "=").replace(/\+/g, "-").replace(/\//g, "_");
|
||||
return trimEnd(str, "=")
|
||||
.replace(/\+/g, "-")
|
||||
.replace(/\//g, "_");
|
||||
}
|
||||
function base64UrlToByteArray(str) {
|
||||
if (!str) {
|
||||
@@ -54410,10 +54317,10 @@ function serializeDictionaryType(serializer, mapper, object, objectName, isXml,
|
||||
return tempDictionary;
|
||||
}
|
||||
/**
|
||||
* Resolves the additionalProperties property from a referenced mapper.
|
||||
* @param serializer - The serializer containing the entire set of mappers.
|
||||
* @param mapper - The composite mapper to resolve.
|
||||
* @param objectName - Name of the object being serialized.
|
||||
* Resolves the additionalProperties property from a referenced mapper
|
||||
* @param serializer - The serializer containing the entire set of mappers
|
||||
* @param mapper - The composite mapper to resolve
|
||||
* @param objectName - Name of the object being serialized
|
||||
*/
|
||||
function resolveAdditionalProperties(serializer, mapper, objectName) {
|
||||
const additionalProperties = mapper.type.additionalProperties;
|
||||
@@ -54424,7 +54331,7 @@ function resolveAdditionalProperties(serializer, mapper, objectName) {
|
||||
return additionalProperties;
|
||||
}
|
||||
/**
|
||||
* Finds the mapper referenced by `className`.
|
||||
* Finds the mapper referenced by className
|
||||
* @param serializer - The serializer containing the entire set of mappers
|
||||
* @param mapper - The composite mapper to resolve
|
||||
* @param objectName - Name of the object being serialized
|
||||
@@ -54763,9 +54670,7 @@ function getPolymorphicDiscriminatorSafely(serializer, typeName) {
|
||||
serializer.modelMappers[typeName] &&
|
||||
serializer.modelMappers[typeName].type.polymorphicDiscriminator);
|
||||
}
|
||||
/**
|
||||
* Utility function that serializes an object that might contain binary information into a plain object, array or a string.
|
||||
*/
|
||||
// TODO: why is this here?
|
||||
function serializeObject(toSerialize) {
|
||||
const castToSerialize = toSerialize;
|
||||
if (toSerialize == undefined)
|
||||
@@ -54803,9 +54708,6 @@ function strEnum(o) {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* String enum containing the string types of property mappers.
|
||||
*/
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
const MapperType = strEnum([
|
||||
"Base64Url",
|
||||
@@ -54823,7 +54725,7 @@ const MapperType = strEnum([
|
||||
"String",
|
||||
"Stream",
|
||||
"TimeSpan",
|
||||
"UnixTime",
|
||||
"UnixTime"
|
||||
]);
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
@@ -55086,6 +54988,9 @@ class WebResource {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const custom = util.inspect.custom;
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* A class that handles the query portion of a URLBuilder.
|
||||
@@ -55383,10 +55288,6 @@ class URLBuilder {
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Serializes the URL as a string.
|
||||
* @returns the URL as a string.
|
||||
*/
|
||||
toString() {
|
||||
let result = "";
|
||||
if (this._scheme) {
|
||||
@@ -55422,9 +55323,6 @@ class URLBuilder {
|
||||
this.setQuery(replaceAll(this.getQuery(), searchValue, replaceValue));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Parses a given string URL into a new {@link URLBuilder}.
|
||||
*/
|
||||
static parse(text) {
|
||||
const result = new URLBuilder();
|
||||
result.set(text, "SCHEME_OR_HOST");
|
||||
@@ -55681,60 +55579,6 @@ function nextQuery(tokenizer) {
|
||||
tokenizer._currentState = "DONE";
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function createProxyAgent(requestUrl, proxySettings, headers) {
|
||||
const host = URLBuilder.parse(proxySettings.host).getHost();
|
||||
if (!host) {
|
||||
throw new Error("Expecting a non-empty host in proxy settings.");
|
||||
}
|
||||
if (!isValidPort(proxySettings.port)) {
|
||||
throw new Error("Expecting a valid port number in the range of [0, 65535] in proxy settings.");
|
||||
}
|
||||
const tunnelOptions = {
|
||||
proxy: {
|
||||
host: host,
|
||||
port: proxySettings.port,
|
||||
headers: (headers && headers.rawHeaders()) || {},
|
||||
},
|
||||
};
|
||||
if (proxySettings.username && proxySettings.password) {
|
||||
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}:${proxySettings.password}`;
|
||||
}
|
||||
else if (proxySettings.username) {
|
||||
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}`;
|
||||
}
|
||||
const isRequestHttps = isUrlHttps(requestUrl);
|
||||
const isProxyHttps = isUrlHttps(proxySettings.host);
|
||||
const proxyAgent = {
|
||||
isHttps: isRequestHttps,
|
||||
agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions),
|
||||
};
|
||||
return proxyAgent;
|
||||
}
|
||||
function isUrlHttps(url) {
|
||||
const urlScheme = URLBuilder.parse(url).getScheme() || "";
|
||||
return urlScheme.toLowerCase() === "https";
|
||||
}
|
||||
function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) {
|
||||
if (isRequestHttps && isProxyHttps) {
|
||||
return tunnel__namespace.httpsOverHttps(tunnelOptions);
|
||||
}
|
||||
else if (isRequestHttps && !isProxyHttps) {
|
||||
return tunnel__namespace.httpsOverHttp(tunnelOptions);
|
||||
}
|
||||
else if (!isRequestHttps && isProxyHttps) {
|
||||
return tunnel__namespace.httpOverHttps(tunnelOptions);
|
||||
}
|
||||
else {
|
||||
return tunnel__namespace.httpOverHttp(tunnelOptions);
|
||||
}
|
||||
}
|
||||
function isValidPort(port) {
|
||||
// any port in 0-65535 range is valid (RFC 793) even though almost all implementations
|
||||
// will reserve 0 for a specific purpose, and a range of numbers for ephemeral ports
|
||||
return 0 <= port && port <= 65535;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const RedactedString = "REDACTED";
|
||||
const defaultAllowedHeaderNames = [
|
||||
@@ -55775,7 +55619,7 @@ const defaultAllowedHeaderNames = [
|
||||
"Retry-After",
|
||||
"Server",
|
||||
"Transfer-Encoding",
|
||||
"User-Agent",
|
||||
"User-Agent"
|
||||
];
|
||||
const defaultAllowedQueryParameters = ["api-version"];
|
||||
class Sanitizer {
|
||||
@@ -55868,14 +55712,8 @@ class Sanitizer {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const custom = util.inspect.custom;
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const errorSanitizer = new Sanitizer();
|
||||
/**
|
||||
* An error resulting from an HTTP request to a service endpoint.
|
||||
*/
|
||||
class RestError extends Error {
|
||||
constructor(message, code, statusCode, request, response) {
|
||||
super(message);
|
||||
@@ -55893,22 +55731,13 @@ class RestError extends Error {
|
||||
return `RestError: ${this.message} \n ${errorSanitizer.sanitize(this)}`;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* A constant string to identify errors that may arise when making an HTTP request that indicates an issue with the transport layer (e.g. the hostname of the URL cannot be resolved via DNS.)
|
||||
*/
|
||||
RestError.REQUEST_SEND_ERROR = "REQUEST_SEND_ERROR";
|
||||
/**
|
||||
* A constant string to identify errors that may arise from parsing an incoming HTTP response. Usually indicates a malformed HTTP body, such as an encoded JSON payload that is incomplete.
|
||||
*/
|
||||
RestError.PARSE_ERROR = "PARSE_ERROR";
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const logger = logger$1.createClientLogger("core-http");
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getCachedAgent(isHttps, agentCache) {
|
||||
return isHttps ? agentCache.httpsAgent : agentCache.httpAgent;
|
||||
}
|
||||
class ReportTransform extends stream.Transform {
|
||||
constructor(progressCallback) {
|
||||
super();
|
||||
@@ -55922,44 +55751,7 @@ class ReportTransform extends stream.Transform {
|
||||
callback(undefined);
|
||||
}
|
||||
}
|
||||
function isReadableStream(body) {
|
||||
return body && typeof body.pipe === "function";
|
||||
}
|
||||
function isStreamComplete(stream, aborter) {
|
||||
return new Promise((resolve) => {
|
||||
stream.once("close", () => {
|
||||
aborter === null || aborter === void 0 ? void 0 : aborter.abort();
|
||||
resolve();
|
||||
});
|
||||
stream.once("end", resolve);
|
||||
stream.once("error", resolve);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Transforms a set of headers into the key/value pair defined by {@link HttpHeadersLike}
|
||||
*/
|
||||
function parseHeaders(headers) {
|
||||
const httpHeaders = new HttpHeaders();
|
||||
headers.forEach((value, key) => {
|
||||
httpHeaders.set(key, value);
|
||||
});
|
||||
return httpHeaders;
|
||||
}
|
||||
/**
|
||||
* An HTTP client that uses `node-fetch`.
|
||||
*/
|
||||
class NodeFetchHttpClient {
|
||||
constructor() {
|
||||
// a mapping of proxy settings string `${host}:${port}:${username}:${password}` to agent
|
||||
this.proxyAgentMap = new Map();
|
||||
this.keepAliveAgents = {};
|
||||
this.cookieJar = new tough__namespace.CookieJar(undefined, { looseMode: true });
|
||||
}
|
||||
/**
|
||||
* Provides minimum viable error handling and the logic that executes the abstract methods.
|
||||
* @param httpRequest - Object representing the outgoing HTTP request.
|
||||
* @returns An object representing the incoming HTTP response.
|
||||
*/
|
||||
class FetchHttpClient {
|
||||
async sendRequest(httpRequest) {
|
||||
var _a;
|
||||
if (!httpRequest && typeof httpRequest !== "object") {
|
||||
@@ -55985,7 +55777,7 @@ class NodeFetchHttpClient {
|
||||
}
|
||||
if (httpRequest.formData) {
|
||||
const formData = httpRequest.formData;
|
||||
const requestForm = new FormData__default["default"]();
|
||||
const requestForm = new FormData();
|
||||
const appendFormValue = (key, value) => {
|
||||
// value function probably returns a stream so we can provide a fresh stream on each retry
|
||||
if (typeof value === "function") {
|
||||
@@ -56055,7 +55847,7 @@ class NodeFetchHttpClient {
|
||||
readableStreamBody: streaming
|
||||
? response.body
|
||||
: undefined,
|
||||
bodyAsText: !streaming ? await response.text() : undefined,
|
||||
bodyAsText: !streaming ? await response.text() : undefined
|
||||
};
|
||||
const onDownloadProgress = httpRequest.onDownloadProgress;
|
||||
if (onDownloadProgress) {
|
||||
@@ -56109,6 +55901,94 @@ class NodeFetchHttpClient {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function isReadableStream(body) {
|
||||
return body && typeof body.pipe === "function";
|
||||
}
|
||||
function isStreamComplete(stream, aborter) {
|
||||
return new Promise((resolve) => {
|
||||
stream.once("close", () => {
|
||||
aborter === null || aborter === void 0 ? void 0 : aborter.abort();
|
||||
resolve();
|
||||
});
|
||||
stream.once("end", resolve);
|
||||
stream.once("error", resolve);
|
||||
});
|
||||
}
|
||||
function parseHeaders(headers) {
|
||||
const httpHeaders = new HttpHeaders();
|
||||
headers.forEach((value, key) => {
|
||||
httpHeaders.set(key, value);
|
||||
});
|
||||
return httpHeaders;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function createProxyAgent(requestUrl, proxySettings, headers) {
|
||||
const host = URLBuilder.parse(proxySettings.host).getHost();
|
||||
if (!host) {
|
||||
throw new Error("Expecting a non-empty host in proxy settings.");
|
||||
}
|
||||
if (!isValidPort(proxySettings.port)) {
|
||||
throw new Error("Expecting a valid port number in the range of [0, 65535] in proxy settings.");
|
||||
}
|
||||
const tunnelOptions = {
|
||||
proxy: {
|
||||
host: host,
|
||||
port: proxySettings.port,
|
||||
headers: (headers && headers.rawHeaders()) || {}
|
||||
}
|
||||
};
|
||||
if (proxySettings.username && proxySettings.password) {
|
||||
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}:${proxySettings.password}`;
|
||||
}
|
||||
else if (proxySettings.username) {
|
||||
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}`;
|
||||
}
|
||||
const isRequestHttps = isUrlHttps(requestUrl);
|
||||
const isProxyHttps = isUrlHttps(proxySettings.host);
|
||||
const proxyAgent = {
|
||||
isHttps: isRequestHttps,
|
||||
agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions)
|
||||
};
|
||||
return proxyAgent;
|
||||
}
|
||||
function isUrlHttps(url) {
|
||||
const urlScheme = URLBuilder.parse(url).getScheme() || "";
|
||||
return urlScheme.toLowerCase() === "https";
|
||||
}
|
||||
function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) {
|
||||
if (isRequestHttps && isProxyHttps) {
|
||||
return tunnel.httpsOverHttps(tunnelOptions);
|
||||
}
|
||||
else if (isRequestHttps && !isProxyHttps) {
|
||||
return tunnel.httpsOverHttp(tunnelOptions);
|
||||
}
|
||||
else if (!isRequestHttps && isProxyHttps) {
|
||||
return tunnel.httpOverHttps(tunnelOptions);
|
||||
}
|
||||
else {
|
||||
return tunnel.httpOverHttp(tunnelOptions);
|
||||
}
|
||||
}
|
||||
function isValidPort(port) {
|
||||
// any port in 0-65535 range is valid (RFC 793) even though almost all implementations
|
||||
// will reserve 0 for a specific purpose, and a range of numbers for ephemeral ports
|
||||
return 0 <= port && port <= 65535;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getCachedAgent(isHttps, agentCache) {
|
||||
return isHttps ? agentCache.httpsAgent : agentCache.httpAgent;
|
||||
}
|
||||
class NodeFetchHttpClient extends FetchHttpClient {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
// a mapping of proxy settings string `${host}:${port}:${username}:${password}` to agent
|
||||
this.proxyAgentMap = new Map();
|
||||
this.keepAliveAgents = {};
|
||||
this.cookieJar = new tough.CookieJar(undefined, { looseMode: true });
|
||||
}
|
||||
getOrCreateAgent(httpRequest) {
|
||||
var _a;
|
||||
const isHttps = isUrlHttps(httpRequest.url);
|
||||
@@ -56140,30 +56020,24 @@ class NodeFetchHttpClient {
|
||||
return agent;
|
||||
}
|
||||
const agentOptions = {
|
||||
keepAlive: httpRequest.keepAlive,
|
||||
keepAlive: httpRequest.keepAlive
|
||||
};
|
||||
if (isHttps) {
|
||||
agent = this.keepAliveAgents.httpsAgent = new https__namespace.Agent(agentOptions);
|
||||
agent = this.keepAliveAgents.httpsAgent = new https.Agent(agentOptions);
|
||||
}
|
||||
else {
|
||||
agent = this.keepAliveAgents.httpAgent = new http__namespace.Agent(agentOptions);
|
||||
agent = this.keepAliveAgents.httpAgent = new http.Agent(agentOptions);
|
||||
}
|
||||
return agent;
|
||||
}
|
||||
else {
|
||||
return isHttps ? https__namespace.globalAgent : http__namespace.globalAgent;
|
||||
return isHttps ? https.globalAgent : http.globalAgent;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Uses `node-fetch` to perform the request.
|
||||
*/
|
||||
// eslint-disable-next-line @azure/azure-sdk/ts-apisurface-standardized-verbs
|
||||
async fetch(input, init) {
|
||||
return node_fetch__default["default"](input, init);
|
||||
return node_fetch(input, init);
|
||||
}
|
||||
/**
|
||||
* Prepares a request based on the provided web resource.
|
||||
*/
|
||||
async prepareRequest(httpRequest) {
|
||||
const requestInit = {};
|
||||
if (this.cookieJar && !httpRequest.headers.get("Cookie")) {
|
||||
@@ -56184,9 +56058,6 @@ class NodeFetchHttpClient {
|
||||
requestInit.compress = httpRequest.decompressResponse;
|
||||
return requestInit;
|
||||
}
|
||||
/**
|
||||
* Process an HTTP response. Handles persisting a cookie for subsequent requests if the response has a "Set-Cookie" header.
|
||||
*/
|
||||
async processRequest(operationResponse) {
|
||||
if (this.cookieJar) {
|
||||
const setCookieHeader = operationResponse.headers.get("Set-Cookie");
|
||||
@@ -56207,11 +56078,6 @@ class NodeFetchHttpClient {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
* The different levels of logs that can be used with the HttpPipelineLogger.
|
||||
*/
|
||||
exports.HttpPipelineLogLevel = void 0;
|
||||
(function (HttpPipelineLogLevel) {
|
||||
/**
|
||||
* A log level that indicates that no logs will be logged.
|
||||
@@ -56231,7 +56097,6 @@ exports.HttpPipelineLogLevel = void 0;
|
||||
HttpPipelineLogLevel[HttpPipelineLogLevel["INFO"] = 3] = "INFO";
|
||||
})(exports.HttpPipelineLogLevel || (exports.HttpPipelineLogLevel = {}));
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Converts an OperationOptions to a RequestOptionsBase
|
||||
*
|
||||
@@ -56253,22 +56118,8 @@ function operationOptionsToRequestOptionsBase(opts) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* The base class from which all request policies derive.
|
||||
*/
|
||||
class BaseRequestPolicy {
|
||||
/**
|
||||
* The main method to implement that manipulates a request/response.
|
||||
*/
|
||||
constructor(
|
||||
/**
|
||||
* The next policy in the pipeline. Each policy is responsible for executing the next one if the request is to continue through the pipeline.
|
||||
*/
|
||||
_nextPolicy,
|
||||
/**
|
||||
* The options that can be passed to a given request policy.
|
||||
*/
|
||||
_options) {
|
||||
constructor(_nextPolicy, _options) {
|
||||
this._nextPolicy = _nextPolicy;
|
||||
this._options = _options;
|
||||
}
|
||||
@@ -56320,6 +56171,113 @@ class RequestPolicyOptions {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function logPolicy(loggingOptions = {}) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new LogPolicy(nextPolicy, options, loggingOptions);
|
||||
}
|
||||
};
|
||||
}
|
||||
class LogPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, { logger: logger$1 = logger.info, allowedHeaderNames = [], allowedQueryParameters = [] } = {}) {
|
||||
super(nextPolicy, options);
|
||||
this.logger = logger$1;
|
||||
this.sanitizer = new Sanitizer({ allowedHeaderNames, allowedQueryParameters });
|
||||
}
|
||||
/**
|
||||
* Header names whose values will be logged when logging is enabled. Defaults to
|
||||
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
|
||||
* specified in this field will be added to that list. Any other values will
|
||||
* be written to logs as "REDACTED".
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
get allowedHeaderNames() {
|
||||
return this.sanitizer.allowedHeaderNames;
|
||||
}
|
||||
/**
|
||||
* Header names whose values will be logged when logging is enabled. Defaults to
|
||||
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
|
||||
* specified in this field will be added to that list. Any other values will
|
||||
* be written to logs as "REDACTED".
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
set allowedHeaderNames(allowedHeaderNames) {
|
||||
this.sanitizer.allowedHeaderNames = allowedHeaderNames;
|
||||
}
|
||||
/**
|
||||
* Query string names whose values will be logged when logging is enabled. By default no
|
||||
* query string values are logged.
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
get allowedQueryParameters() {
|
||||
return this.sanitizer.allowedQueryParameters;
|
||||
}
|
||||
/**
|
||||
* Query string names whose values will be logged when logging is enabled. By default no
|
||||
* query string values are logged.
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
set allowedQueryParameters(allowedQueryParameters) {
|
||||
this.sanitizer.allowedQueryParameters = allowedQueryParameters;
|
||||
}
|
||||
sendRequest(request) {
|
||||
if (!this.logger.enabled)
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
this.logRequest(request);
|
||||
return this._nextPolicy.sendRequest(request).then((response) => this.logResponse(response));
|
||||
}
|
||||
logRequest(request) {
|
||||
this.logger(`Request: ${this.sanitizer.sanitize(request)}`);
|
||||
}
|
||||
logResponse(response) {
|
||||
this.logger(`Response status code: ${response.status}`);
|
||||
this.logger(`Headers: ${this.sanitizer.sanitize(response.headers)}`);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
* Get the path to this parameter's value as a dotted string (a.b.c).
|
||||
* @param parameter - The parameter to get the path string for.
|
||||
* @returns The path to this parameter's value as a dotted string.
|
||||
*/
|
||||
function getPathStringFromParameter(parameter) {
|
||||
return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);
|
||||
}
|
||||
function getPathStringFromParameterPath(parameterPath, mapper) {
|
||||
let result;
|
||||
if (typeof parameterPath === "string") {
|
||||
result = parameterPath;
|
||||
}
|
||||
else if (Array.isArray(parameterPath)) {
|
||||
result = parameterPath.join(".");
|
||||
}
|
||||
else {
|
||||
result = mapper.serializedName;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Gets the list of status codes for streaming responses.
|
||||
* @internal
|
||||
*/
|
||||
function getStreamResponseStatusCodes(operationSpec) {
|
||||
const result = new Set();
|
||||
for (const statusCode in operationSpec.responses) {
|
||||
const operationResponse = operationSpec.responses[statusCode];
|
||||
if (operationResponse.bodyMapper &&
|
||||
operationResponse.bodyMapper.type.name === MapperType.Stream) {
|
||||
result.add(Number(statusCode));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Note: The reason we re-define all of the xml2js default settings (version 2.0) here is because the default settings object exposed
|
||||
// by the xm2js library is mutable. See https://github.com/Leonidas-from-XIV/node-xml2js/issues/536
|
||||
@@ -56352,18 +56310,18 @@ const xml2jsDefaultOptionsV2 = {
|
||||
xmldec: {
|
||||
version: "1.0",
|
||||
encoding: "UTF-8",
|
||||
standalone: true,
|
||||
standalone: true
|
||||
},
|
||||
doctype: undefined,
|
||||
renderOpts: {
|
||||
pretty: true,
|
||||
indent: " ",
|
||||
newline: "\n",
|
||||
newline: "\n"
|
||||
},
|
||||
headless: false,
|
||||
chunkSize: 10000,
|
||||
emptyTag: "",
|
||||
cdata: false,
|
||||
cdata: false
|
||||
};
|
||||
// The xml2js settings for general XML parsing operations.
|
||||
const xml2jsParserSettings = Object.assign({}, xml2jsDefaultOptionsV2);
|
||||
@@ -56372,7 +56330,7 @@ xml2jsParserSettings.explicitArray = false;
|
||||
const xml2jsBuilderSettings = Object.assign({}, xml2jsDefaultOptionsV2);
|
||||
xml2jsBuilderSettings.explicitArray = false;
|
||||
xml2jsBuilderSettings.renderOpts = {
|
||||
pretty: false,
|
||||
pretty: false
|
||||
};
|
||||
/**
|
||||
* Converts given JSON object to XML string
|
||||
@@ -56383,7 +56341,7 @@ function stringifyXML(obj, opts = {}) {
|
||||
var _a;
|
||||
xml2jsBuilderSettings.rootName = opts.rootName;
|
||||
xml2jsBuilderSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
|
||||
const builder = new xml2js__namespace.Builder(xml2jsBuilderSettings);
|
||||
const builder = new xml2js.Builder(xml2jsBuilderSettings);
|
||||
return builder.buildObject(obj);
|
||||
}
|
||||
/**
|
||||
@@ -56395,7 +56353,7 @@ function parseXML(str, opts = {}) {
|
||||
var _a;
|
||||
xml2jsParserSettings.explicitRoot = !!opts.includeRoot;
|
||||
xml2jsParserSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
|
||||
const xmlParser = new xml2js__namespace.Parser(xml2jsParserSettings);
|
||||
const xmlParser = new xml2js.Parser(xml2jsParserSettings);
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!str) {
|
||||
reject(new Error("Document is empty"));
|
||||
@@ -56422,7 +56380,7 @@ function deserializationPolicy(deserializationContentTypes, parsingOptions) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new DeserializationPolicy(nextPolicy, options, deserializationContentTypes, parsingOptions);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
const defaultJsonContentTypes = ["application/json", "text/json"];
|
||||
@@ -56430,8 +56388,8 @@ const defaultXmlContentTypes = ["application/xml", "application/atom+xml"];
|
||||
const DefaultDeserializationOptions = {
|
||||
expectedContentTypes: {
|
||||
json: defaultJsonContentTypes,
|
||||
xml: defaultXmlContentTypes,
|
||||
},
|
||||
xml: defaultXmlContentTypes
|
||||
}
|
||||
};
|
||||
/**
|
||||
* A RequestPolicy that will deserialize HTTP response bodies and headers as they pass through the
|
||||
@@ -56449,7 +56407,7 @@ class DeserializationPolicy extends BaseRequestPolicy {
|
||||
}
|
||||
async sendRequest(request) {
|
||||
return this._nextPolicy.sendRequest(request).then((response) => deserializeResponseBody(this.jsonContentTypes, this.xmlContentTypes, response, {
|
||||
xmlCharKey: this.xmlCharKey,
|
||||
xmlCharKey: this.xmlCharKey
|
||||
}));
|
||||
}
|
||||
}
|
||||
@@ -56482,20 +56440,12 @@ function shouldDeserializeResponse(parsedResponse) {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Given a particular set of content types to parse as either JSON or XML, consumes the HTTP response to produce the result object defined by the request's {@link OperationSpec}.
|
||||
* @param jsonContentTypes - Response content types to parse the body as JSON.
|
||||
* @param xmlContentTypes - Response content types to parse the body as XML.
|
||||
* @param response - HTTP Response from the pipeline.
|
||||
* @param options - Options to the serializer, mostly for configuring the XML parser if needed.
|
||||
* @returns A parsed {@link HttpOperationResponse} object that can be returned by the {@link ServiceClient}.
|
||||
*/
|
||||
function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options = {}) {
|
||||
var _a, _b, _c;
|
||||
const updatedOptions = {
|
||||
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
|
||||
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
|
||||
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
|
||||
};
|
||||
return parse(jsonContentTypes, xmlContentTypes, response, updatedOptions).then((parsedResponse) => {
|
||||
if (!shouldDeserializeResponse(parsedResponse)) {
|
||||
@@ -56646,113 +56596,6 @@ function parse(jsonContentTypes, xmlContentTypes, operationResponse, opts) {
|
||||
return Promise.resolve(operationResponse);
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* By default, HTTP connections are maintained for future requests.
|
||||
*/
|
||||
const DefaultKeepAliveOptions = {
|
||||
enable: true,
|
||||
};
|
||||
/**
|
||||
* Creates a policy that controls whether HTTP connections are maintained on future requests.
|
||||
* @param keepAliveOptions - Keep alive options. By default, HTTP connections are maintained for future requests.
|
||||
* @returns An instance of the {@link KeepAlivePolicy}
|
||||
*/
|
||||
function keepAlivePolicy(keepAliveOptions) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);
|
||||
},
|
||||
};
|
||||
}
|
||||
/**
|
||||
* KeepAlivePolicy is a policy used to control keep alive settings for every request.
|
||||
*/
|
||||
class KeepAlivePolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of KeepAlivePolicy.
|
||||
*
|
||||
* @param nextPolicy -
|
||||
* @param options -
|
||||
* @param keepAliveOptions -
|
||||
*/
|
||||
constructor(nextPolicy, options, keepAliveOptions) {
|
||||
super(nextPolicy, options);
|
||||
this.keepAliveOptions = keepAliveOptions;
|
||||
}
|
||||
/**
|
||||
* Sends out request.
|
||||
*
|
||||
* @param request -
|
||||
* @returns
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
request.keepAlive = this.keepAliveOptions.enable;
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Methods that are allowed to follow redirects 301 and 302
|
||||
*/
|
||||
const allowedRedirect = ["GET", "HEAD"];
|
||||
const DefaultRedirectOptions = {
|
||||
handleRedirects: true,
|
||||
maxRetries: 20,
|
||||
};
|
||||
/**
|
||||
* Creates a redirect policy, which sends a repeats the request to a new destination if a response arrives with a "location" header, and a status code between 300 and 307.
|
||||
* @param maximumRetries - Maximum number of redirects to follow.
|
||||
* @returns An instance of the {@link RedirectPolicy}
|
||||
*/
|
||||
function redirectPolicy(maximumRetries = 20) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new RedirectPolicy(nextPolicy, options, maximumRetries);
|
||||
},
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Resends the request to a new destination if a response arrives with a "location" header, and a status code between 300 and 307.
|
||||
*/
|
||||
class RedirectPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, maxRetries = 20) {
|
||||
super(nextPolicy, options);
|
||||
this.maxRetries = maxRetries;
|
||||
}
|
||||
sendRequest(request) {
|
||||
return this._nextPolicy
|
||||
.sendRequest(request)
|
||||
.then((response) => handleRedirect(this, response, 0));
|
||||
}
|
||||
}
|
||||
function handleRedirect(policy, response, currentRetries) {
|
||||
const { request, status } = response;
|
||||
const locationHeader = response.headers.get("location");
|
||||
if (locationHeader &&
|
||||
(status === 300 ||
|
||||
(status === 301 && allowedRedirect.includes(request.method)) ||
|
||||
(status === 302 && allowedRedirect.includes(request.method)) ||
|
||||
(status === 303 && request.method === "POST") ||
|
||||
status === 307) &&
|
||||
(!policy.maxRetries || currentRetries < policy.maxRetries)) {
|
||||
const builder = URLBuilder.parse(request.url);
|
||||
builder.setPath(locationHeader);
|
||||
request.url = builder.toString();
|
||||
// POST request with Status code 303 should be converted into a
|
||||
// redirected GET request if the redirect url is present in the location header
|
||||
if (status === 303) {
|
||||
request.method = "GET";
|
||||
delete request.body;
|
||||
}
|
||||
return policy._nextPolicy
|
||||
.sendRequest(request)
|
||||
.then((res) => handleRedirect(policy, res, currentRetries + 1));
|
||||
}
|
||||
return Promise.resolve(response);
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
const DEFAULT_CLIENT_RETRY_COUNT = 3;
|
||||
@@ -56816,7 +56659,7 @@ function isDefined(thing) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const StandardAbortMessage$1 = "The operation was aborted.";
|
||||
const StandardAbortMessage = "The operation was aborted.";
|
||||
/**
|
||||
* A wrapper for setTimeout that resolves a promise after delayInMs milliseconds.
|
||||
* @param delayInMs - The number of milliseconds to be delayed.
|
||||
@@ -56831,7 +56674,7 @@ function delay(delayInMs, value, options) {
|
||||
let timer = undefined;
|
||||
let onAborted = undefined;
|
||||
const rejectOnAbort = () => {
|
||||
return reject(new abortController.AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage$1));
|
||||
return reject(new abortController.AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage));
|
||||
};
|
||||
const removeListeners = () => {
|
||||
if ((options === null || options === void 0 ? void 0 : options.abortSignal) && onAborted) {
|
||||
@@ -56859,34 +56702,20 @@ function delay(delayInMs, value, options) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Policy that retries the request as many times as configured for as long as the max retry time interval specified, each retry waiting longer to begin than the last time.
|
||||
* @param retryCount - Maximum number of retries.
|
||||
* @param retryInterval - Base time between retries.
|
||||
* @param maxRetryInterval - Maximum time to wait between retries.
|
||||
*/
|
||||
function exponentialRetryPolicy(retryCount, retryInterval, maxRetryInterval) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, maxRetryInterval);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Describes the Retry Mode type. Currently supporting only Exponential.
|
||||
*/
|
||||
exports.RetryMode = void 0;
|
||||
(function (RetryMode) {
|
||||
/**
|
||||
* Currently supported retry mode.
|
||||
* Each time a retry happens, it will take exponentially more time than the last time.
|
||||
*/
|
||||
RetryMode[RetryMode["Exponential"] = 0] = "Exponential";
|
||||
})(exports.RetryMode || (exports.RetryMode = {}));
|
||||
const DefaultRetryOptions = {
|
||||
maxRetries: DEFAULT_CLIENT_RETRY_COUNT,
|
||||
retryDelayInMs: DEFAULT_CLIENT_RETRY_INTERVAL,
|
||||
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL,
|
||||
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL
|
||||
};
|
||||
/**
|
||||
* Instantiates a new "ExponentialRetryPolicyFilter" instance.
|
||||
@@ -56911,11 +56740,11 @@ class ExponentialRetryPolicy extends BaseRequestPolicy {
|
||||
sendRequest(request) {
|
||||
return this._nextPolicy
|
||||
.sendRequest(request.clone())
|
||||
.then((response) => retry$1(this, request, response))
|
||||
.catch((error) => retry$1(this, request, error.response, undefined, error));
|
||||
.then((response) => retry(this, request, response))
|
||||
.catch((error) => retry(this, request, error.response, undefined, error));
|
||||
}
|
||||
}
|
||||
async function retry$1(policy, request, response, retryData, requestError) {
|
||||
async function retry(policy, request, response, retryData, requestError) {
|
||||
function shouldPolicyRetry(responseParam) {
|
||||
const statusCode = responseParam === null || responseParam === void 0 ? void 0 : responseParam.status;
|
||||
if (statusCode === 503 && (response === null || response === void 0 ? void 0 : response.headers.get(Constants.HeaderConstants.RETRY_AFTER))) {
|
||||
@@ -56932,7 +56761,7 @@ async function retry$1(policy, request, response, retryData, requestError) {
|
||||
retryData = updateRetryData({
|
||||
retryInterval: policy.retryInterval,
|
||||
minRetryInterval: 0,
|
||||
maxRetryInterval: policy.maxRetryInterval,
|
||||
maxRetryInterval: policy.maxRetryInterval
|
||||
}, retryData, requestError);
|
||||
const isAborted = request.abortSignal && request.abortSignal.aborted;
|
||||
if (!isAborted && shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, response)) {
|
||||
@@ -56940,10 +56769,10 @@ async function retry$1(policy, request, response, retryData, requestError) {
|
||||
try {
|
||||
await delay(retryData.retryInterval);
|
||||
const res = await policy._nextPolicy.sendRequest(request.clone());
|
||||
return retry$1(policy, request, res, retryData);
|
||||
return retry(policy, request, res, retryData);
|
||||
}
|
||||
catch (err) {
|
||||
return retry$1(policy, request, response, retryData, err);
|
||||
return retry(policy, request, response, retryData, err);
|
||||
}
|
||||
}
|
||||
else if (isAborted || requestError || !response) {
|
||||
@@ -56958,467 +56787,11 @@ async function retry$1(policy, request, response, retryData, requestError) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Creates a policy that logs information about the outgoing request and the incoming responses.
|
||||
* @param loggingOptions - Logging options.
|
||||
* @returns An instance of the {@link LogPolicy}
|
||||
*/
|
||||
function logPolicy(loggingOptions = {}) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new LogPolicy(nextPolicy, options, loggingOptions);
|
||||
},
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that logs information about the outgoing request and the incoming responses.
|
||||
*/
|
||||
class LogPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, { logger: logger$1 = logger.info, allowedHeaderNames = [], allowedQueryParameters = [], } = {}) {
|
||||
super(nextPolicy, options);
|
||||
this.logger = logger$1;
|
||||
this.sanitizer = new Sanitizer({ allowedHeaderNames, allowedQueryParameters });
|
||||
}
|
||||
/**
|
||||
* Header names whose values will be logged when logging is enabled. Defaults to
|
||||
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
|
||||
* specified in this field will be added to that list. Any other values will
|
||||
* be written to logs as "REDACTED".
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
get allowedHeaderNames() {
|
||||
return this.sanitizer.allowedHeaderNames;
|
||||
}
|
||||
/**
|
||||
* Header names whose values will be logged when logging is enabled. Defaults to
|
||||
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
|
||||
* specified in this field will be added to that list. Any other values will
|
||||
* be written to logs as "REDACTED".
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
set allowedHeaderNames(allowedHeaderNames) {
|
||||
this.sanitizer.allowedHeaderNames = allowedHeaderNames;
|
||||
}
|
||||
/**
|
||||
* Query string names whose values will be logged when logging is enabled. By default no
|
||||
* query string values are logged.
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
get allowedQueryParameters() {
|
||||
return this.sanitizer.allowedQueryParameters;
|
||||
}
|
||||
/**
|
||||
* Query string names whose values will be logged when logging is enabled. By default no
|
||||
* query string values are logged.
|
||||
* @deprecated Pass these into the constructor instead.
|
||||
*/
|
||||
set allowedQueryParameters(allowedQueryParameters) {
|
||||
this.sanitizer.allowedQueryParameters = allowedQueryParameters;
|
||||
}
|
||||
sendRequest(request) {
|
||||
if (!this.logger.enabled)
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
this.logRequest(request);
|
||||
return this._nextPolicy.sendRequest(request).then((response) => this.logResponse(response));
|
||||
}
|
||||
logRequest(request) {
|
||||
this.logger(`Request: ${this.sanitizer.sanitize(request)}`);
|
||||
}
|
||||
logResponse(response) {
|
||||
this.logger(`Response status code: ${response.status}`);
|
||||
this.logger(`Headers: ${this.sanitizer.sanitize(response.headers)}`);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
* Get the path to this parameter's value as a dotted string (a.b.c).
|
||||
* @param parameter - The parameter to get the path string for.
|
||||
* @returns The path to this parameter's value as a dotted string.
|
||||
*/
|
||||
function getPathStringFromParameter(parameter) {
|
||||
return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);
|
||||
}
|
||||
function getPathStringFromParameterPath(parameterPath, mapper) {
|
||||
let result;
|
||||
if (typeof parameterPath === "string") {
|
||||
result = parameterPath;
|
||||
}
|
||||
else if (Array.isArray(parameterPath)) {
|
||||
result = parameterPath.join(".");
|
||||
}
|
||||
else {
|
||||
result = mapper.serializedName;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Gets the list of status codes for streaming responses.
|
||||
* @internal
|
||||
*/
|
||||
function getStreamResponseStatusCodes(operationSpec) {
|
||||
const result = new Set();
|
||||
for (const statusCode in operationSpec.responses) {
|
||||
const operationResponse = operationSpec.responses[statusCode];
|
||||
if (operationResponse.bodyMapper &&
|
||||
operationResponse.bodyMapper.type.name === MapperType.Stream) {
|
||||
result.add(Number(statusCode));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getDefaultUserAgentKey() {
|
||||
return Constants.HeaderConstants.USER_AGENT;
|
||||
}
|
||||
function getPlatformSpecificData() {
|
||||
const runtimeInfo = {
|
||||
key: "Node",
|
||||
value: process.version,
|
||||
};
|
||||
const osInfo = {
|
||||
key: "OS",
|
||||
value: `(${os__namespace.arch()}-${os__namespace.type()}-${os__namespace.release()})`,
|
||||
};
|
||||
return [runtimeInfo, osInfo];
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function getRuntimeInfo() {
|
||||
const msRestRuntime = {
|
||||
key: "core-http",
|
||||
value: Constants.coreHttpVersion,
|
||||
};
|
||||
return [msRestRuntime];
|
||||
}
|
||||
function getUserAgentString(telemetryInfo, keySeparator = " ", valueSeparator = "/") {
|
||||
return telemetryInfo
|
||||
.map((info) => {
|
||||
const value = info.value ? `${valueSeparator}${info.value}` : "";
|
||||
return `${info.key}${value}`;
|
||||
})
|
||||
.join(keySeparator);
|
||||
}
|
||||
const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
|
||||
/**
|
||||
* The default approach to generate user agents.
|
||||
* Uses static information from this package, plus system information available from the runtime.
|
||||
*/
|
||||
function getDefaultUserAgentValue() {
|
||||
const runtimeInfo = getRuntimeInfo();
|
||||
const platformSpecificData = getPlatformSpecificData();
|
||||
const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
|
||||
return userAgent;
|
||||
}
|
||||
/**
|
||||
* Returns a policy that adds the user agent header to outgoing requests based on the given {@link TelemetryInfo}.
|
||||
* @param userAgentData - Telemetry information.
|
||||
* @returns A new {@link UserAgentPolicy}.
|
||||
*/
|
||||
function userAgentPolicy(userAgentData) {
|
||||
const key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null
|
||||
? getDefaultUserAgentKey()
|
||||
: userAgentData.key;
|
||||
const value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null
|
||||
? getDefaultUserAgentValue()
|
||||
: userAgentData.value;
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new UserAgentPolicy(nextPolicy, options, key, value);
|
||||
},
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that adds the user agent header to outgoing requests based on the given {@link TelemetryInfo}.
|
||||
*/
|
||||
class UserAgentPolicy extends BaseRequestPolicy {
|
||||
constructor(_nextPolicy, _options, headerKey, headerValue) {
|
||||
super(_nextPolicy, _options);
|
||||
this._nextPolicy = _nextPolicy;
|
||||
this._options = _options;
|
||||
this.headerKey = headerKey;
|
||||
this.headerValue = headerValue;
|
||||
}
|
||||
sendRequest(request) {
|
||||
this.addUserAgentHeader(request);
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
/**
|
||||
* Adds the user agent header to the outgoing request.
|
||||
*/
|
||||
addUserAgentHeader(request) {
|
||||
if (!request.headers) {
|
||||
request.headers = new HttpHeaders();
|
||||
}
|
||||
if (!request.headers.get(this.headerKey) && this.headerValue) {
|
||||
request.headers.set(this.headerKey, this.headerValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
* The format that will be used to join an array of values together for a query parameter value.
|
||||
*/
|
||||
exports.QueryCollectionFormat = void 0;
|
||||
(function (QueryCollectionFormat) {
|
||||
/**
|
||||
* CSV: Each pair of segments joined by a single comma.
|
||||
*/
|
||||
QueryCollectionFormat["Csv"] = ",";
|
||||
/**
|
||||
* SSV: Each pair of segments joined by a single space character.
|
||||
*/
|
||||
QueryCollectionFormat["Ssv"] = " ";
|
||||
/**
|
||||
* TSV: Each pair of segments joined by a single tab character.
|
||||
*/
|
||||
QueryCollectionFormat["Tsv"] = "\t";
|
||||
/**
|
||||
* Pipes: Each pair of segments joined by a single pipe character.
|
||||
*/
|
||||
QueryCollectionFormat["Pipes"] = "|";
|
||||
/**
|
||||
* Denotes this is an array of values that should be passed to the server in multiple key/value pairs, e.g. `?queryParam=value1&queryParam=value2`
|
||||
*/
|
||||
QueryCollectionFormat["Multi"] = "Multi";
|
||||
})(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {}));
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Default options for the cycler if none are provided
|
||||
const DEFAULT_CYCLER_OPTIONS = {
|
||||
forcedRefreshWindowInMs: 1000,
|
||||
retryIntervalInMs: 3000,
|
||||
refreshWindowInMs: 1000 * 60 * 2, // Start refreshing 2m before expiry
|
||||
};
|
||||
/**
|
||||
* Converts an an unreliable access token getter (which may resolve with null)
|
||||
* into an AccessTokenGetter by retrying the unreliable getter in a regular
|
||||
* interval.
|
||||
*
|
||||
* @param getAccessToken - a function that produces a promise of an access
|
||||
* token that may fail by returning null
|
||||
* @param retryIntervalInMs - the time (in milliseconds) to wait between retry
|
||||
* attempts
|
||||
* @param timeoutInMs - the timestamp after which the refresh attempt will fail,
|
||||
* throwing an exception
|
||||
* @returns - a promise that, if it resolves, will resolve with an access token
|
||||
*/
|
||||
async function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {
|
||||
// This wrapper handles exceptions gracefully as long as we haven't exceeded
|
||||
// the timeout.
|
||||
async function tryGetAccessToken() {
|
||||
if (Date.now() < timeoutInMs) {
|
||||
try {
|
||||
return await getAccessToken();
|
||||
}
|
||||
catch (_a) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
const finalToken = await getAccessToken();
|
||||
// Timeout is up, so throw if it's still null
|
||||
if (finalToken === null) {
|
||||
throw new Error("Failed to refresh access token.");
|
||||
}
|
||||
return finalToken;
|
||||
}
|
||||
}
|
||||
let token = await tryGetAccessToken();
|
||||
while (token === null) {
|
||||
await delay(retryIntervalInMs);
|
||||
token = await tryGetAccessToken();
|
||||
}
|
||||
return token;
|
||||
}
|
||||
/**
|
||||
* Creates a token cycler from a credential, scopes, and optional settings.
|
||||
*
|
||||
* A token cycler represents a way to reliably retrieve a valid access token
|
||||
* from a TokenCredential. It will handle initializing the token, refreshing it
|
||||
* when it nears expiration, and synchronizes refresh attempts to avoid
|
||||
* concurrency hazards.
|
||||
*
|
||||
* @param credential - the underlying TokenCredential that provides the access
|
||||
* token
|
||||
* @param scopes - the scopes to request authorization for
|
||||
* @param tokenCyclerOptions - optionally override default settings for the cycler
|
||||
*
|
||||
* @returns - a function that reliably produces a valid access token
|
||||
*/
|
||||
function createTokenCycler(credential, scopes, tokenCyclerOptions) {
|
||||
let refreshWorker = null;
|
||||
let token = null;
|
||||
const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);
|
||||
/**
|
||||
* This little holder defines several predicates that we use to construct
|
||||
* the rules of refreshing the token.
|
||||
*/
|
||||
const cycler = {
|
||||
/**
|
||||
* Produces true if a refresh job is currently in progress.
|
||||
*/
|
||||
get isRefreshing() {
|
||||
return refreshWorker !== null;
|
||||
},
|
||||
/**
|
||||
* Produces true if the cycler SHOULD refresh (we are within the refresh
|
||||
* window and not already refreshing)
|
||||
*/
|
||||
get shouldRefresh() {
|
||||
var _a;
|
||||
return (!cycler.isRefreshing &&
|
||||
((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now());
|
||||
},
|
||||
/**
|
||||
* Produces true if the cycler MUST refresh (null or nearly-expired
|
||||
* token).
|
||||
*/
|
||||
get mustRefresh() {
|
||||
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
|
||||
},
|
||||
};
|
||||
/**
|
||||
* Starts a refresh job or returns the existing job if one is already
|
||||
* running.
|
||||
*/
|
||||
function refresh(getTokenOptions) {
|
||||
var _a;
|
||||
if (!cycler.isRefreshing) {
|
||||
// We bind `scopes` here to avoid passing it around a lot
|
||||
const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);
|
||||
// Take advantage of promise chaining to insert an assignment to `token`
|
||||
// before the refresh can be considered done.
|
||||
refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,
|
||||
// If we don't have a token, then we should timeout immediately
|
||||
(_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now())
|
||||
.then((_token) => {
|
||||
refreshWorker = null;
|
||||
token = _token;
|
||||
return token;
|
||||
})
|
||||
.catch((reason) => {
|
||||
// We also should reset the refresher if we enter a failed state. All
|
||||
// existing awaiters will throw, but subsequent requests will start a
|
||||
// new retry chain.
|
||||
refreshWorker = null;
|
||||
token = null;
|
||||
throw reason;
|
||||
});
|
||||
}
|
||||
return refreshWorker;
|
||||
}
|
||||
return async (tokenOptions) => {
|
||||
//
|
||||
// Simple rules:
|
||||
// - If we MUST refresh, then return the refresh task, blocking
|
||||
// the pipeline until a token is available.
|
||||
// - If we SHOULD refresh, then run refresh but don't return it
|
||||
// (we can still use the cached token).
|
||||
// - Return the token, since it's fine if we didn't return in
|
||||
// step 1.
|
||||
//
|
||||
if (cycler.mustRefresh)
|
||||
return refresh(tokenOptions);
|
||||
if (cycler.shouldRefresh) {
|
||||
refresh(tokenOptions);
|
||||
}
|
||||
return token;
|
||||
};
|
||||
}
|
||||
// #endregion
|
||||
/**
|
||||
* Creates a new factory for a RequestPolicy that applies a bearer token to
|
||||
* the requests' `Authorization` headers.
|
||||
*
|
||||
* @param credential - The TokenCredential implementation that can supply the bearer token.
|
||||
* @param scopes - The scopes for which the bearer token applies.
|
||||
*/
|
||||
function bearerTokenAuthenticationPolicy(credential, scopes) {
|
||||
// This simple function encapsulates the entire process of reliably retrieving the token
|
||||
const getToken = createTokenCycler(credential, scopes /* , options */);
|
||||
class BearerTokenAuthenticationPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
}
|
||||
async sendRequest(webResource) {
|
||||
if (!webResource.url.toLowerCase().startsWith("https://")) {
|
||||
throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");
|
||||
}
|
||||
const { token } = await getToken({
|
||||
abortSignal: webResource.abortSignal,
|
||||
tracingOptions: {
|
||||
tracingContext: webResource.tracingContext,
|
||||
},
|
||||
});
|
||||
webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);
|
||||
return this._nextPolicy.sendRequest(webResource);
|
||||
}
|
||||
}
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new BearerTokenAuthenticationPolicy(nextPolicy, options);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Returns a request policy factory that can be used to create an instance of
|
||||
* {@link DisableResponseDecompressionPolicy}.
|
||||
*/
|
||||
function disableResponseDecompressionPolicy() {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new DisableResponseDecompressionPolicy(nextPolicy, options);
|
||||
},
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy to disable response decompression according to Accept-Encoding header
|
||||
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
|
||||
*/
|
||||
class DisableResponseDecompressionPolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of DisableResponseDecompressionPolicy.
|
||||
*
|
||||
* @param nextPolicy -
|
||||
* @param options -
|
||||
*/
|
||||
// The parent constructor is protected.
|
||||
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor */
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
}
|
||||
/**
|
||||
* Sends out request.
|
||||
*
|
||||
* @param request -
|
||||
* @returns
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
request.decompressResponse = false;
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Creates a policy that assigns a unique request id to outgoing requests.
|
||||
* @param requestIdHeaderName - The name of the header to use when assigning the unique id to the request.
|
||||
*/
|
||||
function generateClientRequestIdPolicy(requestIdHeaderName = "x-ms-client-request-id") {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new GenerateClientRequestIdPolicy(nextPolicy, options, requestIdHeaderName);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
class GenerateClientRequestIdPolicy extends BaseRequestPolicy {
|
||||
@@ -57435,198 +56808,138 @@ class GenerateClientRequestIdPolicy extends BaseRequestPolicy {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
let cachedHttpClient;
|
||||
function getCachedDefaultHttpClient() {
|
||||
if (!cachedHttpClient) {
|
||||
cachedHttpClient = new NodeFetchHttpClient();
|
||||
}
|
||||
return cachedHttpClient;
|
||||
function getDefaultUserAgentKey() {
|
||||
return Constants.HeaderConstants.USER_AGENT;
|
||||
}
|
||||
function getPlatformSpecificData() {
|
||||
const runtimeInfo = {
|
||||
key: "Node",
|
||||
value: process.version
|
||||
};
|
||||
const osInfo = {
|
||||
key: "OS",
|
||||
value: `(${os.arch()}-${os.type()}-${os.release()})`
|
||||
};
|
||||
return [runtimeInfo, osInfo];
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function ndJsonPolicy() {
|
||||
function getRuntimeInfo() {
|
||||
const msRestRuntime = {
|
||||
key: "core-http",
|
||||
value: Constants.coreHttpVersion
|
||||
};
|
||||
return [msRestRuntime];
|
||||
}
|
||||
function getUserAgentString(telemetryInfo, keySeparator = " ", valueSeparator = "/") {
|
||||
return telemetryInfo
|
||||
.map((info) => {
|
||||
const value = info.value ? `${valueSeparator}${info.value}` : "";
|
||||
return `${info.key}${value}`;
|
||||
})
|
||||
.join(keySeparator);
|
||||
}
|
||||
const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
|
||||
function getDefaultUserAgentValue() {
|
||||
const runtimeInfo = getRuntimeInfo();
|
||||
const platformSpecificData = getPlatformSpecificData();
|
||||
const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
|
||||
return userAgent;
|
||||
}
|
||||
function userAgentPolicy(userAgentData) {
|
||||
const key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null
|
||||
? getDefaultUserAgentKey()
|
||||
: userAgentData.key;
|
||||
const value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null
|
||||
? getDefaultUserAgentValue()
|
||||
: userAgentData.value;
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new NdJsonPolicy(nextPolicy, options);
|
||||
},
|
||||
return new UserAgentPolicy(nextPolicy, options, key, value);
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* NdJsonPolicy that formats a JSON array as newline-delimited JSON
|
||||
*/
|
||||
class NdJsonPolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of KeepAlivePolicy.
|
||||
*/
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
class UserAgentPolicy extends BaseRequestPolicy {
|
||||
constructor(_nextPolicy, _options, headerKey, headerValue) {
|
||||
super(_nextPolicy, _options);
|
||||
this._nextPolicy = _nextPolicy;
|
||||
this._options = _options;
|
||||
this.headerKey = headerKey;
|
||||
this.headerValue = headerValue;
|
||||
}
|
||||
/**
|
||||
* Sends a request.
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
// There currently isn't a good way to bypass the serializer
|
||||
if (typeof request.body === "string" && request.body.startsWith("[")) {
|
||||
const body = JSON.parse(request.body);
|
||||
if (Array.isArray(body)) {
|
||||
request.body = body.map((item) => JSON.stringify(item) + "\n").join("");
|
||||
}
|
||||
}
|
||||
sendRequest(request) {
|
||||
this.addUserAgentHeader(request);
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
addUserAgentHeader(request) {
|
||||
if (!request.headers) {
|
||||
request.headers = new HttpHeaders();
|
||||
}
|
||||
if (!request.headers.get(this.headerKey) && this.headerValue) {
|
||||
request.headers.set(this.headerKey, this.headerValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Stores the patterns specified in NO_PROXY environment variable.
|
||||
* @internal
|
||||
* Methods that are allowed to follow redirects 301 and 302
|
||||
*/
|
||||
const globalNoProxyList = [];
|
||||
let noProxyListLoaded = false;
|
||||
/** A cache of whether a host should bypass the proxy. */
|
||||
const globalBypassedMap = new Map();
|
||||
function loadEnvironmentProxyValue() {
|
||||
if (!process) {
|
||||
return undefined;
|
||||
}
|
||||
const httpsProxy = getEnvironmentValue(Constants.HTTPS_PROXY);
|
||||
const allProxy = getEnvironmentValue(Constants.ALL_PROXY);
|
||||
const httpProxy = getEnvironmentValue(Constants.HTTP_PROXY);
|
||||
return httpsProxy || allProxy || httpProxy;
|
||||
}
|
||||
/**
|
||||
* Check whether the host of a given `uri` matches any pattern in the no proxy list.
|
||||
* If there's a match, any request sent to the same host shouldn't have the proxy settings set.
|
||||
* This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
|
||||
*/
|
||||
function isBypassed(uri, noProxyList, bypassedMap) {
|
||||
if (noProxyList.length === 0) {
|
||||
return false;
|
||||
}
|
||||
const host = URLBuilder.parse(uri).getHost();
|
||||
if (bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.has(host)) {
|
||||
return bypassedMap.get(host);
|
||||
}
|
||||
let isBypassedFlag = false;
|
||||
for (const pattern of noProxyList) {
|
||||
if (pattern[0] === ".") {
|
||||
// This should match either domain it self or any subdomain or host
|
||||
// .foo.com will match foo.com it self or *.foo.com
|
||||
if (host.endsWith(pattern)) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
else {
|
||||
if (host.length === pattern.length - 1 && host === pattern.slice(1)) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (host === pattern) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.set(host, isBypassedFlag);
|
||||
return isBypassedFlag;
|
||||
}
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
function loadNoProxy() {
|
||||
const noProxy = getEnvironmentValue(Constants.NO_PROXY);
|
||||
noProxyListLoaded = true;
|
||||
if (noProxy) {
|
||||
return noProxy
|
||||
.split(",")
|
||||
.map((item) => item.trim())
|
||||
.filter((item) => item.length);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
/**
|
||||
* Converts a given URL of a proxy server into `ProxySettings` or attempts to retrieve `ProxySettings` from the current environment if one is not passed.
|
||||
* @param proxyUrl - URL of the proxy
|
||||
* @returns The default proxy settings, or undefined.
|
||||
*/
|
||||
function getDefaultProxySettings(proxyUrl) {
|
||||
if (!proxyUrl) {
|
||||
proxyUrl = loadEnvironmentProxyValue();
|
||||
if (!proxyUrl) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
const { username, password, urlWithoutAuth } = extractAuthFromUrl(proxyUrl);
|
||||
const parsedUrl = URLBuilder.parse(urlWithoutAuth);
|
||||
const schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : "";
|
||||
const allowedRedirect = ["GET", "HEAD"];
|
||||
const DefaultRedirectOptions = {
|
||||
handleRedirects: true,
|
||||
maxRetries: 20
|
||||
};
|
||||
function redirectPolicy(maximumRetries = 20) {
|
||||
return {
|
||||
host: schema + parsedUrl.getHost(),
|
||||
port: Number.parseInt(parsedUrl.getPort() || "80"),
|
||||
username,
|
||||
password,
|
||||
create: (nextPolicy, options) => {
|
||||
return new RedirectPolicy(nextPolicy, options, maximumRetries);
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that allows one to apply proxy settings to all requests.
|
||||
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
|
||||
* or HTTP_PROXY environment variables.
|
||||
* @param proxySettings - ProxySettings to use on each request.
|
||||
* @param options - additional settings, for example, custom NO_PROXY patterns
|
||||
*/
|
||||
function proxyPolicy(proxySettings, options) {
|
||||
if (!proxySettings) {
|
||||
proxySettings = getDefaultProxySettings();
|
||||
}
|
||||
if (!noProxyListLoaded) {
|
||||
globalNoProxyList.push(...loadNoProxy());
|
||||
}
|
||||
return {
|
||||
create: (nextPolicy, requestPolicyOptions) => {
|
||||
return new ProxyPolicy(nextPolicy, requestPolicyOptions, proxySettings, options === null || options === void 0 ? void 0 : options.customNoProxyList);
|
||||
},
|
||||
};
|
||||
}
|
||||
function extractAuthFromUrl(url) {
|
||||
const atIndex = url.indexOf("@");
|
||||
if (atIndex === -1) {
|
||||
return { urlWithoutAuth: url };
|
||||
}
|
||||
const schemeIndex = url.indexOf("://");
|
||||
const authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0;
|
||||
const auth = url.substring(authStart, atIndex);
|
||||
const colonIndex = auth.indexOf(":");
|
||||
const hasPassword = colonIndex !== -1;
|
||||
const username = hasPassword ? auth.substring(0, colonIndex) : auth;
|
||||
const password = hasPassword ? auth.substring(colonIndex + 1) : undefined;
|
||||
const urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1);
|
||||
return {
|
||||
username,
|
||||
password,
|
||||
urlWithoutAuth,
|
||||
};
|
||||
}
|
||||
class ProxyPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, proxySettings, customNoProxyList) {
|
||||
class RedirectPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, maxRetries = 20) {
|
||||
super(nextPolicy, options);
|
||||
this.proxySettings = proxySettings;
|
||||
this.customNoProxyList = customNoProxyList;
|
||||
this.maxRetries = maxRetries;
|
||||
}
|
||||
sendRequest(request) {
|
||||
var _a;
|
||||
if (!request.proxySettings &&
|
||||
!isBypassed(request.url, (_a = this.customNoProxyList) !== null && _a !== void 0 ? _a : globalNoProxyList, this.customNoProxyList ? undefined : globalBypassedMap)) {
|
||||
request.proxySettings = this.proxySettings;
|
||||
}
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
return this._nextPolicy
|
||||
.sendRequest(request)
|
||||
.then((response) => handleRedirect(this, response, 0));
|
||||
}
|
||||
}
|
||||
function handleRedirect(policy, response, currentRetries) {
|
||||
const { request, status } = response;
|
||||
const locationHeader = response.headers.get("location");
|
||||
if (locationHeader &&
|
||||
(status === 300 ||
|
||||
(status === 301 && allowedRedirect.includes(request.method)) ||
|
||||
(status === 302 && allowedRedirect.includes(request.method)) ||
|
||||
(status === 303 && request.method === "POST") ||
|
||||
status === 307) &&
|
||||
(!policy.maxRetries || currentRetries < policy.maxRetries)) {
|
||||
const builder = URLBuilder.parse(request.url);
|
||||
builder.setPath(locationHeader);
|
||||
request.url = builder.toString();
|
||||
// POST request with Status code 303 should be converted into a
|
||||
// redirected GET request if the redirect url is present in the location header
|
||||
if (status === 303) {
|
||||
request.method = "GET";
|
||||
delete request.body;
|
||||
}
|
||||
return policy._nextPolicy
|
||||
.sendRequest(request)
|
||||
.then((res) => handleRedirect(policy, res, currentRetries + 1));
|
||||
}
|
||||
return Promise.resolve(response);
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function rpRegistrationPolicy(retryTimeout = 30) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new RPRegistrationPolicy(nextPolicy, options, retryTimeout);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
class RPRegistrationPolicy extends BaseRequestPolicy {
|
||||
@@ -57771,52 +57084,193 @@ async function getRegistrationStatus(policy, url, originalRequest) {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Default options for the cycler if none are provided
|
||||
const DEFAULT_CYCLER_OPTIONS = {
|
||||
forcedRefreshWindowInMs: 1000,
|
||||
retryIntervalInMs: 3000,
|
||||
refreshWindowInMs: 1000 * 60 * 2 // Start refreshing 2m before expiry
|
||||
};
|
||||
/**
|
||||
* Creates a policy that signs outgoing requests by calling to the provided `authenticationProvider`'s `signRequest` method.
|
||||
* @param authenticationProvider - The authentication provider.
|
||||
* @returns An instance of the {@link SigningPolicy}.
|
||||
* Converts an an unreliable access token getter (which may resolve with null)
|
||||
* into an AccessTokenGetter by retrying the unreliable getter in a regular
|
||||
* interval.
|
||||
*
|
||||
* @param getAccessToken - a function that produces a promise of an access
|
||||
* token that may fail by returning null
|
||||
* @param retryIntervalInMs - the time (in milliseconds) to wait between retry
|
||||
* attempts
|
||||
* @param timeoutInMs - the timestamp after which the refresh attempt will fail,
|
||||
* throwing an exception
|
||||
* @returns - a promise that, if it resolves, will resolve with an access token
|
||||
*/
|
||||
function signingPolicy(authenticationProvider) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new SigningPolicy(nextPolicy, options, authenticationProvider);
|
||||
},
|
||||
};
|
||||
async function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {
|
||||
// This wrapper handles exceptions gracefully as long as we haven't exceeded
|
||||
// the timeout.
|
||||
async function tryGetAccessToken() {
|
||||
if (Date.now() < timeoutInMs) {
|
||||
try {
|
||||
return await getAccessToken();
|
||||
}
|
||||
catch (_a) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
const finalToken = await getAccessToken();
|
||||
// Timeout is up, so throw if it's still null
|
||||
if (finalToken === null) {
|
||||
throw new Error("Failed to refresh access token.");
|
||||
}
|
||||
return finalToken;
|
||||
}
|
||||
}
|
||||
let token = await tryGetAccessToken();
|
||||
while (token === null) {
|
||||
await delay(retryIntervalInMs);
|
||||
token = await tryGetAccessToken();
|
||||
}
|
||||
return token;
|
||||
}
|
||||
/**
|
||||
* A policy that signs outgoing requests by calling to the provided `authenticationProvider`'s `signRequest` method.
|
||||
* Creates a token cycler from a credential, scopes, and optional settings.
|
||||
*
|
||||
* A token cycler represents a way to reliably retrieve a valid access token
|
||||
* from a TokenCredential. It will handle initializing the token, refreshing it
|
||||
* when it nears expiration, and synchronizes refresh attempts to avoid
|
||||
* concurrency hazards.
|
||||
*
|
||||
* @param credential - the underlying TokenCredential that provides the access
|
||||
* token
|
||||
* @param scopes - the scopes to request authorization for
|
||||
* @param tokenCyclerOptions - optionally override default settings for the cycler
|
||||
*
|
||||
* @returns - a function that reliably produces a valid access token
|
||||
*/
|
||||
class SigningPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, authenticationProvider) {
|
||||
super(nextPolicy, options);
|
||||
this.authenticationProvider = authenticationProvider;
|
||||
function createTokenCycler(credential, scopes, tokenCyclerOptions) {
|
||||
let refreshWorker = null;
|
||||
let token = null;
|
||||
const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);
|
||||
/**
|
||||
* This little holder defines several predicates that we use to construct
|
||||
* the rules of refreshing the token.
|
||||
*/
|
||||
const cycler = {
|
||||
/**
|
||||
* Produces true if a refresh job is currently in progress.
|
||||
*/
|
||||
get isRefreshing() {
|
||||
return refreshWorker !== null;
|
||||
},
|
||||
/**
|
||||
* Produces true if the cycler SHOULD refresh (we are within the refresh
|
||||
* window and not already refreshing)
|
||||
*/
|
||||
get shouldRefresh() {
|
||||
var _a;
|
||||
return (!cycler.isRefreshing &&
|
||||
((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now());
|
||||
},
|
||||
/**
|
||||
* Produces true if the cycler MUST refresh (null or nearly-expired
|
||||
* token).
|
||||
*/
|
||||
get mustRefresh() {
|
||||
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Starts a refresh job or returns the existing job if one is already
|
||||
* running.
|
||||
*/
|
||||
function refresh(getTokenOptions) {
|
||||
var _a;
|
||||
if (!cycler.isRefreshing) {
|
||||
// We bind `scopes` here to avoid passing it around a lot
|
||||
const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);
|
||||
// Take advantage of promise chaining to insert an assignment to `token`
|
||||
// before the refresh can be considered done.
|
||||
refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,
|
||||
// If we don't have a token, then we should timeout immediately
|
||||
(_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now())
|
||||
.then((_token) => {
|
||||
refreshWorker = null;
|
||||
token = _token;
|
||||
return token;
|
||||
})
|
||||
.catch((reason) => {
|
||||
// We also should reset the refresher if we enter a failed state. All
|
||||
// existing awaiters will throw, but subsequent requests will start a
|
||||
// new retry chain.
|
||||
refreshWorker = null;
|
||||
token = null;
|
||||
throw reason;
|
||||
});
|
||||
}
|
||||
return refreshWorker;
|
||||
}
|
||||
signRequest(request) {
|
||||
return this.authenticationProvider.signRequest(request);
|
||||
}
|
||||
sendRequest(request) {
|
||||
return this.signRequest(request).then((nextRequest) => this._nextPolicy.sendRequest(nextRequest));
|
||||
return async (tokenOptions) => {
|
||||
//
|
||||
// Simple rules:
|
||||
// - If we MUST refresh, then return the refresh task, blocking
|
||||
// the pipeline until a token is available.
|
||||
// - If we SHOULD refresh, then run refresh but don't return it
|
||||
// (we can still use the cached token).
|
||||
// - Return the token, since it's fine if we didn't return in
|
||||
// step 1.
|
||||
//
|
||||
if (cycler.mustRefresh)
|
||||
return refresh(tokenOptions);
|
||||
if (cycler.shouldRefresh) {
|
||||
refresh(tokenOptions);
|
||||
}
|
||||
return token;
|
||||
};
|
||||
}
|
||||
// #endregion
|
||||
/**
|
||||
* Creates a new factory for a RequestPolicy that applies a bearer token to
|
||||
* the requests' `Authorization` headers.
|
||||
*
|
||||
* @param credential - The TokenCredential implementation that can supply the bearer token.
|
||||
* @param scopes - The scopes for which the bearer token applies.
|
||||
*/
|
||||
function bearerTokenAuthenticationPolicy(credential, scopes) {
|
||||
// This simple function encapsulates the entire process of reliably retrieving the token
|
||||
const getToken = createTokenCycler(credential, scopes /* , options */);
|
||||
class BearerTokenAuthenticationPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
}
|
||||
async sendRequest(webResource) {
|
||||
if (!webResource.url.toLowerCase().startsWith("https://")) {
|
||||
throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");
|
||||
}
|
||||
const { token } = await getToken({
|
||||
abortSignal: webResource.abortSignal,
|
||||
tracingOptions: {
|
||||
tracingContext: webResource.tracingContext
|
||||
}
|
||||
});
|
||||
webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);
|
||||
return this._nextPolicy.sendRequest(webResource);
|
||||
}
|
||||
}
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new BearerTokenAuthenticationPolicy(nextPolicy, options);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* A policy that retries when there's a system error, identified by the codes "ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNREFUSED", "ECONNRESET" or "ENOENT".
|
||||
* @param retryCount - Maximum number of retries.
|
||||
* @param retryInterval - The client retry interval, in milliseconds.
|
||||
* @param minRetryInterval - The minimum retry interval, in milliseconds.
|
||||
* @param maxRetryInterval - The maximum retry interval, in milliseconds.
|
||||
* @returns An instance of the {@link SystemErrorRetryPolicy}
|
||||
*/
|
||||
function systemErrorRetryPolicy(retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that retries when there's a system error, identified by the codes "ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNREFUSED", "ECONNRESET" or "ENOENT".
|
||||
* @param retryCount - The client retry count.
|
||||
* @param retryInterval - The client retry interval, in milliseconds.
|
||||
* @param minRetryInterval - The minimum retry interval, in milliseconds.
|
||||
@@ -57837,10 +57291,10 @@ class SystemErrorRetryPolicy extends BaseRequestPolicy {
|
||||
sendRequest(request) {
|
||||
return this._nextPolicy
|
||||
.sendRequest(request.clone())
|
||||
.catch((error) => retry(this, request, error.response, error));
|
||||
.catch((error) => retry$1(this, request, error.response, error));
|
||||
}
|
||||
}
|
||||
async function retry(policy, request, operationResponse, err, retryData) {
|
||||
async function retry$1(policy, request, operationResponse, err, retryData) {
|
||||
retryData = updateRetryData(policy, retryData, err);
|
||||
function shouldPolicyRetry(_response, error) {
|
||||
if (error &&
|
||||
@@ -57861,7 +57315,7 @@ async function retry(policy, request, operationResponse, err, retryData) {
|
||||
return policy._nextPolicy.sendRequest(request.clone());
|
||||
}
|
||||
catch (nestedErr) {
|
||||
return retry(policy, request, operationResponse, nestedErr, retryData);
|
||||
return retry$1(policy, request, operationResponse, nestedErr, retryData);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -57873,6 +57327,155 @@ async function retry(policy, request, operationResponse, err, retryData) {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
(function (QueryCollectionFormat) {
|
||||
QueryCollectionFormat["Csv"] = ",";
|
||||
QueryCollectionFormat["Ssv"] = " ";
|
||||
QueryCollectionFormat["Tsv"] = "\t";
|
||||
QueryCollectionFormat["Pipes"] = "|";
|
||||
QueryCollectionFormat["Multi"] = "Multi";
|
||||
})(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {}));
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Stores the patterns specified in NO_PROXY environment variable.
|
||||
* @internal
|
||||
*/
|
||||
const globalNoProxyList = [];
|
||||
let noProxyListLoaded = false;
|
||||
/** A cache of whether a host should bypass the proxy. */
|
||||
const globalBypassedMap = new Map();
|
||||
function loadEnvironmentProxyValue() {
|
||||
if (!process) {
|
||||
return undefined;
|
||||
}
|
||||
const httpsProxy = getEnvironmentValue(Constants.HTTPS_PROXY);
|
||||
const allProxy = getEnvironmentValue(Constants.ALL_PROXY);
|
||||
const httpProxy = getEnvironmentValue(Constants.HTTP_PROXY);
|
||||
return httpsProxy || allProxy || httpProxy;
|
||||
}
|
||||
/**
|
||||
* Check whether the host of a given `uri` matches any pattern in the no proxy list.
|
||||
* If there's a match, any request sent to the same host shouldn't have the proxy settings set.
|
||||
* This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
|
||||
*/
|
||||
function isBypassed(uri, noProxyList, bypassedMap) {
|
||||
if (noProxyList.length === 0) {
|
||||
return false;
|
||||
}
|
||||
const host = URLBuilder.parse(uri).getHost();
|
||||
if (bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.has(host)) {
|
||||
return bypassedMap.get(host);
|
||||
}
|
||||
let isBypassedFlag = false;
|
||||
for (const pattern of noProxyList) {
|
||||
if (pattern[0] === ".") {
|
||||
// This should match either domain it self or any subdomain or host
|
||||
// .foo.com will match foo.com it self or *.foo.com
|
||||
if (host.endsWith(pattern)) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
else {
|
||||
if (host.length === pattern.length - 1 && host === pattern.slice(1)) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (host === pattern) {
|
||||
isBypassedFlag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.set(host, isBypassedFlag);
|
||||
return isBypassedFlag;
|
||||
}
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
function loadNoProxy() {
|
||||
const noProxy = getEnvironmentValue(Constants.NO_PROXY);
|
||||
noProxyListLoaded = true;
|
||||
if (noProxy) {
|
||||
return noProxy
|
||||
.split(",")
|
||||
.map((item) => item.trim())
|
||||
.filter((item) => item.length);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
function getDefaultProxySettings(proxyUrl) {
|
||||
if (!proxyUrl) {
|
||||
proxyUrl = loadEnvironmentProxyValue();
|
||||
if (!proxyUrl) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
const { username, password, urlWithoutAuth } = extractAuthFromUrl(proxyUrl);
|
||||
const parsedUrl = URLBuilder.parse(urlWithoutAuth);
|
||||
const schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : "";
|
||||
return {
|
||||
host: schema + parsedUrl.getHost(),
|
||||
port: Number.parseInt(parsedUrl.getPort() || "80"),
|
||||
username,
|
||||
password
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that allows one to apply proxy settings to all requests.
|
||||
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
|
||||
* or HTTP_PROXY environment variables.
|
||||
* @param proxySettings - ProxySettings to use on each request.
|
||||
* @param options - additional settings, for example, custom NO_PROXY patterns
|
||||
*/
|
||||
function proxyPolicy(proxySettings, options) {
|
||||
if (!proxySettings) {
|
||||
proxySettings = getDefaultProxySettings();
|
||||
}
|
||||
if (!noProxyListLoaded) {
|
||||
globalNoProxyList.push(...loadNoProxy());
|
||||
}
|
||||
return {
|
||||
create: (nextPolicy, requestPolicyOptions) => {
|
||||
return new ProxyPolicy(nextPolicy, requestPolicyOptions, proxySettings, options === null || options === void 0 ? void 0 : options.customNoProxyList);
|
||||
}
|
||||
};
|
||||
}
|
||||
function extractAuthFromUrl(url) {
|
||||
const atIndex = url.indexOf("@");
|
||||
if (atIndex === -1) {
|
||||
return { urlWithoutAuth: url };
|
||||
}
|
||||
const schemeIndex = url.indexOf("://");
|
||||
const authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0;
|
||||
const auth = url.substring(authStart, atIndex);
|
||||
const colonIndex = auth.indexOf(":");
|
||||
const hasPassword = colonIndex !== -1;
|
||||
const username = hasPassword ? auth.substring(0, colonIndex) : auth;
|
||||
const password = hasPassword ? auth.substring(colonIndex + 1) : undefined;
|
||||
const urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1);
|
||||
return {
|
||||
username,
|
||||
password,
|
||||
urlWithoutAuth
|
||||
};
|
||||
}
|
||||
class ProxyPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, proxySettings, customNoProxyList) {
|
||||
super(nextPolicy, options);
|
||||
this.proxySettings = proxySettings;
|
||||
this.customNoProxyList = customNoProxyList;
|
||||
}
|
||||
sendRequest(request) {
|
||||
var _a;
|
||||
if (!request.proxySettings &&
|
||||
!isBypassed(request.url, (_a = this.customNoProxyList) !== null && _a !== void 0 ? _a : globalNoProxyList, this.customNoProxyList ? undefined : globalBypassedMap)) {
|
||||
request.proxySettings = this.proxySettings;
|
||||
}
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
/**
|
||||
@@ -57882,28 +57485,15 @@ const DEFAULT_CLIENT_MAX_RETRY_COUNT = 3;
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const StatusCodes = Constants.HttpConstants.StatusCodes;
|
||||
/**
|
||||
* Creates a policy that re-sends the request if the response indicates the request failed because of throttling reasons.
|
||||
* For example, if the response contains a `Retry-After` header, it will retry sending the request based on the value of that header.
|
||||
*
|
||||
* To learn more, please refer to
|
||||
* https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,
|
||||
* https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and
|
||||
* https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors
|
||||
* @returns
|
||||
*/
|
||||
function throttlingRetryPolicy() {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new ThrottlingRetryPolicy(nextPolicy, options);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
const StandardAbortMessage = "The operation was aborted.";
|
||||
const StandardAbortMessage$1 = "The operation was aborted.";
|
||||
/**
|
||||
* Creates a policy that re-sends the request if the response indicates the request failed because of throttling reasons.
|
||||
* For example, if the response contains a `Retry-After` header, it will retry sending the request based on the value of that header.
|
||||
*
|
||||
* To learn more, please refer to
|
||||
* https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,
|
||||
* https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and
|
||||
@@ -57934,10 +57524,10 @@ class ThrottlingRetryPolicy extends BaseRequestPolicy {
|
||||
this.numberOfRetries += 1;
|
||||
await delay(delayInMs, undefined, {
|
||||
abortSignal: httpRequest.abortSignal,
|
||||
abortErrorMsg: StandardAbortMessage,
|
||||
abortErrorMsg: StandardAbortMessage$1
|
||||
});
|
||||
if ((_a = httpRequest.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
||||
throw new abortController.AbortError(StandardAbortMessage);
|
||||
throw new abortController.AbortError(StandardAbortMessage$1);
|
||||
}
|
||||
if (this.numberOfRetries < DEFAULT_CLIENT_MAX_RETRY_COUNT) {
|
||||
return this.sendRequest(httpRequest);
|
||||
@@ -57971,26 +57561,77 @@ class ThrottlingRetryPolicy extends BaseRequestPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function signingPolicy(authenticationProvider) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new SigningPolicy(nextPolicy, options, authenticationProvider);
|
||||
}
|
||||
};
|
||||
}
|
||||
class SigningPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, authenticationProvider) {
|
||||
super(nextPolicy, options);
|
||||
this.authenticationProvider = authenticationProvider;
|
||||
}
|
||||
signRequest(request) {
|
||||
return this.authenticationProvider.signRequest(request);
|
||||
}
|
||||
sendRequest(request) {
|
||||
return this.signRequest(request).then((nextRequest) => this._nextPolicy.sendRequest(nextRequest));
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const DefaultKeepAliveOptions = {
|
||||
enable: true
|
||||
};
|
||||
function keepAlivePolicy(keepAliveOptions) {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* KeepAlivePolicy is a policy used to control keep alive settings for every request.
|
||||
*/
|
||||
class KeepAlivePolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of KeepAlivePolicy.
|
||||
*
|
||||
* @param nextPolicy -
|
||||
* @param options -
|
||||
* @param keepAliveOptions -
|
||||
*/
|
||||
constructor(nextPolicy, options, keepAliveOptions) {
|
||||
super(nextPolicy, options);
|
||||
this.keepAliveOptions = keepAliveOptions;
|
||||
}
|
||||
/**
|
||||
* Sends out request.
|
||||
*
|
||||
* @param request -
|
||||
* @returns
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
request.keepAlive = this.keepAliveOptions.enable;
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const createSpan = coreTracing.createSpanFunction({
|
||||
packagePrefix: "",
|
||||
namespace: "",
|
||||
namespace: ""
|
||||
});
|
||||
/**
|
||||
* Creates a policy that wraps outgoing requests with a tracing span.
|
||||
* @param tracingOptions - Tracing options.
|
||||
* @returns An instance of the {@link TracingPolicy} class.
|
||||
*/
|
||||
function tracingPolicy(tracingOptions = {}) {
|
||||
return {
|
||||
create(nextPolicy, options) {
|
||||
return new TracingPolicy(nextPolicy, options, tracingOptions);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy that wraps outgoing requests with a tracing span.
|
||||
*/
|
||||
class TracingPolicy extends BaseRequestPolicy {
|
||||
constructor(nextPolicy, options, tracingOptions) {
|
||||
super(nextPolicy, options);
|
||||
@@ -58017,13 +57658,14 @@ class TracingPolicy extends BaseRequestPolicy {
|
||||
tryCreateSpan(request) {
|
||||
var _a;
|
||||
try {
|
||||
const path = URLBuilder.parse(request.url).getPath() || "/";
|
||||
// Passing spanOptions as part of tracingOptions to maintain compatibility @azure/core-tracing@preview.13 and earlier.
|
||||
// We can pass this as a separate parameter once we upgrade to the latest core-tracing.
|
||||
const { span } = createSpan(`HTTP ${request.method}`, {
|
||||
const { span } = createSpan(path, {
|
||||
tracingOptions: {
|
||||
spanOptions: Object.assign(Object.assign({}, request.spanOptions), { kind: coreTracing.SpanKind.CLIENT }),
|
||||
tracingContext: request.tracingContext,
|
||||
},
|
||||
tracingContext: request.tracingContext
|
||||
}
|
||||
});
|
||||
// If the span is not recording, don't do any more work.
|
||||
if (!span.isRecording()) {
|
||||
@@ -58037,7 +57679,7 @@ class TracingPolicy extends BaseRequestPolicy {
|
||||
span.setAttributes({
|
||||
"http.method": request.method,
|
||||
"http.url": request.url,
|
||||
requestId: request.requestId,
|
||||
requestId: request.requestId
|
||||
});
|
||||
if (this.userAgent) {
|
||||
span.setAttribute("http.user_agent", this.userAgent);
|
||||
@@ -58064,7 +57706,7 @@ class TracingPolicy extends BaseRequestPolicy {
|
||||
try {
|
||||
span.setStatus({
|
||||
code: coreTracing.SpanStatusCode.ERROR,
|
||||
message: err.message,
|
||||
message: err.message
|
||||
});
|
||||
if (err.statusCode) {
|
||||
span.setAttribute("http.status_code", err.statusCode);
|
||||
@@ -58083,7 +57725,7 @@ class TracingPolicy extends BaseRequestPolicy {
|
||||
span.setAttribute("serviceRequestId", serviceRequestId);
|
||||
}
|
||||
span.setStatus({
|
||||
code: coreTracing.SpanStatusCode.OK,
|
||||
code: coreTracing.SpanStatusCode.OK
|
||||
});
|
||||
span.end();
|
||||
}
|
||||
@@ -58093,6 +57735,88 @@ class TracingPolicy extends BaseRequestPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* Returns a request policy factory that can be used to create an instance of
|
||||
* {@link DisableResponseDecompressionPolicy}.
|
||||
*/
|
||||
function disableResponseDecompressionPolicy() {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new DisableResponseDecompressionPolicy(nextPolicy, options);
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* A policy to disable response decompression according to Accept-Encoding header
|
||||
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
|
||||
*/
|
||||
class DisableResponseDecompressionPolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of DisableResponseDecompressionPolicy.
|
||||
*
|
||||
* @param nextPolicy -
|
||||
* @param options -
|
||||
*/
|
||||
// The parent constructor is protected.
|
||||
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor */
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
}
|
||||
/**
|
||||
* Sends out request.
|
||||
*
|
||||
* @param request -
|
||||
* @returns
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
request.decompressResponse = false;
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
function ndJsonPolicy() {
|
||||
return {
|
||||
create: (nextPolicy, options) => {
|
||||
return new NdJsonPolicy(nextPolicy, options);
|
||||
}
|
||||
};
|
||||
}
|
||||
/**
|
||||
* NdJsonPolicy that formats a JSON array as newline-delimited JSON
|
||||
*/
|
||||
class NdJsonPolicy extends BaseRequestPolicy {
|
||||
/**
|
||||
* Creates an instance of KeepAlivePolicy.
|
||||
*/
|
||||
constructor(nextPolicy, options) {
|
||||
super(nextPolicy, options);
|
||||
}
|
||||
/**
|
||||
* Sends a request.
|
||||
*/
|
||||
async sendRequest(request) {
|
||||
// There currently isn't a good way to bypass the serializer
|
||||
if (typeof request.body === "string" && request.body.startsWith("[")) {
|
||||
const body = JSON.parse(request.body);
|
||||
if (Array.isArray(body)) {
|
||||
request.body = body.map((item) => JSON.stringify(item) + "\n").join("");
|
||||
}
|
||||
}
|
||||
return this._nextPolicy.sendRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
let cachedHttpClient;
|
||||
function getCachedDefaultHttpClient() {
|
||||
if (!cachedHttpClient) {
|
||||
cachedHttpClient = new NodeFetchHttpClient();
|
||||
}
|
||||
return cachedHttpClient;
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* ServiceClient sends service requests and receives responses.
|
||||
@@ -58142,7 +57866,7 @@ class ServiceClient {
|
||||
bearerTokenPolicyFactory = bearerTokenAuthenticationPolicy(credentials, credentialScopes);
|
||||
}
|
||||
return bearerTokenPolicyFactory.create(nextPolicy, createOptions);
|
||||
},
|
||||
}
|
||||
};
|
||||
};
|
||||
authPolicyFactory = wrappedPolicyFactory();
|
||||
@@ -58377,7 +58101,7 @@ function serializeRequestBody(serviceClient, httpRequest, operationArguments, op
|
||||
const updatedOptions = {
|
||||
rootName: (_c = serializerOptions.rootName) !== null && _c !== void 0 ? _c : "",
|
||||
includeRoot: (_d = serializerOptions.includeRoot) !== null && _d !== void 0 ? _d : false,
|
||||
xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY,
|
||||
xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY
|
||||
};
|
||||
const xmlCharKey = serializerOptions.xmlCharKey;
|
||||
if (operationSpec.requestBody && operationSpec.requestBody.mapper) {
|
||||
@@ -58396,13 +58120,13 @@ function serializeRequestBody(serviceClient, httpRequest, operationArguments, op
|
||||
if (typeName === MapperType.Sequence) {
|
||||
httpRequest.body = stringifyXML(prepareXMLRootList(value, xmlElementName || xmlName || serializedName, xmlnsKey, xmlNamespace), {
|
||||
rootName: xmlName || serializedName,
|
||||
xmlCharKey,
|
||||
xmlCharKey
|
||||
});
|
||||
}
|
||||
else if (!isStream) {
|
||||
httpRequest.body = stringifyXML(value, {
|
||||
rootName: xmlName || serializedName,
|
||||
xmlCharKey,
|
||||
xmlCharKey
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -58486,12 +58210,6 @@ function createDefaultRequestPolicyFactories(authPolicyFactory, options) {
|
||||
factories.push(logPolicy({ logger: logger.info }));
|
||||
return factories;
|
||||
}
|
||||
/**
|
||||
* Creates an HTTP pipeline based on the given options.
|
||||
* @param pipelineOptions - Defines options that are used to configure policies in the HTTP pipeline for an SDK client.
|
||||
* @param authPolicyFactory - An optional authentication policy factory to use for signing requests.
|
||||
* @returns A set of options that can be passed to create a new {@link ServiceClient}.
|
||||
*/
|
||||
function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {
|
||||
const requestPolicyFactories = [];
|
||||
if (pipelineOptions.sendStreamingJson) {
|
||||
@@ -58530,7 +58248,7 @@ function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {
|
||||
}
|
||||
return {
|
||||
httpClient: pipelineOptions.httpClient,
|
||||
requestPolicyFactories,
|
||||
requestPolicyFactories
|
||||
};
|
||||
}
|
||||
function getOperationArgumentValueFromParameter(serviceClient, operationArguments, parameter, serializer) {
|
||||
@@ -58606,18 +58324,12 @@ function getPropertyFromParameterPath(parent, parameterPath) {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Parses an {@link HttpOperationResponse} into a normalized HTTP response object ({@link RestResponse}).
|
||||
* @param _response - Wrapper object for http response.
|
||||
* @param responseSpec - Mappers for how to parse the response properties.
|
||||
* @returns - A normalized response object.
|
||||
*/
|
||||
function flattenResponse(_response, responseSpec) {
|
||||
const parsedHeaders = _response.parsedHeaders;
|
||||
const bodyMapper = responseSpec && responseSpec.bodyMapper;
|
||||
const addOperationResponse = (obj) => {
|
||||
return Object.defineProperty(obj, "_response", {
|
||||
value: _response,
|
||||
value: _response
|
||||
});
|
||||
};
|
||||
if (bodyMapper) {
|
||||
@@ -58703,16 +58415,9 @@ class ExpiringAccessTokenCache {
|
||||
this.cachedToken = undefined;
|
||||
this.tokenRefreshBufferMs = tokenRefreshBufferMs;
|
||||
}
|
||||
/**
|
||||
* Saves an access token into the internal in-memory cache.
|
||||
* @param accessToken - Access token or undefined to clear the cache.
|
||||
*/
|
||||
setCachedToken(accessToken) {
|
||||
this.cachedToken = accessToken;
|
||||
}
|
||||
/**
|
||||
* Returns the cached access token, or `undefined` if one is not cached or the cached one is expiring soon.
|
||||
*/
|
||||
getCachedToken() {
|
||||
if (this.cachedToken &&
|
||||
Date.now() + this.tokenRefreshBufferMs >= this.cachedToken.expiresOnTimestamp) {
|
||||
@@ -58771,9 +58476,6 @@ class AccessTokenRefresher {
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
const HeaderConstants = Constants.HeaderConstants;
|
||||
const DEFAULT_AUTHORIZATION_SCHEME = "Basic";
|
||||
/**
|
||||
* A simple {@link ServiceClientCredential} that authenticates with a username and a password.
|
||||
*/
|
||||
class BasicAuthenticationCredentials {
|
||||
/**
|
||||
* Creates a new BasicAuthenticationCredentials object.
|
||||
@@ -58783,10 +58485,6 @@ class BasicAuthenticationCredentials {
|
||||
* @param authorizationScheme - The authorization scheme.
|
||||
*/
|
||||
constructor(userName, password, authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME) {
|
||||
/**
|
||||
* Authorization scheme. Defaults to "Basic".
|
||||
* More information about authorization schemes is available here: https://developer.mozilla.org/docs/Web/HTTP/Authentication#authentication_schemes
|
||||
*/
|
||||
this.authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME;
|
||||
if (userName === null || userName === undefined || typeof userName.valueOf() !== "string") {
|
||||
throw new Error("userName cannot be null or undefined and must be of type string.");
|
||||
@@ -58866,9 +58564,6 @@ class ApiKeyCredentials {
|
||||
}
|
||||
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
/**
|
||||
* A {@link TopicCredentials} object used for Azure Event Grid.
|
||||
*/
|
||||
class TopicCredentials extends ApiKeyCredentials {
|
||||
/**
|
||||
* Creates a new EventGrid TopicCredentials object.
|
||||
@@ -58881,8 +58576,8 @@ class TopicCredentials extends ApiKeyCredentials {
|
||||
}
|
||||
const options = {
|
||||
inHeader: {
|
||||
"aeg-sas-key": topicKey,
|
||||
},
|
||||
"aeg-sas-key": topicKey
|
||||
}
|
||||
};
|
||||
super(options);
|
||||
}
|
||||
@@ -58890,7 +58585,9 @@ class TopicCredentials extends ApiKeyCredentials {
|
||||
|
||||
Object.defineProperty(exports, 'isTokenCredential', {
|
||||
enumerable: true,
|
||||
get: function () { return coreAuth.isTokenCredential; }
|
||||
get: function () {
|
||||
return coreAuth.isTokenCredential;
|
||||
}
|
||||
});
|
||||
exports.AccessTokenRefresher = AccessTokenRefresher;
|
||||
exports.ApiKeyCredentials = ApiKeyCredentials;
|
||||
|
||||
+114
-162
@@ -1,44 +1,38 @@
|
||||
# Examples
|
||||
|
||||
- [C# - NuGet](#c---nuget)
|
||||
- [D - DUB](#d---dub)
|
||||
- [POSIX](#posix)
|
||||
- [Windows](#windows)
|
||||
- [Elixir - Mix](#elixir---mix)
|
||||
- [Go - Modules](#go---modules)
|
||||
- [Linux](#linux)
|
||||
- [macOS](#macos)
|
||||
- [Windows](#windows-1)
|
||||
- [Haskell - Cabal](#haskell---cabal)
|
||||
- [Java - Gradle](#java---gradle)
|
||||
- [Java - Maven](#java---maven)
|
||||
- [Node - npm](#node---npm)
|
||||
- [macOS and Ubuntu](#macos-and-ubuntu)
|
||||
- [Windows](#windows-2)
|
||||
- [Using multiple systems and `npm config`](#using-multiple-systems-and-npm-config)
|
||||
- [Node - Lerna](#node---lerna)
|
||||
- [Node - Yarn](#node---yarn)
|
||||
- [Node - Yarn 2](#node---yarn-2)
|
||||
- [OCaml/Reason - esy](#ocamlreason---esy)
|
||||
- [PHP - Composer](#php---composer)
|
||||
- [Python - pip](#python---pip)
|
||||
- [Simple example](#simple-example)
|
||||
- [Multiple OS's in a workflow](#multiple-oss-in-a-workflow)
|
||||
- [Multiple OS's in a workflow with a matrix](#multiple-oss-in-a-workflow-with-a-matrix)
|
||||
- [Using pip to get cache location](#using-pip-to-get-cache-location)
|
||||
- [Python - pipenv](#python---pipenv)
|
||||
- [R - renv](#r---renv)
|
||||
- [Simple example](#simple-example-1)
|
||||
- [Multiple OS's in a workflow](#multiple-oss-in-a-workflow-1)
|
||||
- [Ruby - Bundler](#ruby---bundler)
|
||||
- [Rust - Cargo](#rust---cargo)
|
||||
- [Scala - SBT](#scala---sbt)
|
||||
- [Swift, Objective-C - Carthage](#swift-objective-c---carthage)
|
||||
- [Swift, Objective-C - CocoaPods](#swift-objective-c---cocoapods)
|
||||
- [Swift - Swift Package Manager](#swift---swift-package-manager)
|
||||
- [Examples](#examples)
|
||||
- [C# - NuGet](#c---nuget)
|
||||
- [D - DUB](#d---dub)
|
||||
- [Elixir - Mix](#elixir---mix)
|
||||
- [Go - Modules](#go---modules)
|
||||
- [Haskell - Cabal](#haskell---cabal)
|
||||
- [Java - Gradle](#java---gradle)
|
||||
- [Java - Maven](#java---maven)
|
||||
- [Node - npm](#node---npm)
|
||||
- [macOS and Ubuntu](#macos-and-ubuntu)
|
||||
- [Windows](#windows)
|
||||
- [Using multiple systems and `npm config`](#using-multiple-systems-and-npm-config)
|
||||
- [Node - Lerna](#node---lerna)
|
||||
- [Node - Yarn](#node---yarn)
|
||||
- [Node - Yarn 2](#node---yarn-2)
|
||||
- [OCaml/Reason - esy](#ocamlreason---esy)
|
||||
- [PHP - Composer](#php---composer)
|
||||
- [Python - pip](#python---pip)
|
||||
- [Simple example](#simple-example)
|
||||
- [Multiple OSes in a workflow](#multiple-oss-in-a-workflow)
|
||||
- [Using pip to get cache location](#using-pip-to-get-cache-location)
|
||||
- [Using a script to get cache location](#using-a-script-to-get-cache-location)
|
||||
- [R - renv](#r---renv)
|
||||
- [Simple example](#simple-example-1)
|
||||
- [Multiple OSes in a workflow](#multiple-oss-in-a-workflow-1)
|
||||
- [Ruby - Bundler](#ruby---bundler)
|
||||
- [Rust - Cargo](#rust---cargo)
|
||||
- [Scala - SBT](#scala---sbt)
|
||||
- [Swift, Objective-C - Carthage](#swift-objective-c---carthage)
|
||||
- [Swift, Objective-C - CocoaPods](#swift-objective-c---cocoapods)
|
||||
- [Swift - Swift Package Manager](#swift---swift-package-manager)
|
||||
|
||||
## C# - NuGet
|
||||
|
||||
Using [NuGet lock files](https://docs.microsoft.com/nuget/consume-packages/package-references-in-project-files#locking-dependencies):
|
||||
|
||||
```yaml
|
||||
@@ -52,11 +46,10 @@ Using [NuGet lock files](https://docs.microsoft.com/nuget/consume-packages/packa
|
||||
|
||||
Depending on the environment, huge packages might be pre-installed in the global cache folder.
|
||||
With `actions/cache@v2` you can now exclude unwanted packages with [exclude pattern](https://github.com/actions/toolkit/tree/main/packages/glob#exclude-patterns)
|
||||
|
||||
```yaml
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
path: |
|
||||
~/.nuget/packages
|
||||
!~/.nuget/packages/unwanted
|
||||
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
|
||||
@@ -103,54 +96,21 @@ steps:
|
||||
```
|
||||
|
||||
## Elixir - Mix
|
||||
|
||||
```yaml
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
deps
|
||||
_build
|
||||
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
|
||||
path: deps
|
||||
key: ${{ runner.os }}-mix-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-mix-
|
||||
```
|
||||
|
||||
## Go - Modules
|
||||
|
||||
### Linux
|
||||
|
||||
```yaml
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/.cache/go-build
|
||||
~/go/pkg/mod
|
||||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-go-
|
||||
```
|
||||
|
||||
### macOS
|
||||
|
||||
```yaml
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/Library/Caches/go-build
|
||||
~/go/pkg/mod
|
||||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-go-
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
```yaml
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
%LocalAppData%\go-build
|
||||
~/go/pkg/mod
|
||||
path: ~/go/pkg/mod
|
||||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-go-
|
||||
@@ -168,21 +128,18 @@ We cache the elements of the Cabal store separately, as the entirety of `~/.caba
|
||||
~/.cabal/packages
|
||||
~/.cabal/store
|
||||
dist-newstyle
|
||||
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal', '**/cabal.project', '**/cabal.project.freeze') }}
|
||||
restore-keys: ${{ runner.os }}-${{ matrix.ghc }}-
|
||||
key: ${{ runner.os }}-${{ matrix.ghc }}
|
||||
```
|
||||
|
||||
## Java - Gradle
|
||||
|
||||
>Note: Ensure no Gradle daemons are running anymore when your workflow completes. Creating the cache package might fail due to locks being held by Gradle. Refer to the [Gradle Daemon documentation](https://docs.gradle.org/current/userguide/gradle_daemon.html) on how to disable or stop the Gradle Daemons.
|
||||
|
||||
```yaml
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
```
|
||||
@@ -237,13 +194,12 @@ If using `npm config` to retrieve the cache directory, ensure you run [actions/s
|
||||
|
||||
```yaml
|
||||
- name: Get npm cache directory
|
||||
id: npm-cache-dir
|
||||
id: npm-cache
|
||||
run: |
|
||||
echo "::set-output name=dir::$(npm config get cache)"
|
||||
- uses: actions/cache@v2
|
||||
id: npm-cache # use this to check for `cache-hit` ==> if: steps.npm-cache.outputs.cache-hit != 'true'
|
||||
with:
|
||||
path: ${{ steps.npm-cache-dir.outputs.dir }}
|
||||
path: ${{ steps.npm-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-
|
||||
@@ -278,8 +234,8 @@ The yarn cache directory will depend on your operating system and version of `ya
|
||||
${{ runner.os }}-yarn-
|
||||
```
|
||||
|
||||
## Node - Yarn 2
|
||||
|
||||
## Node - Yarn 2
|
||||
The yarn 2 cache directory will depend on your config. See https://yarnpkg.com/configuration/yarnrc#cacheFolder for more info.
|
||||
|
||||
```yaml
|
||||
@@ -297,7 +253,6 @@ The yarn 2 cache directory will depend on your config. See https://yarnpkg.com/c
|
||||
```
|
||||
|
||||
## OCaml/Reason - esy
|
||||
|
||||
Esy allows you to export built dependencies and import pre-built dependencies.
|
||||
```yaml
|
||||
- name: Restore Cache
|
||||
@@ -318,12 +273,13 @@ Esy allows you to export built dependencies and import pre-built dependencies.
|
||||
...(Build job)...
|
||||
|
||||
# Re-export dependencies if anything has changed or if it is the first time
|
||||
- name: Setting dependency cache
|
||||
- name: Setting dependency cache
|
||||
run: |
|
||||
esy export-dependencies
|
||||
if: steps.restore-cache.outputs.cache-hit != 'true'
|
||||
```
|
||||
|
||||
|
||||
## PHP - Composer
|
||||
|
||||
```yaml
|
||||
@@ -344,13 +300,11 @@ Esy allows you to export built dependencies and import pre-built dependencies.
|
||||
For pip, the cache directory will vary by OS. See https://pip.pypa.io/en/stable/reference/pip_install/#caching
|
||||
|
||||
Locations:
|
||||
|
||||
- Ubuntu: `~/.cache/pip`
|
||||
- Windows: `~\AppData\Local\pip\Cache`
|
||||
- macOS: `~/Library/Caches/pip`
|
||||
- Ubuntu: `~/.cache/pip`
|
||||
- Windows: `~\AppData\Local\pip\Cache`
|
||||
- macOS: `~/Library/Caches/pip`
|
||||
|
||||
### Simple example
|
||||
|
||||
```yaml
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
@@ -390,31 +344,6 @@ Replace `~/.cache/pip` with the correct `path` if not using Ubuntu.
|
||||
${{ runner.os }}-pip-
|
||||
```
|
||||
|
||||
### Multiple OS's in a workflow with a matrix
|
||||
|
||||
``` yaml
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
path: ~/.cache/pip
|
||||
- os: macos-latest
|
||||
path: ~/Library/Caches/pip
|
||||
- os: windows-latest
|
||||
path: ~\AppData\Local\pip\Cache
|
||||
steps:
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ matrix.path }}
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-
|
||||
```
|
||||
|
||||
### Using pip to get cache location
|
||||
|
||||
> Note: This requires pip 20.1+
|
||||
@@ -433,64 +362,89 @@ jobs:
|
||||
${{ runner.os }}-pip-
|
||||
```
|
||||
|
||||
## Python - pipenv
|
||||
### Using a script to get cache location
|
||||
|
||||
> Note: This uses an internal pip API and may not always work
|
||||
```yaml
|
||||
- name: Set up Python
|
||||
# The actions/cache step below uses this id to get the exact python version
|
||||
id: setup-python
|
||||
uses: actions/setup-python@v2
|
||||
|
||||
⋮
|
||||
- name: Get pip cache dir
|
||||
id: pip-cache
|
||||
run: |
|
||||
python -c "from pip._internal.locations import USER_CACHE_DIR; print('::set-output name=dir::' + USER_CACHE_DIR)"
|
||||
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.local/share/virtualenvs
|
||||
key: ${{ runner.os }}-python-${{ steps.setup-python.outputs.python-version }}-pipenv-${{ hashFiles('Pipfile.lock') }}
|
||||
path: ${{ steps.pip-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-
|
||||
```
|
||||
|
||||
## R - renv
|
||||
|
||||
For renv, the cache directory will vary by OS. The `RENV_PATHS_ROOT` environment variable is used to set the cache location. Have a look at https://rstudio.github.io/renv/reference/paths.html#details for more details.
|
||||
For renv, the cache directory will vary by OS. Look at https://rstudio.github.io/renv/articles/renv.html#cache
|
||||
|
||||
Locations:
|
||||
- Ubuntu: `~/.local/share/renv`
|
||||
- macOS: `~/Library/Application Support/renv`
|
||||
- Windows: `%LOCALAPPDATA%/renv`
|
||||
|
||||
### Simple example
|
||||
```yaml
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.local/share/renv
|
||||
key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-renv-
|
||||
```
|
||||
|
||||
Replace `~/.local/share/renv` with the correct `path` if not using Ubuntu.
|
||||
|
||||
### Multiple OS's in a workflow
|
||||
|
||||
```yaml
|
||||
- name: Set RENV_PATHS_ROOT
|
||||
shell: bash
|
||||
run: |
|
||||
echo "RENV_PATHS_ROOT=${{ runner.temp }}/renv" >> $GITHUB_ENV
|
||||
- name: Install and activate renv
|
||||
run: |
|
||||
install.packages("renv")
|
||||
renv::activate()
|
||||
shell: Rscript {0}
|
||||
- name: Get R and OS version
|
||||
id: get-version
|
||||
run: |
|
||||
cat("##[set-output name=os-version;]", sessionInfo()$running, "\n", sep = "")
|
||||
cat("##[set-output name=r-version;]", R.Version()$version.string, sep = "")
|
||||
shell: Rscript {0}
|
||||
- name: Restore Renv package cache
|
||||
uses: actions/cache@v2
|
||||
- uses: actions/cache@v2
|
||||
if: startsWith(runner.os, 'Linux')
|
||||
with:
|
||||
path: ${{ env.RENV_PATHS_ROOT }}
|
||||
key: ${{ steps.get-version.outputs.os-version }}-${{ steps.get-version.outputs.r-version }}-${{ inputs.cache-version }}-${{ hashFiles('renv.lock') }}
|
||||
restore-keys: ${{ steps.get-version.outputs.os-version }}-${{ steps.get-version.outputs.r-version }}-${{inputs.cache-version }}-
|
||||
path: ~/.local/share/renv
|
||||
key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-renv-
|
||||
|
||||
- uses: actions/cache@v2
|
||||
if: startsWith(runner.os, 'macOS')
|
||||
with:
|
||||
path: ~/Library/Application Support/renv
|
||||
key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-renv-
|
||||
|
||||
- uses: actions/cache@v2
|
||||
if: startsWith(runner.os, 'Windows')
|
||||
with:
|
||||
path: ~\AppData\Local\renv
|
||||
key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-renv-
|
||||
```
|
||||
|
||||
## Ruby - Bundler
|
||||
|
||||
Caching gems with Bundler correctly is not trivial and just using `actions/cache`
|
||||
is [not enough](https://github.com/ruby/setup-ruby#caching-bundle-install-manually).
|
||||
|
||||
Instead, it is recommended to use `ruby/setup-ruby`'s
|
||||
[`bundler-cache: true` option](https://github.com/ruby/setup-ruby#caching-bundle-install-automatically)
|
||||
whenever possible:
|
||||
```yaml
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: vendor/bundle
|
||||
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gems-
|
||||
```
|
||||
When dependencies are installed later in the workflow, we must specify the same path for the bundler.
|
||||
|
||||
```yaml
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: ...
|
||||
bundler-cache: true
|
||||
- name: Bundle install
|
||||
run: |
|
||||
bundle config path vendor/bundle
|
||||
bundle install --jobs 4 --retry 3
|
||||
```
|
||||
|
||||
## Rust - Cargo
|
||||
@@ -499,11 +453,9 @@ whenever possible:
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/bin/
|
||||
~/.cargo/registry/index/
|
||||
~/.cargo/registry/cache/
|
||||
~/.cargo/git/db/
|
||||
target/
|
||||
~/.cargo/registry
|
||||
~/.cargo/git
|
||||
target
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
||||
```
|
||||
|
||||
@@ -513,7 +465,7 @@ whenever possible:
|
||||
- name: Cache SBT
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
path: |
|
||||
~/.ivy2/cache
|
||||
~/.sbt
|
||||
key: ${{ runner.os }}-sbt-${{ hashFiles('**/build.sbt') }}
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ const processStdoutWrite = process.stdout.write.bind(process.stdout);
|
||||
process.stdout.write = (str, encoding, cb) => {
|
||||
// Core library will directly call process.stdout.write for commands
|
||||
// We don't want :: commands to be executed by the runner during tests
|
||||
if (!String(str).match(/^::/)) {
|
||||
if (!str.match(/^::/)) {
|
||||
return processStdoutWrite(str, encoding, cb);
|
||||
}
|
||||
};
|
||||
|
||||
Generated
+3886
-5549
File diff suppressed because it is too large
Load Diff
+18
-18
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cache",
|
||||
"version": "2.1.7",
|
||||
"version": "2.1.3",
|
||||
"private": true,
|
||||
"description": "Cache dependencies and build outputs",
|
||||
"main": "dist/restore/index.js",
|
||||
@@ -23,29 +23,29 @@
|
||||
"author": "GitHub",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/cache": "^1.0.9",
|
||||
"@actions/cache": "^1.0.4",
|
||||
"@actions/core": "^1.2.6",
|
||||
"@actions/exec": "^1.0.1",
|
||||
"@actions/io": "^1.1.0"
|
||||
"@actions/io": "^1.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^27.4.0",
|
||||
"@types/jest": "^24.0.13",
|
||||
"@types/nock": "^11.1.0",
|
||||
"@types/node": "^12.20.42",
|
||||
"@typescript-eslint/eslint-plugin": "^5.10.1",
|
||||
"@typescript-eslint/parser": "^5.10.1",
|
||||
"@types/node": "^12.0.4",
|
||||
"@typescript-eslint/eslint-plugin": "^2.7.0",
|
||||
"@typescript-eslint/parser": "^2.7.0",
|
||||
"@zeit/ncc": "^0.20.5",
|
||||
"eslint": "^8.8.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-import": "^2.25.4",
|
||||
"eslint-plugin-jest": "^26.0.0",
|
||||
"eslint-plugin-prettier": "^4.0.0",
|
||||
"eslint-plugin-simple-import-sort": "^7.0.0",
|
||||
"jest": "^27.4.7",
|
||||
"jest-circus": "^27.4.6",
|
||||
"eslint": "^6.6.0",
|
||||
"eslint-config-prettier": "^6.5.0",
|
||||
"eslint-plugin-import": "^2.18.2",
|
||||
"eslint-plugin-jest": "^23.0.3",
|
||||
"eslint-plugin-prettier": "^3.1.1",
|
||||
"eslint-plugin-simple-import-sort": "^5.0.2",
|
||||
"jest": "^24.8.0",
|
||||
"jest-circus": "^24.7.1",
|
||||
"nock": "^11.7.0",
|
||||
"prettier": "^2.5.1",
|
||||
"ts-jest": "^27.1.3",
|
||||
"typescript": "^3.9.9"
|
||||
"prettier": "^1.19.1",
|
||||
"ts-jest": "^24.0.2",
|
||||
"typescript": "^3.7.3"
|
||||
}
|
||||
}
|
||||
|
||||
+1
-3
@@ -7,9 +7,7 @@ import * as utils from "./utils/actionUtils";
|
||||
async function run(): Promise<void> {
|
||||
try {
|
||||
if (utils.isGhes()) {
|
||||
utils.logWarning(
|
||||
"Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details"
|
||||
);
|
||||
utils.logWarning("Cache action is not supported on GHES");
|
||||
utils.setCacheHitOutput(false);
|
||||
return;
|
||||
}
|
||||
|
||||
+1
-9
@@ -4,17 +4,10 @@ import * as core from "@actions/core";
|
||||
import { Events, Inputs, State } from "./constants";
|
||||
import * as utils from "./utils/actionUtils";
|
||||
|
||||
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
|
||||
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
|
||||
// throw an uncaught exception. Instead of failing this action, just warn.
|
||||
process.on("uncaughtException", e => utils.logWarning(e.message));
|
||||
|
||||
async function run(): Promise<void> {
|
||||
try {
|
||||
if (utils.isGhes()) {
|
||||
utils.logWarning(
|
||||
"Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details"
|
||||
);
|
||||
utils.logWarning("Cache action is not supported on GHES");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -51,7 +44,6 @@ async function run(): Promise<void> {
|
||||
await cache.saveCache(cachePaths, primaryKey, {
|
||||
uploadChunkSize: utils.getInputAsInt(Inputs.UploadChunkSize)
|
||||
});
|
||||
core.info(`Cache saved with key: ${primaryKey}`);
|
||||
} catch (error) {
|
||||
if (error.name === cache.ValidationError.name) {
|
||||
throw error;
|
||||
|
||||
@@ -60,8 +60,9 @@ export function getInputAsArray(
|
||||
return core
|
||||
.getInput(name, options)
|
||||
.split("\n")
|
||||
.map(s => s.trim())
|
||||
.filter(x => x !== "");
|
||||
.map(s => s.replace(/^!\s+/, "!").trim())
|
||||
.filter(x => x !== "")
|
||||
.sort();
|
||||
}
|
||||
|
||||
export function getInputAsInt(
|
||||
|
||||
Reference in New Issue
Block a user