Showing preview only (1,495K chars total). Download the full file or copy to clipboard to get everything.
Repository: alufers/mitmproxy2swagger
Branch: master
Commit: 2b3b3d83abf1
Files: 37
Total size: 18.6 MB
Directory structure:
gitextract_xv5jft2n/
├── .dockerignore
├── .flake8
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ ├── build_docker.yml
│ ├── python.yml
│ └── release.yml
├── .gitignore
├── .markdownlint.yaml
├── .mypy.ini
├── .pre-commit-config.yaml
├── .yamllint
├── Dockerfile
├── README.md
├── example_outputs/
│ ├── lisek-out.swagger.yml
│ └── lisek-static.html
├── mitmproxy2swagger/
│ ├── __init__.py
│ ├── console_util.py
│ ├── har_capture_reader.py
│ ├── mitmproxy2swagger.py
│ ├── mitmproxy_capture_reader.py
│ ├── swagger_util.py
│ ├── test_mitmproxy2swagger.py
│ ├── test_openapi_compliance.py
│ └── testing_util.py
├── pyproject.toml
├── specs.yml
└── testdata/
├── form_data_flows
├── generic_keys_flows
├── generic_keys_testclient.py
├── generic_keys_testserver.py
├── msgpack_flows
├── msgpack_testclient.py
├── msgpack_testserver.py
├── sklep.lisek.app.har
├── test_flows
├── testclient.py
└── testserver.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
testdata
testcase
docs
example_outputs
.github
.venv
.coverage
================================================
FILE: .flake8
================================================
[flake8]
max-line-length = 120
extend-ignore = E203,E501
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "pip" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
================================================
FILE: .github/workflows/build_docker.yml
================================================
name: Create and publish a Docker image
on:
push:
branches: [master]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@dbef88086f6cef02e264edb7dbf63250c17cef6c
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
flavor: |
latest=auto
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@0d103c3126aa41d772a8362f6aa67afac040f80c
- name: Build and push Docker image
uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56
with:
context: .
push: true
platforms: linux/amd64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
================================================
FILE: .github/workflows/python.yml
================================================
# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Python
on:
push:
branches: [master]
pull_request:
branches: [master]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install poetry
uses: abatilo/actions-poetry@v2
with:
poetry-version: "1.8.5"
- name: Install dependencies
run: |
poetry install
- name: Run Python tests
run: |
poetry run pytest --cov
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
================================================
FILE: .github/workflows/release.yml
================================================
name: Release package
on:
workflow_dispatch:
inputs:
release-type:
type: choice
description: 'Release type (one of): patch, minor, major, prepatch, preminor, premajor, prerelease'
default: 'patch'
options:
- 'patch'
- 'minor'
- 'major'
required: true
jobs:
release:
runs-on: ubuntu-latest
steps:
# Checkout project repository
- uses: actions/checkout@v4
- name: Set up Python 3.12
uses: actions/setup-python@v5
with:
python-version: "3.12"
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install poetry
uses: abatilo/actions-poetry@v2
with:
poetry-version: "1.8.5"
- name: Install dependencies
run: |
poetry install
- name: Run Python lint checks
run: |
poetry run pre-commit run --all-files
- name: Run Python tests
run: |
poetry run pytest --cov
- name: Git configuration
run: |
git config --global user.email "bot@example.com"
git config --global user.name "GitHub Actions"
- name: Bump release version
run: |
poetry version ${{ github.event.inputs.release-type }}
echo "NEW_VERSION=$(poetry version --short)" >> $GITHUB_ENV
env:
RELEASE_TYPE: ${{ github.event.inputs.release-type }}
- name: Build package
run: |
poetry lock
poetry build
- name: Commit pyproject.toml and poetry.lock
run: |
git add pyproject.toml poetry.lock
git commit -m "chore: release ${{ env.NEW_VERSION }}"
git tag ${{ env.NEW_VERSION }}
git push origin master
- name: Build docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: false
platforms: linux/amd64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
# Push repository changes
- name: Publish package
run: |
poetry publish --build
env:
POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_TOKEN }}
- name: Push docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: false
platforms: linux/amd64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
================================================
FILE: .gitignore
================================================
flows
__pycache__
ass.yaml
lisek.swagger.yml
dist
dupsko.yaml
dist
/.mypy_cache/
.DS_Store
.idea
flow*
swagger
.vscode
.coverage
================================================
FILE: .markdownlint.yaml
================================================
default: true
line-length: false
no-inline-html: false
================================================
FILE: .mypy.ini
================================================
[mypy]
[mypy-json_stream.*]
ignore_missing_imports = True
================================================
FILE: .pre-commit-config.yaml
================================================
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
exclude: ^(api_protobuf/.*|docs/protobuf_docs\.md|dhaul_openapi/messages/.*)$
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
exclude: ^testdata/.*
- id: trailing-whitespace
exclude: ^testdata/.*
- id: check-json
- id: detect-private-key
- id: fix-encoding-pragma
- id: check-merge-conflict
- id: check-added-large-files
- repo: https://github.com/psf/black
rev: 24.10.0
hooks:
- id: black
args: [--config=pyproject.toml]
- repo: https://github.com/PyCQA/isort
rev: 5.13.2
hooks:
- id: isort
- repo: https://github.com/pre-commit/mirrors-mypy
rev: "v1.13.0"
hooks:
- id: mypy
- repo: https://github.com/PyCQA/docformatter
rev: eb1df347edd128b30cd3368dddc3aa65edcfac38
# TODO: Switch back to upstream docformatter
# after https://github.com/PyCQA/docformatter/issues/289 is fixed
hooks:
- id: docformatter
args:
- --in-place
- --config=pyproject.toml
- repo: https://github.com/PyCQA/autoflake
rev: v2.3.1
hooks:
- id: autoflake
- repo: https://github.com/pycqa/flake8
rev: 7.1.1
hooks:
- id: flake8
entry: flake8
- repo: https://github.com/netromdk/vermin
rev: v1.6.0
hooks:
- id: vermin
# specify your target version here, OR in a Vermin config file as usual:
args: ["-t=3.9-", "--violations"]
# (if your target is specified in a Vermin config, you may omit the 'args' entry entirely)
- repo: https://github.com/adrienverge/yamllint.git
rev: v1.35.1
hooks:
- id: yamllint
- repo: https://github.com/igorshubovych/markdownlint-cli
rev: v0.42.0
hooks:
- id: markdownlint-fix
- id: markdownlint
================================================
FILE: .yamllint
================================================
extends: default
yaml-files:
- "*.yaml"
- "*.yml"
- ".yamllint"
rules:
line-length:
max: 120
level: warning
document-start: disable
truthy: disable
indentation: disable
================================================
FILE: Dockerfile
================================================
FROM python:3.12-slim-bookworm AS builder
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
ENV UV_HTTP_TIMEOUT=100 \
UV_NO_CACHE=1
WORKDIR /app
RUN uv pip install --system poetry poetry-plugin-export
COPY pyproject.toml poetry.lock ./
RUN uv venv /venv && \
poetry config warnings.export false && \
poetry export -f requirements.txt -o requirements.txt && \
VIRTUAL_ENV=/venv uv pip install -r requirements.txt
COPY . .
RUN poetry build && \
VIRTUAL_ENV=/venv uv pip install dist/*.whl
FROM python:3.12-slim-bookworm AS final
ENV PYTHONFAULTHANDLER=1 \
PYTHONHASHSEED=random \
PYTHONUNBUFFERED=1
WORKDIR /app
COPY --from=builder /venv /venv
ENV PATH="/venv/bin:${PATH}"
ENTRYPOINT [ "mitmproxy2swagger" ]
================================================
FILE: README.md
================================================
# mitmproxy2swagger
[](https://badge.fury.io/py/mitmproxy2swagger)
[](https://archlinux.org/packages/extra/any/mitmproxy2swagger/)
<https://user-images.githubusercontent.com/5400940/168086818-c48f60ab-3f95-42eb-b435-c8b1a6326b81.mp4>
A tool for automatically converting [mitmproxy](https://mitmproxy.org/) captures to [OpenAPI 3.0](https://swagger.io/specification/) specifications. This means that you can automatically reverse-engineer REST APIs by just running the apps and capturing the traffic.
---
**🆕 NEW!**
Added support for processing HAR exported from the browser DevTools. See [Usage - HAR](#har) for more details.
---
## Installation
First you will need python3 and pip3.
```bash
$ pip install mitmproxy2swagger
# ... or ...
$ pip3 install mitmproxy2swagger
# ... or ...
$ git clone git@github.com:alufers/mitmproxy2swagger.git
$ cd mitmproxy2swagger
$ docker build -t mitmproxy2swagger .
```
Then clone the repo and run `mitmproxy2swagger` as per examples below.
## Usage
### Mitmproxy
To create a specification by inspecting HTTP traffic you will need to:
1. Capture the traffic by using the mitmproxy tool. I personally recommend using mitmweb, which is a web interface built-in to mitmproxy.
```bash
$ mitmweb
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:9999
...
```
**IMPORTANT**
To configure your client to use the proxy exposed by mitm proxy, please consult the [mitmproxy documentation](https://docs.mitmproxy.org/stable/) for more information.
2. Save the traffic to a flow file.
In mitmweb you can do this by using the "File" menu and selecting "Save":

3. Run the first pass of mitmproxy2swagger:
```bash
$ mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix>
# ... or ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix>
```
Please note that you can use an existing schema, in which case the existing schema will be extended with the new data. You can also run it a few times with different flow captures, the captured data will be safely merged.
`<api_prefix>` is the base url of the API you wish to reverse-engineer. You will need to obtain it by observing the requests being made in mitmproxy.
For example if an app has made requests like these:
```http
https://api.example.com/v1/login
https://api.example.com/v1/users/2
https://api.example.com/v1/users/2/profile
```
The likely prefix is `https://api.example.com/v1`.
4. Running the first pass should have created a section in the schema file like this:
```yaml
x-path-templates:
# Remove the ignore: prefix to generate an endpoint with its URL
# Lines that are closer to the top take precedence, the matching is greedy
- ignore:/addresses
- ignore:/basket
- ignore:/basket/add
- ignore:/basket/checkouts
- ignore:/basket/coupons/attach/{id}
- ignore:/basket/coupons/attach/104754
```
You should edit the schema file with a text editor and remove the `ignore:` prefix from the paths you wish to be generated. You can also adjust the parameters appearing in the paths.
5. Run the second pass of mitmproxy2swagger:
```bash
$ mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix> [--examples]
# ... or ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix> [--examples]
```
Run the command a second time (with the same schema file). It will pick up the edited lines and generate endpoint descriptions.
Please note that mitmproxy2swagger will not overwrite existing endpoint descriptions, if you want to overwrite them, you can delete them before running the second pass.
Passing `--examples` will add example data to requests and responses. Take caution when using this option, as it may add sensitive data (tokens, passwords, personal information etc.) to the schema.
Passing `--headers` will add headers data to requests and responses. Take caution when using this option, as it may add sensitive data (tokens, passwords, personal information etc.) to the schema.
### HAR
1. Capture and export the traffic from the browser DevTools.
In the browser DevTools, go to the Network tab and click the "Export HAR" button.

2. Continue the same way you would do with the mitmproxy dump. `mitmproxy2swagger` will automatically detect the HAR file and process it.
## Example output
See the [examples](./example_outputs/). You will find a generated schema there and an html file with the generated documentation (via [redoc-cli](https://www.npmjs.com/package/redoc-cli)).
See the generated html file [here](https://raw.githack.com/alufers/mitmproxy2swagger/master/example_outputs/lisek-static.html).
## Development and contributing
This project uses:
- [poetry](https://python-poetry.org/) for dependency management
- [pre-commit](https://pre-commit.com/) for code formatting and linting
- [pytest](https://docs.pytest.org/en/stable/) for unit testing
To install the dependencies:
```bash
poetry install
```
Run linters:
```bash
pre-commit run --all-files
```
Install pre-commit hooks:
```bash
pre-commit install
```
Run tests:
```bash
poetry run pytest
```
Run tests with coverage:
```bash
poetry run pytest --cov=mitmproxy2swagger
```
## License
MIT
================================================
FILE: example_outputs/lisek-out.swagger.yml
================================================
openapi: 3.0.0
info:
title: flows/flows_lisek_filtered Mitmproxy2Swagger
version: 1.0.0
servers:
- url: https://api2.lisek.app/api
description: The default server
paths:
/mobileversion:
get:
summary: GET mobileversion
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items:
type: object
properties:
platform:
type: string
minVersion:
type: string
appCode:
type: string
success:
type: boolean
errors:
type: array
items: {}
/darkstores:
get:
summary: GET darkstores
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items:
type: object
properties:
id:
type: number
name:
type: string
identifier:
type: string
virtual:
type: boolean
address:
type: object
properties:
id:
type: number
street:
type: string
streetNo:
type: string
city:
type: string
doorNo:
type: string
floor:
type: string
latitude:
type: number
longitude:
type: number
postalCode:
type: string
porch:
type: string
comments:
type: string
courierComment:
type: string
isCurrent:
type: boolean
isCurrentNotVirtual:
type: boolean
label:
type: object
isVirtual:
type: boolean
area:
type: array
items:
type: string
openingTime:
type: object
properties:
openHour:
type: number
openMinute:
type: number
closeHour:
type: number
closeMinute:
type: number
courierSplitEnabled:
type: boolean
sortKey:
type: number
sliderId:
type: number
available:
type: boolean
unavailableMessage:
type: string
unavailableUntilTime:
type: object
orderStackingEnabled:
type: string
success:
type: boolean
errors:
type: array
items: {}
/users/login:
post:
summary: POST login
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
token:
type: string
refreshToken:
type: string
expires:
type: number
user:
type: object
properties:
id:
type: number
email:
type: string
firstname:
type: string
lastname:
type: string
phone:
type: string
newsletter:
type: boolean
sendInfo:
type: boolean
roles:
type: array
items:
type: string
franchises:
type: array
items: {}
success:
type: boolean
errors:
type: array
items: {}
requestBody:
content:
application/json:
schema:
type: object
properties:
Token:
type: string
GrantType:
type: string
/darkstores/{id}:
get:
summary: GET darkstores by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items:
type: object
properties:
area:
type: string
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: string
/users/profile:
get:
summary: GET profile
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
firstName:
type: string
lastName:
type: string
phone:
type: string
dateOfBirth:
type: string
email:
type: string
newsletter:
type: boolean
sendInfo:
type: boolean
smsCode:
type: object
success:
type: boolean
errors:
type: array
items: {}
/addresses:
get:
summary: GET addresses
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items: {}
success:
type: boolean
errors:
type: array
items: {}
/favourites:
get:
summary: GET favourites
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items: {}
success:
type: boolean
errors:
type: array
items: {}
/basket/setlocation:
post:
summary: POST setlocation
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
id:
type: number
userId:
type: number
addressId:
type: object
address:
type: object
darkstoreId:
type: number
items:
type: array
items: {}
coupons:
type: array
items: {}
itemTotal:
type: number
total:
type: number
delivery:
type: number
standardDeliveryCost:
type: number
freeShippingThreshold:
type: number
discountThreshold:
type: number
discountValue:
type: number
discountDelivery:
type: number
discountFromCrossingThreshold:
type: number
totalForThresholdDiscount:
type: number
totalForFreeShipping:
type: number
totalWithoutDiscount:
type: number
isDiscountThresholdCrossed:
type: boolean
isFreeShipping:
type: boolean
paperBagFee:
type: number
checkoutTrialDate:
type: object
insufficientStock:
type: boolean
totalWeight:
type: number
isBanned:
type: boolean
success:
type: boolean
errors:
type: array
items: {}
requestBody:
content:
application/json:
schema:
type: object
properties:
latitude:
type: number
longitude:
type: number
/darkstores/{lat}/{lon}:
get:
summary: GET darkstores by lat
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
id:
type: number
name:
type: string
identifier:
type: string
virtual:
type: boolean
address:
type: object
properties:
id:
type: number
street:
type: string
streetNo:
type: string
city:
type: string
doorNo:
type: string
floor:
type: string
latitude:
type: number
longitude:
type: number
postalCode:
type: string
porch:
type: string
comments:
type: object
courierComment:
type: object
isCurrent:
type: boolean
isCurrentNotVirtual:
type: boolean
label:
type: object
isVirtual:
type: boolean
area:
type: object
openingTime:
type: object
properties:
openHour:
type: number
openMinute:
type: number
closeHour:
type: number
closeMinute:
type: number
courierSplitEnabled:
type: boolean
sortKey:
type: number
sliderId:
type: number
available:
type: boolean
unavailableMessage:
type: string
unavailableUntilTime:
type: object
orderStackingEnabled:
type: string
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: lat
in: path
required: true
schema:
type: string
- name: lon
in: path
required: true
schema:
type: string
/transactionsettings:
get:
summary: GET transactionsettings
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
discountThreshold:
type: number
maxWeight:
type: number
minOrder:
type: number
freeShippingThreshold:
type: number
deliveryCost:
type: number
discountPercent:
type: number
maxStackSize:
type: number
maxStackTimeInMins:
type: number
startStackFromClosest:
type: boolean
paperBagEan:
type: string
paperBagFee:
type: number
paperBagPerXItems:
type: number
paperBagPerXPrice:
type: object
paperBagInfiniteStock:
type: boolean
alcoholCategories:
type: string
success:
type: boolean
errors:
type: array
items: {}
/inventory/{id}/full:
get:
summary: GET full by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items:
type: object
properties:
name:
type: string
key:
type: string
number:
type: number
order:
type: number
imagePath:
type: string
iconPath:
type: object
parentId:
type: object
alcohol:
type: boolean
backgroundColor:
type: string
subCategories:
type: array
items:
type: object
properties:
name:
type: string
key:
type: object
number:
type: number
order:
type: number
imagePath:
type: string
iconPath:
type: object
parentId:
type: number
alcohol:
type: boolean
backgroundColor:
type: string
subCategories:
type: array
items: {}
products:
type: array
items:
type: object
properties:
quantity:
type: number
ean:
type: string
maxQuantity:
type: number
headline:
type: string
title:
type: string
subTitle:
type: string
price:
type: number
packInfo:
type: string
imagePath:
type: string
isHit:
type: boolean
isPromo:
type: boolean
priceBeforePromo:
type: object
promoText:
type: string
isNew:
type: boolean
isCold:
type: boolean
showOutOfStock:
type: boolean
weight:
type: string
vat:
type: number
categoryId:
type: number
subCategoryId:
type: object
subCategoryName:
type: object
id:
type: number
id:
type: number
products:
type: array
items: {}
id:
type: number
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
/inventory/{id}/stocks:
get:
summary: GET stocks by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items:
type: object
properties:
e:
type: string
q:
type: number
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
/sliders/{id}:
get:
summary: GET sliders by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items:
type: object
properties:
link:
type: string
type:
type: number
position:
type: number
categoryId:
type: object
mainCategoryId:
type: object
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
/push:
post:
summary: POST push
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
errors:
type: array
items: {}
requestBody:
content:
application/json:
schema:
type: object
properties:
token:
type: string
platform:
type: string
appVersion:
type: string
/inventory/promo/{id}:
get:
summary: GET promo by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items:
type: object
properties:
ean:
type: string
type:
type: string
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
/users-sms/code:
post:
summary: POST code
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
errors:
type: array
items: {}
requestBody:
content:
application/json:
schema:
type: object
properties:
phone:
type: string
/users-sms/login:
post:
summary: POST login
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
token:
type: string
refreshToken:
type: string
expires:
type: number
user:
type: object
properties:
id:
type: number
email:
type: string
firstname:
type: string
lastname:
type: string
phone:
type: string
newsletter:
type: boolean
sendInfo:
type: boolean
roles:
type: array
items:
type: string
franchises:
type: array
items: {}
success:
type: boolean
errors:
type: array
items: {}
requestBody:
content:
application/json:
schema:
type: object
properties:
phone:
type: string
code:
type: string
/orders/user/{id}/{id1}/{id2}:
get:
summary: GET user by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
page:
type: number
pageSize:
type: number
count:
type: number
items:
type: array
items: {}
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
- name: id1
in: path
required: true
schema:
type: number
- name: id2
in: path
required: true
schema:
type: number
- name: active
in: query
required: false
schema:
type: string
/basket/setaddress/{id}:
post:
summary: POST setaddress by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
id:
type: number
userId:
type: number
addressId:
type: number
address:
type: object
properties:
id:
type: number
street:
type: string
streetNo:
type: string
city:
type: string
doorNo:
type: string
floor:
type: string
latitude:
type: number
longitude:
type: number
postalCode:
type: string
porch:
type: object
comments:
type: string
courierComment:
type: object
isCurrent:
type: boolean
isCurrentNotVirtual:
type: boolean
label:
type: object
isVirtual:
type: boolean
darkstoreId:
type: number
items:
type: array
items:
type: object
properties:
ean:
type: string
title:
type: string
subtitle:
type: string
imagePath:
type: string
quantity:
type: number
quantityAvailable:
type: number
price:
type: number
insufficientStock:
type: boolean
stockItemId:
type: number
vat:
type: number
weight:
type: number
maxQuantity:
type: number
isRemovable:
type: boolean
isExcludedFromDiscount:
type: boolean
isFreebie:
type: boolean
id:
type: number
coupons:
type: array
items: {}
itemTotal:
type: number
total:
type: number
delivery:
type: number
standardDeliveryCost:
type: number
freeShippingThreshold:
type: number
discountThreshold:
type: number
discountValue:
type: number
discountDelivery:
type: number
discountFromCrossingThreshold:
type: number
totalForThresholdDiscount:
type: number
totalForFreeShipping:
type: number
totalWithoutDiscount:
type: number
isDiscountThresholdCrossed:
type: boolean
isFreeShipping:
type: boolean
paperBagFee:
type: number
checkoutTrialDate:
type: object
insufficientStock:
type: boolean
totalWeight:
type: number
isBanned:
type: boolean
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
/basket/add:
post:
summary: POST basket add
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
id:
type: number
userId:
type: number
addressId:
type: number
address:
type: object
properties:
id:
type: number
street:
type: string
streetNo:
type: string
city:
type: string
doorNo:
type: string
floor:
type: string
latitude:
type: number
longitude:
type: number
postalCode:
type: string
porch:
type: object
comments:
type: string
courierComment:
type: object
isCurrent:
type: boolean
isCurrentNotVirtual:
type: boolean
label:
type: object
isVirtual:
type: boolean
darkstoreId:
type: number
items:
type: array
items:
type: object
properties:
ean:
type: string
title:
type: string
subtitle:
type: string
imagePath:
type: string
quantity:
type: number
quantityAvailable:
type: number
price:
type: number
insufficientStock:
type: boolean
stockItemId:
type: number
vat:
type: number
weight:
type: number
maxQuantity:
type: number
isRemovable:
type: boolean
isExcludedFromDiscount:
type: boolean
isFreebie:
type: boolean
id:
type: number
coupons:
type: array
items: {}
itemTotal:
type: number
total:
type: number
delivery:
type: number
standardDeliveryCost:
type: number
freeShippingThreshold:
type: number
discountThreshold:
type: number
discountValue:
type: number
discountDelivery:
type: number
discountFromCrossingThreshold:
type: number
totalForThresholdDiscount:
type: number
totalForFreeShipping:
type: number
totalWithoutDiscount:
type: number
isDiscountThresholdCrossed:
type: boolean
isFreeShipping:
type: boolean
paperBagFee:
type: number
checkoutTrialDate:
type: object
insufficientStock:
type: boolean
totalWeight:
type: number
isBanned:
type: boolean
success:
type: boolean
errors:
type: array
items: {}
requestBody:
content:
application/json:
schema:
type: object
properties:
ean:
type: string
quantity:
type: number
/basket/remove:
post:
summary: POST remove
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
id:
type: number
userId:
type: number
addressId:
type: number
address:
type: object
properties:
id:
type: number
street:
type: string
streetNo:
type: string
city:
type: string
doorNo:
type: string
floor:
type: string
latitude:
type: number
longitude:
type: number
postalCode:
type: string
porch:
type: object
comments:
type: string
courierComment:
type: object
isCurrent:
type: boolean
isCurrentNotVirtual:
type: boolean
label:
type: object
isVirtual:
type: boolean
darkstoreId:
type: number
items:
type: array
items:
type: object
properties:
ean:
type: string
title:
type: string
subtitle:
type: string
imagePath:
type: string
quantity:
type: number
quantityAvailable:
type: number
price:
type: number
insufficientStock:
type: boolean
stockItemId:
type: number
vat:
type: number
weight:
type: number
maxQuantity:
type: number
isRemovable:
type: boolean
isExcludedFromDiscount:
type: boolean
isFreebie:
type: boolean
id:
type: number
coupons:
type: array
items: {}
itemTotal:
type: number
total:
type: number
delivery:
type: number
standardDeliveryCost:
type: number
freeShippingThreshold:
type: number
discountThreshold:
type: number
discountValue:
type: number
discountDelivery:
type: number
discountFromCrossingThreshold:
type: number
totalForThresholdDiscount:
type: number
totalForFreeShipping:
type: number
totalWithoutDiscount:
type: number
isDiscountThresholdCrossed:
type: boolean
isFreeShipping:
type: boolean
paperBagFee:
type: number
checkoutTrialDate:
type: object
insufficientStock:
type: boolean
totalWeight:
type: number
isBanned:
type: boolean
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: basketItemId
in: query
required: false
schema:
type: number
requestBody:
content:
application/json:
schema:
type: object
properties:
ean:
type: string
quantity:
type: number
/basket/checkouts:
post:
summary: POST checkouts
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
estimatedWaitTimeInMinutes:
type: object
canDeliver:
type: boolean
success:
type: boolean
errors:
type: array
items: {}
/v1/ordertips:
get:
summary: GET ordertips
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items:
type: number
success:
type: boolean
errors:
type: array
items: {}
/payu/methods:
get:
summary: GET methods
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
payByLinks:
type: array
items:
type: object
properties:
value:
type: string
name:
type: string
brandImageUrl:
type: string
status:
type: string
minAmount:
type: number
maxAmount:
type: number
cardTokens:
type: array
items: {}
pexTokens:
type: array
items: {}
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: extended
in: query
required: false
schema:
type: number
/coupons:
get:
summary: GET coupons
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items: {}
success:
type: boolean
errors:
type: array
items: {}
/scheduleslots/{id}:
get:
summary: GET scheduleslots by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: array
items:
type: object
properties:
id:
type: number
date:
type: number
hour:
type: number
minutes:
type: number
status:
type: string
size:
type: number
free:
type: number
configurationId:
type: number
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
/coupons/activate/{promocode}:
post:
summary: POST coupons activate by promocode
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
success:
type: boolean
errors:
type: array
items:
type: object
properties:
code:
type: string
message:
type: string
translateKey:
type: string
parameters:
- name: promocode
in: path
required: true
schema:
type: string
/basket/coupons/attach/{id}:
post:
summary: POST coupons attach by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
id:
type: number
userId:
type: number
addressId:
type: number
address:
type: object
properties:
id:
type: number
street:
type: string
streetNo:
type: string
city:
type: string
doorNo:
type: string
floor:
type: string
latitude:
type: number
longitude:
type: number
postalCode:
type: string
porch:
type: object
comments:
type: string
courierComment:
type: object
isCurrent:
type: boolean
isCurrentNotVirtual:
type: boolean
label:
type: object
isVirtual:
type: boolean
darkstoreId:
type: number
items:
type: array
items:
type: object
properties:
ean:
type: string
title:
type: string
subtitle:
type: string
imagePath:
type: string
quantity:
type: number
quantityAvailable:
type: number
price:
type: number
insufficientStock:
type: boolean
stockItemId:
type: number
vat:
type: number
weight:
type: number
maxQuantity:
type: number
isRemovable:
type: boolean
isExcludedFromDiscount:
type: boolean
isFreebie:
type: boolean
id:
type: number
coupons:
type: array
items:
type: object
properties:
id:
type: number
name:
type: string
display:
type: string
description:
type: string
validTill:
type: string
validFrom:
type: string
freeShipping:
type: boolean
noPaperBags:
type: boolean
fixedDiscount:
type: number
percentDiscount:
type: number
referal:
type: boolean
gift:
type: boolean
valid:
type: object
minOrderValue:
type: number
calculatedDiscount:
type: object
itemTotal:
type: number
total:
type: number
delivery:
type: number
standardDeliveryCost:
type: number
freeShippingThreshold:
type: number
discountThreshold:
type: number
discountValue:
type: number
discountDelivery:
type: number
discountFromCrossingThreshold:
type: number
totalForThresholdDiscount:
type: number
totalForFreeShipping:
type: number
totalWithoutDiscount:
type: number
isDiscountThresholdCrossed:
type: boolean
isFreeShipping:
type: boolean
paperBagFee:
type: number
checkoutTrialDate:
type: object
insufficientStock:
type: boolean
totalWeight:
type: number
isBanned:
type: boolean
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
/basket:
get:
summary: GET basket
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
id:
type: number
userId:
type: number
addressId:
type: number
address:
type: object
properties:
id:
type: number
street:
type: string
streetNo:
type: string
city:
type: string
doorNo:
type: string
floor:
type: string
latitude:
type: number
longitude:
type: number
postalCode:
type: string
porch:
type: object
comments:
type: string
courierComment:
type: object
isCurrent:
type: boolean
isCurrentNotVirtual:
type: boolean
label:
type: object
isVirtual:
type: boolean
darkstoreId:
type: number
items:
type: array
items:
type: object
properties:
ean:
type: string
title:
type: string
subtitle:
type: string
imagePath:
type: string
quantity:
type: number
quantityAvailable:
type: number
price:
type: number
insufficientStock:
type: boolean
stockItemId:
type: number
vat:
type: number
weight:
type: number
maxQuantity:
type: number
isRemovable:
type: boolean
isExcludedFromDiscount:
type: boolean
isFreebie:
type: boolean
id:
type: number
coupons:
type: array
items:
type: object
properties:
id:
type: number
name:
type: string
display:
type: string
description:
type: string
validTill:
type: string
validFrom:
type: string
freeShipping:
type: boolean
noPaperBags:
type: boolean
fixedDiscount:
type: number
percentDiscount:
type: number
referal:
type: boolean
gift:
type: boolean
valid:
type: object
minOrderValue:
type: number
calculatedDiscount:
type: object
itemTotal:
type: number
total:
type: number
delivery:
type: number
standardDeliveryCost:
type: number
freeShippingThreshold:
type: number
discountThreshold:
type: number
discountValue:
type: number
discountDelivery:
type: number
discountFromCrossingThreshold:
type: number
totalForThresholdDiscount:
type: number
totalForFreeShipping:
type: number
totalWithoutDiscount:
type: number
isDiscountThresholdCrossed:
type: boolean
isFreeShipping:
type: boolean
paperBagFee:
type: number
checkoutTrialDate:
type: object
insufficientStock:
type: boolean
totalWeight:
type: number
isBanned:
type: boolean
success:
type: boolean
errors:
type: array
items: {}
/couriers/{id}/available/detail:
get:
summary: GET detail by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
estimatedWaitTimeInMinutes:
type: number
canDeliver:
type: boolean
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
/orders/{id}:
post:
summary: POST orders by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
estimatedWaitTimeInMinutes:
type: object
orderId:
type: number
canDeliver:
type: boolean
paymentId:
type: object
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: string
get:
summary: GET orders by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
id:
type: number
courier:
type: object
customer:
type: object
properties:
id:
type: number
firstname:
type: string
lastname:
type: string
phone:
type: string
email:
type: string
address:
type: object
properties:
id:
type: number
street:
type: string
streetNo:
type: string
city:
type: string
doorNo:
type: string
floor:
type: string
latitude:
type: number
longitude:
type: number
postalCode:
type: string
porch:
type: object
comments:
type: string
courierComment:
type: object
isCurrent:
type: boolean
isCurrentNotVirtual:
type: boolean
label:
type: object
isVirtual:
type: boolean
pendingRefund:
type: number
refunded:
type: number
total:
type: number
discount:
type: number
delivery:
type: number
printed:
type: boolean
items:
type: array
items:
type: object
properties:
id:
type: number
name:
type: string
quantity:
type: number
price:
type: number
returned:
type: boolean
onReceipt:
type: boolean
product:
type: object
properties:
ean:
type: string
headline:
type: string
title:
type: string
subTitle:
type: string
weight:
type: string
imagePath:
type: string
alcohol:
type: boolean
pickInfo:
type: object
properties:
shelf:
type: number
level:
type: number
levelColor:
type: string
path:
type: number
quantityAvailable:
type: number
darkstore:
type: object
properties:
id:
type: number
name:
type: string
identifier:
type: string
virtual:
type: boolean
address:
type: object
properties:
id:
type: number
street:
type: string
streetNo:
type: string
city:
type: string
doorNo:
type: string
floor:
type: string
latitude:
type: number
longitude:
type: number
postalCode:
type: string
porch:
type: string
comments:
type: object
courierComment:
type: object
isCurrent:
type: boolean
isCurrentNotVirtual:
type: boolean
label:
type: object
isVirtual:
type: boolean
area:
type: object
openingTime:
type: object
courierSplitEnabled:
type: boolean
sortKey:
type: number
sliderId:
type: number
available:
type: boolean
unavailableMessage:
type: object
unavailableUntilTime:
type: object
orderStackingEnabled:
type: string
isVirtualSplitEnabled:
type: boolean
status:
type: string
paymentStatus:
type: string
tipPaymentStatus:
type: object
tipAmount:
type: object
feedback:
type: object
deliveryDistance:
type: number
customerTotalOrderCount:
type: number
customerTotalSpent:
type: number
customerLastOrderDate:
type: object
date:
type: number
acceptDate:
type: object
atLocationDate:
type: object
deliveryDate:
type: object
pickingDate:
type: object
pickingCompletedDate:
type: object
paymentCompletedDate:
type: object
courierNotifiedDate:
type: object
courierReturnDate:
type: object
estimatedDeliveryTime:
type: object
courierTimerStartDate:
type: object
scheduled:
type: boolean
canWait:
type: boolean
alcohol:
type: boolean
ageVerification:
type: object
scheduleSlot:
type: object
courierDetail:
type: object
coupons:
type: array
items:
type: object
properties:
id:
type: number
name:
type: string
display:
type: string
description:
type: string
validTill:
type: string
validFrom:
type: string
freeShipping:
type: boolean
noPaperBags:
type: boolean
fixedDiscount:
type: number
percentDiscount:
type: number
referal:
type: boolean
gift:
type: boolean
valid:
type: object
minOrderValue:
type: number
calculatedDiscount:
type: object
deliveryEstimations:
type: array
items: {}
returns:
type: object
darkstorePickingZone:
type: object
deliveryTimes:
type: object
properties:
communicatedDelayToRidingTime:
type: number
actualDelayToRidingTime:
type: number
orderAcceptTime:
type: number
pickingTime:
type: number
atPickerStationTime:
type: number
ridingTime:
type: number
atLocationTime:
type: number
returnTime:
type: number
deliveryTime:
type: number
totalToCustomerTime:
type: number
courierCycleTime:
type: number
picker:
type: boolean
darkstoreId:
type: number
darkstoreName:
type: string
cancelReason:
type: object
stackId:
type: object
isVip:
type: boolean
isLongDistance:
type: boolean
color:
type: object
zoneNumber:
type: object
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
/payu/orders/{id}:
post:
summary: POST orders by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
status:
type: object
properties:
statusCode:
type: string
redirectUri:
type: object
orderId:
type: string
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
- name: extended
in: query
required: false
schema:
type: number
requestBody:
content:
application/json:
schema:
type: object
properties:
continueUrl:
type: string
paymentMethod:
type: object
properties:
type:
type: string
authorizationCode:
type: string
blikData:
type: object
properties:
register:
type: boolean
/orders/{id}/estimateddeliverydate:
get:
summary: GET estimateddeliverydate by id
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
value:
type: object
properties:
estimatedDeliveryDate:
type: string
calculationInfo:
type: string
success:
type: boolean
errors:
type: array
items: {}
parameters:
- name: id
in: path
required: true
schema:
type: number
/users/active:
post:
summary: POST active
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
errors:
type: array
items: {}
================================================
FILE: example_outputs/lisek-static.html
================================================
<!DOCTYPE html>
<!-- saved from url=(0042)https://alu.dog/swaggers/lisek-static.html -->
<html data-darkreader-mode="dynamic" data-darkreader-scheme="dark"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style class="darkreader darkreader--fallback" media="screen"></style><style class="darkreader darkreader--text" media="screen"></style><style class="darkreader darkreader--invert" media="screen">.jfk-bubble.gtx-bubble, .captcheck_answer_label > input + img, span#closed_text > img[src^="https://www.gstatic.com/images/branding/googlelogo"], span[data-href^="https://www.hcaptcha.com/"] > #icon, #bit-notification-bar-iframe, ::-webkit-calendar-picker-indicator {
filter: invert(100%) hue-rotate(180deg) contrast(90%) !important;
}</style><style class="darkreader darkreader--inline" media="screen">[data-darkreader-inline-bgcolor] {
background-color: var(--darkreader-inline-bgcolor) !important;
}
[data-darkreader-inline-bgimage] {
background-image: var(--darkreader-inline-bgimage) !important;
}
[data-darkreader-inline-border] {
border-color: var(--darkreader-inline-border) !important;
}
[data-darkreader-inline-border-bottom] {
border-bottom-color: var(--darkreader-inline-border-bottom) !important;
}
[data-darkreader-inline-border-left] {
border-left-color: var(--darkreader-inline-border-left) !important;
}
[data-darkreader-inline-border-right] {
border-right-color: var(--darkreader-inline-border-right) !important;
}
[data-darkreader-inline-border-top] {
border-top-color: var(--darkreader-inline-border-top) !important;
}
[data-darkreader-inline-boxshadow] {
box-shadow: var(--darkreader-inline-boxshadow) !important;
}
[data-darkreader-inline-color] {
color: var(--darkreader-inline-color) !important;
}
[data-darkreader-inline-fill] {
fill: var(--darkreader-inline-fill) !important;
}
[data-darkreader-inline-stroke] {
stroke: var(--darkreader-inline-stroke) !important;
}
[data-darkreader-inline-outline] {
outline-color: var(--darkreader-inline-outline) !important;
}
[data-darkreader-inline-stopcolor] {
stop-color: var(--darkreader-inline-stopcolor) !important;
}</style><style class="darkreader darkreader--variables" media="screen">:root {
--darkreader-neutral-background: #131516;
--darkreader-neutral-text: #d8d4cf;
--darkreader-selection-background: #004daa;
--darkreader-selection-text: #e8e6e3;
}</style><style class="darkreader darkreader--root-vars" media="screen"></style><style class="darkreader darkreader--user-agent" media="screen">html {
background-color: #181a1b !important;
}
html {
color-scheme: dark !important;
}
html, body, input, textarea, select, button {
background-color: #181a1b;
}
html, body, input, textarea, select, button {
border-color: #736b5e;
color: #e8e6e3;
}
a {
color: #3391ff;
}
table {
border-color: #545b5e;
}
::placeholder {
color: #b2aba1;
}
input:-webkit-autofill,
textarea:-webkit-autofill,
select:-webkit-autofill {
background-color: #404400 !important;
color: #e8e6e3 !important;
}
::-webkit-scrollbar {
background-color: #202324;
color: #aba499;
}
::-webkit-scrollbar-thumb {
background-color: #454a4d;
}
::-webkit-scrollbar-thumb:hover {
background-color: #575e62;
}
::-webkit-scrollbar-thumb:active {
background-color: #484e51;
}
::-webkit-scrollbar-corner {
background-color: #181a1b;
}
::selection {
background-color: #004daa !important;
color: #e8e6e3 !important;
}
::-moz-selection {
background-color: #004daa !important;
color: #e8e6e3 !important;
}</style>
<title>flows/flows_lisek_filtered Mitmproxy2Swagger</title>
<!-- needed for adaptive design -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
padding: 0;
margin: 0;
}
</style><style class="darkreader darkreader--sync" media="screen"></style>
<script>/*! For license information please see redoc.standalone.js.LICENSE.txt */
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):"function"==typeof define&&define.amd?define(["null"],t):"object"==typeof exports?exports.Redoc=t(require("null")):e.Redoc=t(e.null)}(this,(function(e){return function(){var t={3675:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(e){o(e)}}function s(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.mapTypeToComponent=t.bundleDocument=t.bundle=t.OasVersion=void 0;const i=n(2307),o=n(4182),a=n(8065),s=n(5241),l=n(388),c=n(2608),u=n(5220),p=n(9443),d=n(1510),f=n(7468),h=n(5030),m=n(348),g=n(771),y=n(1094),b=n(4508),v=n(6350);var x;function w(e){return r(this,void 0,void 0,(function*(){const{document:t,config:n,customTypes:r,externalRefResolver:i,dereference:f=!1,skipRedoclyRegistryRefs:m=!1,removeUnusedComponents:g=!1}=e,y=d.detectOpenAPI(t.parsed),w=d.openAPIMajor(y),k=n.getRulesForOasVersion(w),S=u.normalizeTypes(n.extendTypes((null!=r?r:w===d.OasMajorVersion.Version3)?y===x.Version3_1?c.Oas3_1Types:s.Oas3Types:l.Oas2Types,y),n),E=h.initRules(k,n,"preprocessors",y),_=h.initRules(k,n,"decorators",y),A={problems:[],oasVersion:y,refTypes:new Map,visitorsData:{}};g&&_.push({severity:"error",ruleId:"remove-unused-components",visitor:w===d.OasMajorVersion.Version2?b.RemoveUnusedComponents({}):v.RemoveUnusedComponents({})});const R=yield o.resolveDocument({rootDocument:t,rootType:S.DefinitionRoot,externalRefResolver:i}),C=a.normalizeVisitors([...E,{severity:"error",ruleId:"bundler",visitor:O(w,f,m,t,R)},..._],S);return p.walkDocument({document:t,rootType:S.DefinitionRoot,normalizedVisitors:C,resolvedRefMap:R,ctx:A}),{bundle:t,problems:A.problems.map((e=>n.addProblemToIgnore(e))),fileDependencies:i.getFiles(),rootType:S.DefinitionRoot,refTypes:A.refTypes,visitorsData:A.visitorsData}}))}function k(e,t){switch(t){case d.OasMajorVersion.Version3:switch(e){case"Schema":return"schemas";case"Parameter":return"parameters";case"Response":return"responses";case"Example":return"examples";case"RequestBody":return"requestBodies";case"Header":return"headers";case"SecuritySchema":return"securitySchemes";case"Link":return"links";case"Callback":return"callbacks";default:return null}case d.OasMajorVersion.Version2:switch(e){case"Schema":return"definitions";case"Parameter":return"parameters";case"Response":return"responses";default:return null}}}function O(e,t,n,r,a){let s;const l={ref:{leave(i,s,l){if(!l.location||void 0===l.node)return void m.reportUnresolvedRef(l,s.report,s.location);if(l.location.source===r.source&&l.location.source===s.location.source&&"scalar"!==s.type.name&&!t)return;if(n&&y.isRedoclyRegistryURL(i.$ref))return;const p=k(s.type.name,e);p?t?(u(p,l,s),c(i,l,s)):(i.$ref=u(p,l,s),function(e,t,n){const i=o.makeRefId(n.location.source.absoluteRef,e.$ref);a.set(i,{document:r,isRemote:!1,node:t.node,nodePointer:e.$ref,resolved:!0})}(i,l,s)):c(i,l,s)}},DefinitionRoot:{enter(t){e===d.OasMajorVersion.Version3?s=t.components=t.components||{}:e===d.OasMajorVersion.Version2&&(s=t)}}};function c(e,t,n){g.isPlainObject(t.node)?(delete e.$ref,Object.assign(e,t.node)):n.parent[n.key]=t.node}function u(t,n,r){s[t]=s[t]||{};const i=function(e,t,n){const[r,i]=[e.location.source.absoluteRef,e.location.pointer],o=s[t];let a="";const l=i.slice(2).split("/").filter(Boolean);for(;l.length>0;)if(a=l.pop()+(a?`-${a}`:""),!o||!o[a]||p(o[a],e,n))return a;if(a=f.refBaseName(r)+(a?`_${a}`:""),!o[a]||p(o[a],e,n))return a;const c=a;let u=2;for(;o[a]&&!p(o[a],e,n);)a=`${c}-${u}`,u++;return o[a]||n.report({message:`Two schemas are referenced with the same name but different content. Renamed ${c} to ${a}.`,location:n.location,forceSeverity:"warn"}),a}(n,t,r);return s[t][i]=n.node,e===d.OasMajorVersion.Version3?`#/components/${t}/${i}`:`#/${t}/${i}`}function p(e,t,n){var r;return!(!f.isRef(e)||(null===(r=n.resolve(e).location)||void 0===r?void 0:r.absolutePointer)!==t.location.absolutePointer)||i(e,t.node)}return e===d.OasMajorVersion.Version3&&(l.DiscriminatorMapping={leave(n,r){for(const i of Object.keys(n)){const o=n[i],a=r.resolve({$ref:o});if(!a.location||void 0===a.node)return void m.reportUnresolvedRef(a,r.report,r.location.child(i));const s=k("Schema",e);t?u(s,a,r):n[i]=u(s,a,r)}}}),l}!function(e){e.Version2="oas2",e.Version3_0="oas3_0",e.Version3_1="oas3_1"}(x=t.OasVersion||(t.OasVersion={})),t.bundle=function(e){return r(this,void 0,void 0,(function*(){const{ref:t,doc:n,externalRefResolver:r=new o.BaseResolver(e.config.resolve),base:i=null}=e;if(!t&&!n)throw new Error("Document or reference is required.\n");const a=void 0!==n?n:yield r.resolveDocument(i,t,!0);if(a instanceof Error)throw a;return w(Object.assign(Object.assign({document:a},e),{config:e.config.lint,externalRefResolver:r}))}))},t.bundleDocument=w,t.mapTypeToComponent=k},3777:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Config=t.LintConfig=t.AVAILABLE_REGIONS=t.DOMAINS=t.DEFAULT_REGION=t.IGNORE_FILE=void 0;const r=n(5101),i=n(6470),o=n(5273),a=n(771),s=n(1510),l=n(2565);t.IGNORE_FILE=".redocly.lint-ignore.yaml",t.DEFAULT_REGION="us";const c={}.REDOCLY_DOMAIN;t.DOMAINS={us:"redocly.com",eu:"eu.redocly.com"},(null==c?void 0:c.endsWith(".redocly.host"))&&(t.DOMAINS[c.split(".")[0]]=c),"redoc.online"===c&&(t.DOMAINS[c]=c),t.AVAILABLE_REGIONS=Object.keys(t.DOMAINS);class u{constructor(e,n){this.rawConfig=e,this.configFile=n,this.ignore={},this._usedRules=new Set,this._usedVersions=new Set,this.plugins=e.plugins||[],this.doNotResolveExamples=!!e.doNotResolveExamples,this.recommendedFallback=e.recommendedFallback||!1,this.rules={[s.OasVersion.Version2]:Object.assign(Object.assign({},e.rules),e.oas2Rules),[s.OasVersion.Version3_0]:Object.assign(Object.assign({},e.rules),e.oas3_0Rules),[s.OasVersion.Version3_1]:Object.assign(Object.assign({},e.rules),e.oas3_1Rules)},this.preprocessors={[s.OasVersion.Version2]:Object.assign(Object.assign({},e.preprocessors),e.oas2Preprocessors),[s.OasVersion.Version3_0]:Object.assign(Object.assign({},e.preprocessors),e.oas3_0Preprocessors),[s.OasVersion.Version3_1]:Object.assign(Object.assign({},e.preprocessors),e.oas3_1Preprocessors)},this.decorators={[s.OasVersion.Version2]:Object.assign(Object.assign({},e.decorators),e.oas2Decorators),[s.OasVersion.Version3_0]:Object.assign(Object.assign({},e.decorators),e.oas3_0Decorators),[s.OasVersion.Version3_1]:Object.assign(Object.assign({},e.decorators),e.oas3_1Decorators)},this.extendPaths=e.extendPaths||[],this.pluginPaths=e.pluginPaths||[];const a=this.configFile?i.dirname(this.configFile):"undefined"!=typeof process&&process.cwd()||"",l=i.join(a,t.IGNORE_FILE);if(r.hasOwnProperty("existsSync")&&r.existsSync(l)){this.ignore=o.parseYaml(r.readFileSync(l,"utf-8"))||{};for(const e of Object.keys(this.ignore)){this.ignore[i.resolve(i.dirname(l),e)]=this.ignore[e];for(const t of Object.keys(this.ignore[e]))this.ignore[e][t]=new Set(this.ignore[e][t]);delete this.ignore[e]}}}saveIgnore(){const e=this.configFile?i.dirname(this.configFile):process.cwd(),n=i.join(e,t.IGNORE_FILE),s={};for(const t of Object.keys(this.ignore)){const n=s[a.slash(i.relative(e,t))]=this.ignore[t];for(const e of Object.keys(n))n[e]=Array.from(n[e])}r.writeFileSync(n,"# This file instructs Redocly's linter to ignore the rules contained for specific parts of your API.\n# See https://redoc.ly/docs/cli/ for more information.\n"+o.stringifyYaml(s))}addIgnore(e){const t=this.ignore,n=e.location[0];if(void 0===n.pointer)return;const r=t[n.source.absoluteRef]=t[n.source.absoluteRef]||{};(r[e.ruleId]=r[e.ruleId]||new Set).add(n.pointer)}addProblemToIgnore(e){const t=e.location[0];if(void 0===t.pointer)return e;const n=(this.ignore[t.source.absoluteRef]||{})[e.ruleId],r=n&&n.has(t.pointer);return r?Object.assign(Object.assign({},e),{ignored:r}):e}extendTypes(e,t){let n=e;for(const e of this.plugins)if(void 0!==e.typeExtension)switch(t){case s.OasVersion.Version3_0:case s.OasVersion.Version3_1:if(!e.typeExtension.oas3)continue;n=e.typeExtension.oas3(n,t);case s.OasVersion.Version2:if(!e.typeExtension.oas2)continue;n=e.typeExtension.oas2(n,t);default:throw new Error("Not implemented")}return n}getRuleSettings(e,t){this._usedRules.add(e),this._usedVersions.add(t);const n=this.rules[t][e]||"off";return"string"==typeof n?{severity:n}:Object.assign({severity:"error"},n)}getPreprocessorSettings(e,t){this._usedRules.add(e),this._usedVersions.add(t);const n=this.preprocessors[t][e]||"off";return"string"==typeof n?{severity:"on"===n?"error":n}:Object.assign({severity:"error"},n)}getDecoratorSettings(e,t){this._usedRules.add(e),this._usedVersions.add(t);const n=this.decorators[t][e]||"off";return"string"==typeof n?{severity:"on"===n?"error":n}:Object.assign({severity:"error"},n)}getUnusedRules(){const e=[],t=[],n=[];for(const r of Array.from(this._usedVersions))e.push(...Object.keys(this.rules[r]).filter((e=>!this._usedRules.has(e)))),t.push(...Object.keys(this.decorators[r]).filter((e=>!this._usedRules.has(e)))),n.push(...Object.keys(this.preprocessors[r]).filter((e=>!this._usedRules.has(e))));return{rules:e,preprocessors:n,decorators:t}}getRulesForOasVersion(e){switch(e){case s.OasMajorVersion.Version3:const e=[];return this.plugins.forEach((t=>{var n;return(null===(n=t.preprocessors)||void 0===n?void 0:n.oas3)&&e.push(t.preprocessors.oas3)})),this.plugins.forEach((t=>{var n;return(null===(n=t.rules)||void 0===n?void 0:n.oas3)&&e.push(t.rules.oas3)})),this.plugins.forEach((t=>{var n;return(null===(n=t.decorators)||void 0===n?void 0:n.oas3)&&e.push(t.decorators.oas3)})),e;case s.OasMajorVersion.Version2:const t=[];return this.plugins.forEach((e=>{var n;return(null===(n=e.preprocessors)||void 0===n?void 0:n.oas2)&&t.push(e.preprocessors.oas2)})),this.plugins.forEach((e=>{var n;return(null===(n=e.rules)||void 0===n?void 0:n.oas2)&&t.push(e.rules.oas2)})),this.plugins.forEach((e=>{var n;return(null===(n=e.decorators)||void 0===n?void 0:n.oas2)&&t.push(e.decorators.oas2)})),t}}skipRules(e){for(const t of e||[])for(const e of Object.values(s.OasVersion))this.rules[e][t]&&(this.rules[e][t]="off")}skipPreprocessors(e){for(const t of e||[])for(const e of Object.values(s.OasVersion))this.preprocessors[e][t]&&(this.preprocessors[e][t]="off")}skipDecorators(e){for(const t of e||[])for(const e of Object.values(s.OasVersion))this.decorators[e][t]&&(this.decorators[e][t]="off")}}t.LintConfig=u,t.Config=class{constructor(e,t){this.rawConfig=e,this.configFile=t,this.apis=e.apis||{},this.lint=new u(e.lint||{},t),this["features.openapi"]=e["features.openapi"]||{},this["features.mockServer"]=e["features.mockServer"]||{},this.resolve=l.getResolveConfig(null==e?void 0:e.resolve),this.region=e.region,this.organization=e.organization}}},5030:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.initRules=void 0;const r=n(771);t.initRules=function(e,t,n,i){return e.flatMap((e=>Object.keys(e).map((r=>{const o=e[r],a="rules"===n?t.getRuleSettings(r,i):"preprocessors"===n?t.getPreprocessorSettings(r,i):t.getDecoratorSettings(r,i);if("off"===a.severity)return;const s=o(a);return Array.isArray(s)?s.map((e=>({severity:a.severity,ruleId:r,visitor:e}))):{severity:a.severity,ruleId:r,visitor:s}})))).flatMap((e=>e)).filter(r.notUndefined)}},2565:function(e,t,n){"use strict";var r=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n};Object.defineProperty(t,"__esModule",{value:!0}),t.getUniquePlugins=t.getResolveConfig=t.transformConfig=t.getMergedConfig=t.mergeExtends=t.prefixRules=t.transformApiDefinitionsToApis=t.parsePresetName=void 0;const i=n(7121),o=n(771),a=n(3777);function s(e={}){let t={};for(const[n,r]of Object.entries(e))t[n]={root:r};return t}t.parsePresetName=function(e){if(e.indexOf("/")>-1){const[t,n]=e.split("/");return{pluginId:t,configName:n}}return{pluginId:"",configName:e}},t.transformApiDefinitionsToApis=s,t.prefixRules=function(e,t){if(!t)return e;const n={};for(const r of Object.keys(e))n[`${t}/${r}`]=e[r];return n},t.mergeExtends=function(e){const t={rules:{},oas2Rules:{},oas3_0Rules:{},oas3_1Rules:{},preprocessors:{},oas2Preprocessors:{},oas3_0Preprocessors:{},oas3_1Preprocessors:{},decorators:{},oas2Decorators:{},oas3_0Decorators:{},oas3_1Decorators:{},plugins:[],pluginPaths:[],extendPaths:[]};for(let n of e){if(n.extends)throw new Error(`\`extends\` is not supported in shared configs yet: ${JSON.stringify(n,null,2)}.`);Object.assign(t.rules,n.rules),Object.assign(t.oas2Rules,n.oas2Rules),o.assignExisting(t.oas2Rules,n.rules||{}),Object.assign(t.oas3_0Rules,n.oas3_0Rules),o.assignExisting(t.oas3_0Rules,n.rules||{}),Object.assign(t.oas3_1Rules,n.oas3_1Rules),o.assignExisting(t.oas3_1Rules,n.rules||{}),Object.assign(t.preprocessors,n.preprocessors),Object.assign(t.oas2Preprocessors,n.oas2Preprocessors),o.assignExisting(t.oas2Preprocessors,n.preprocessors||{}),Object.assign(t.oas3_0Preprocessors,n.oas3_0Preprocessors),o.assignExisting(t.oas3_0Preprocessors,n.preprocessors||{}),Object.assign(t.oas3_1Preprocessors,n.oas3_1Preprocessors),o.assignExisting(t.oas3_1Preprocessors,n.preprocessors||{}),Object.assign(t.decorators,n.decorators),Object.assign(t.oas2Decorators,n.oas2Decorators),o.assignExisting(t.oas2Decorators,n.decorators||{}),Object.assign(t.oas3_0Decorators,n.oas3_0Decorators),o.assignExisting(t.oas3_0Decorators,n.decorators||{}),Object.assign(t.oas3_1Decorators,n.oas3_1Decorators),o.assignExisting(t.oas3_1Decorators,n.decorators||{}),t.plugins.push(...n.plugins||[]),t.pluginPaths.push(...n.pluginPaths||[]),t.extendPaths.push(...new Set(n.extendPaths))}return t},t.getMergedConfig=function(e,t){var n,r,i,o,s,l;const c=[...Object.values(e.apis).map((e=>{var t;return null===(t=null==e?void 0:e.lint)||void 0===t?void 0:t.extendPaths})),null===(r=null===(n=e.rawConfig)||void 0===n?void 0:n.lint)||void 0===r?void 0:r.extendPaths].flat().filter(Boolean),u=[...Object.values(e.apis).map((e=>{var t;return null===(t=null==e?void 0:e.lint)||void 0===t?void 0:t.pluginPaths})),null===(o=null===(i=e.rawConfig)||void 0===i?void 0:i.lint)||void 0===o?void 0:o.pluginPaths].flat().filter(Boolean);return t?new a.Config(Object.assign(Object.assign({},e.rawConfig),{lint:Object.assign(Object.assign({},e.apis[t]?e.apis[t].lint:e.rawConfig.lint),{extendPaths:c,pluginPaths:u}),"features.openapi":Object.assign(Object.assign({},e["features.openapi"]),null===(s=e.apis[t])||void 0===s?void 0:s["features.openapi"]),"features.mockServer":Object.assign(Object.assign({},e["features.mockServer"]),null===(l=e.apis[t])||void 0===l?void 0:l["features.mockServer"])}),e.configFile):e},t.transformConfig=function(e){if(e.apis&&e.apiDefinitions)throw new Error("Do not use 'apiDefinitions' field. Use 'apis' instead.\n");if(e["features.openapi"]&&e.referenceDocs)throw new Error("Do not use 'referenceDocs' field. Use 'features.openapi' instead.\n");const t=e,{apiDefinitions:n,referenceDocs:o}=t,a=r(t,["apiDefinitions","referenceDocs"]);return n&&process.stderr.write(`The ${i.yellow("apiDefinitions")} field is deprecated. Use ${i.green("apis")} instead. Read more about this change: https://redocly.com/docs/api-registry/guides/migration-guide-config-file/#changed-properties\n`),o&&process.stderr.write(`The ${i.yellow("referenceDocs")} field is deprecated. Use ${i.green("features.openapi")} instead. Read more about this change: https://redocly.com/docs/api-registry/guides/migration-guide-config-file/#changed-properties\n`),Object.assign({"features.openapi":o,apis:s(n)},a)},t.getResolveConfig=function(e){var t,n;return{http:{headers:null!==(n=null===(t=null==e?void 0:e.http)||void 0===t?void 0:t.headers)&&void 0!==n?n:[],customFetch:void 0}}},t.getUniquePlugins=function(e){const t=new Set,n=[];for(const r of e)t.has(r.id)?r.id&&process.stderr.write(`Duplicate plugin id "${i.yellow(r.id)}".\n`):(n.push(r),t.add(r.id));return n}},5273:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.stringifyYaml=t.parseYaml=void 0;const r=n(3320),i=r.JSON_SCHEMA.extend({implicit:[r.types.merge],explicit:[r.types.binary,r.types.omap,r.types.pairs,r.types.set]});t.parseYaml=(e,t)=>r.load(e,Object.assign({schema:i},t)),t.stringifyYaml=(e,t)=>r.dump(e,t)},1510:function(e,t){"use strict";var n,r;Object.defineProperty(t,"__esModule",{value:!0}),t.openAPIMajor=t.detectOpenAPI=t.OasMajorVersion=t.OasVersion=void 0,function(e){e.Version2="oas2",e.Version3_0="oas3_0",e.Version3_1="oas3_1"}(n=t.OasVersion||(t.OasVersion={})),function(e){e.Version2="oas2",e.Version3="oas3"}(r=t.OasMajorVersion||(t.OasMajorVersion={})),t.detectOpenAPI=function(e){if("object"!=typeof e)throw new Error("Document must be JSON object, got "+typeof e);if(!e.openapi&&!e.swagger)throw new Error("This doesn’t look like an OpenAPI document.\n");if(e.openapi&&"string"!=typeof e.openapi)throw new Error(`Invalid OpenAPI version: should be a string but got "${typeof e.openapi}"`);if(e.openapi&&e.openapi.startsWith("3.0"))return n.Version3_0;if(e.openapi&&e.openapi.startsWith("3.1"))return n.Version3_1;if(e.swagger&&"2.0"===e.swagger)return n.Version2;throw new Error(`Unsupported OpenAPI Version: ${e.openapi||e.swagger}`)},t.openAPIMajor=function(e){return e===n.Version2?r.Version2:r.Version3}},1094:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(e){o(e)}}function s(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.isRedoclyRegistryURL=t.RedoclyClient=void 0;const i=n(2116),o=n(6470),a=n(6918),s=n(7121),l=n(1390),c=n(3777),u=n(771),p=".redocly-config.json";let d;t.RedoclyClient=class{constructor(e){this.accessTokens={},this.region=this.loadRegion(e),this.loadTokens(),this.domain=e?c.DOMAINS[e]:{}.REDOCLY_DOMAIN||c.DOMAINS[c.DEFAULT_REGION],d=this.domain,this.registryApi=new l.RegistryApi(this.accessTokens,this.region)}loadRegion(e){return e&&!c.DOMAINS[e]&&(null.write(s.red(`Invalid argument: region in config file.\nGiven: ${s.green(e)}, choices: "us", "eu".\n`)),process.exit(1)),{}.REDOCLY_DOMAIN?c.AVAILABLE_REGIONS.find((e=>c.DOMAINS[e]==={}.REDOCLY_DOMAIN))||c.DEFAULT_REGION:e||c.DEFAULT_REGION}getRegion(){return this.region}hasTokens(){return u.isNotEmptyObject(this.accessTokens)}hasToken(){return!!this.accessTokens[this.region]}getAuthorizationHeader(){return r(this,void 0,void 0,(function*(){const e=this.accessTokens[this.region];if(!e||this.isAuthorizedWithRedoclyByRegion())return e;process.stderr.write(`${s.yellow("Warning:")} invalid Redocly API key. Use "npx @redocly/openapi-cli login" to provide your API key\n`)}))}setAccessTokens(e){this.accessTokens=e}loadTokens(){const e=o.resolve(a.homedir(),p),t=this.readCredentialsFile(e);u.isNotEmptyObject(t)&&this.setAccessTokens(Object.assign(Object.assign({},t),t.token&&!t[this.region]&&{[this.region]:t.token})),{}.REDOCLY_AUTHORIZATION&&this.setAccessTokens(Object.assign(Object.assign({},this.accessTokens),{[this.region]:{}.REDOCLY_AUTHORIZATION}))}getAllTokens(){return Object.entries(this.accessTokens).filter((([e])=>c.AVAILABLE_REGIONS.includes(e))).map((([e,t])=>({region:e,token:t})))}getValidTokens(){return r(this,void 0,void 0,(function*(){const e=this.getAllTokens(),t=yield Promise.allSettled(e.map((({token:e,region:t})=>this.verifyToken(e,t))));return e.filter(((e,n)=>"fulfilled"===t[n].status)).map((({token:e,region:t})=>({token:e,region:t,valid:!0})))}))}getTokens(){return r(this,void 0,void 0,(function*(){return this.hasTokens()?yield this.getValidTokens():[]}))}isAuthorizedWithRedoclyByRegion(){return r(this,void 0,void 0,(function*(){if(!this.hasTokens())return!1;const e=this.accessTokens[this.region];if(!e)return!1;try{return yield this.verifyToken(e,this.region),!0}catch(e){return!1}}))}isAuthorizedWithRedocly(){return r(this,void 0,void 0,(function*(){return this.hasTokens()&&u.isNotEmptyObject(yield this.getValidTokens())}))}readCredentialsFile(e){return i.existsSync(e)?JSON.parse(i.readFileSync(e,"utf-8")):{}}verifyToken(e,t,n=!1){return r(this,void 0,void 0,(function*(){return this.registryApi.authStatus(e,t,n)}))}login(e,t=!1){return r(this,void 0,void 0,(function*(){const n=o.resolve(a.homedir(),p);null.write(s.gray("\n Logging in...\n"));try{yield this.verifyToken(e,this.region,t)}catch(e){null.write(s.red("Authorization failed. Please check if you entered a valid API key.\n")),process.exit(1)}const r=Object.assign(Object.assign({},this.readCredentialsFile(n)),{[this.region]:e,token:e});this.accessTokens=r,this.registryApi.setAccessTokens(r),i.writeFileSync(n,JSON.stringify(r,null,2)),null.write(s.green(" Authorization confirmed. ✅\n\n"))}))}logout(){const e=o.resolve(a.homedir(),p);i.existsSync(e)&&i.unlinkSync(e),null.write("Logged out from the Redocly account. ✋\n")}},t.isRedoclyRegistryURL=function(e){const t=d||{}.REDOCLY_DOMAIN||c.DOMAINS[c.DEFAULT_REGION],n="redocly.com"===t?"redoc.ly":t;return!(!e.startsWith(`https://api.${t}/registry/`)&&!e.startsWith(`https://api.${n}/registry/`))}},1390:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(e){o(e)}}function s(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.RegistryApi=void 0;const i=n(7707),o=n(3777),a=n(771),s=n(337).i8;t.RegistryApi=class{constructor(e,t){this.accessTokens=e,this.region=t}get accessToken(){return a.isNotEmptyObject(this.accessTokens)&&this.accessTokens[this.region]}getBaseUrl(e=o.DEFAULT_REGION){return`https://api.${o.DOMAINS[e]}/registry`}setAccessTokens(e){return this.accessTokens=e,this}request(e="",t={},n){return r(this,void 0,void 0,(function*(){const r=Object.assign({},t.headers||{},{"x-redocly-cli-version":s});if(!r.hasOwnProperty("authorization"))throw new Error("Unauthorized");const o=yield i.default(`${this.getBaseUrl(n)}${e}`,Object.assign({},t,{headers:r}));if(401===o.status)throw new Error("Unauthorized");if(404===o.status){const e=yield o.json();throw new Error(e.code)}return o}))}authStatus(e,t,n=!1){return r(this,void 0,void 0,(function*(){try{const n=yield this.request("",{headers:{authorization:e}},t);return yield n.json()}catch(e){throw n&&console.log(e),e}}))}prepareFileUpload({organizationId:e,name:t,version:n,filesHash:i,filename:o,isUpsert:a}){return r(this,void 0,void 0,(function*(){const r=yield this.request(`/${e}/${t}/${n}/prepare-file-upload`,{method:"POST",headers:{"content-type":"application/json",authorization:this.accessToken},body:JSON.stringify({filesHash:i,filename:o,isUpsert:a})},this.region);if(r.ok)return r.json();throw new Error("Could not prepare file upload")}))}pushApi({organizationId:e,name:t,version:n,rootFilePath:i,filePaths:o,branch:a,isUpsert:s}){return r(this,void 0,void 0,(function*(){if(!(yield this.request(`/${e}/${t}/${n}`,{method:"PUT",headers:{"content-type":"application/json",authorization:this.accessToken},body:JSON.stringify({rootFilePath:i,filePaths:o,branch:a,isUpsert:s})},this.region)).ok)throw new Error("Could not push api")}))}}},7468:function(e,t){"use strict";function n(e,t){return""===e&&(e="#/"),"/"===e[e.length-1]?e+t:e+"/"+t}Object.defineProperty(t,"__esModule",{value:!0}),t.isMappingRef=t.isAbsoluteUrl=t.refBaseName=t.pointerBaseName=t.parsePointer=t.parseRef=t.escapePointer=t.unescapePointer=t.Location=t.isRef=t.joinPointer=void 0,t.joinPointer=n,t.isRef=function(e){return e&&"string"==typeof e.$ref};class r{constructor(e,t){this.source=e,this.pointer=t}child(e){return new r(this.source,n(this.pointer,(Array.isArray(e)?e:[e]).map(o).join("/")))}key(){return Object.assign(Object.assign({},this),{reportOnKey:!0})}get absolutePointer(){return this.source.absoluteRef+("#/"===this.pointer?"":this.pointer)}}function i(e){return decodeURIComponent(e.replace(/~1/g,"/").replace(/~0/g,"~"))}function o(e){return"number"==typeof e?e:e.replace(/~/g,"~0").replace(/\//g,"~1")}t.Location=r,t.unescapePointer=i,t.escapePointer=o,t.parseRef=function(e){const[t,n]=e.split("#/");return{uri:t||null,pointer:n?n.split("/").map(i).filter(Boolean):[]}},t.parsePointer=function(e){return e.substr(2).split("/").map(i)},t.pointerBaseName=function(e){const t=e.split("/");return t[t.length-1]},t.refBaseName=function(e){const t=e.split(/[\/\\]/);return t[t.length-1].replace(/\.[^.]+$/,"")},t.isAbsoluteUrl=function(e){return e.startsWith("http://")||e.startsWith("https://")},t.isMappingRef=function(e){return e.startsWith("#")||e.startsWith("https://")||e.startsWith("./")||e.startsWith("../")||e.indexOf("/")>-1}},4182:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(e){o(e)}}function s(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.resolveDocument=t.BaseResolver=t.makeDocumentFromString=t.makeRefId=t.YamlParseError=t.ResolveError=t.Source=void 0;const i=n(3197),o=n(6470),a=n(7468),s=n(5220),l=n(771);class c{constructor(e,t,n){this.absoluteRef=e,this.body=t,this.mimeType=n}getAst(e){var t;return void 0===this._ast&&(this._ast=null!==(t=e(this.body,{filename:this.absoluteRef}))&&void 0!==t?t:void 0,this._ast&&0===this._ast.kind&&""===this._ast.value&&1!==this._ast.startPosition&&(this._ast.startPosition=1,this._ast.endPosition=1)),this._ast}getLines(){return void 0===this._lines&&(this._lines=this.body.split(/\r\n|[\n\r]/g)),this._lines}}t.Source=c;class u extends Error{constructor(e){super(e.message),this.originalError=e,Object.setPrototypeOf(this,u.prototype)}}t.ResolveError=u;const p=/\((\d+):(\d+)\)$/;class d extends Error{constructor(e,t){super(e.message.split("\n")[0]),this.originalError=e,this.source=t,Object.setPrototypeOf(this,d.prototype);const[,n,r]=this.message.match(p)||[];this.line=parseInt(n,10),this.col=parseInt(r,10)}}function f(e,t){return e+"::"+t}function h(e,t){return{prev:e,node:t}}t.YamlParseError=d,t.makeRefId=f,t.makeDocumentFromString=function(e,t){const n=new c(t,e);try{return{source:n,parsed:l.parseYaml(e,{filename:t})}}catch(e){throw new d(e,n)}},t.BaseResolver=class{constructor(e={http:{headers:[]}}){this.config=e,this.cache=new Map}getFiles(){return new Set(Array.from(this.cache.keys()))}resolveExternalRef(e,t){return a.isAbsoluteUrl(t)?t:e&&a.isAbsoluteUrl(e)?new URL(t,e).href:o.resolve(e?o.dirname(e):process.cwd(),t)}loadExternalRef(e){return r(this,void 0,void 0,(function*(){try{if(a.isAbsoluteUrl(e)){const{body:t,mimeType:n}=yield l.readFileFromUrl(e,this.config.http);return new c(e,t,n)}return new c(e,yield i.promises.readFile(e,"utf-8"))}catch(e){throw new u(e)}}))}parseDocument(e,t=!1){var n;const r=e.absoluteRef.substr(e.absoluteRef.lastIndexOf("."));if(![".json",".json",".yml",".yaml"].includes(r)&&!(null===(n=e.mimeType)||void 0===n?void 0:n.match(/(json|yaml|openapi)/))&&!t)return{source:e,parsed:e.body};try{return{source:e,parsed:l.parseYaml(e.body,{filename:e.absoluteRef})}}catch(t){throw new d(t,e)}}resolveDocument(e,t,n=!1){return r(this,void 0,void 0,(function*(){const r=this.resolveExternalRef(e,t),i=this.cache.get(r);if(i)return i;const o=this.loadExternalRef(r).then((e=>this.parseDocument(e,n)));return this.cache.set(r,o),o}))}};const m={name:"unknown",properties:{}},g={name:"scalar",properties:{}};t.resolveDocument=function(e){return r(this,void 0,void 0,(function*(){const{rootDocument:t,externalRefResolver:n,rootType:i}=e,o=new Map,l=new Set,c=[];let u;!function e(t,i,u,p){function d(e,t,i){return r(this,void 0,void 0,(function*(){if(function(e,t){for(;e;){if(e.node===t)return!0;e=e.prev}return!1}(i.prev,t))throw new Error("Self-referencing circular pointer");const{uri:r,pointer:s}=a.parseRef(t.$ref),l=null!==r;let c;try{c=l?yield n.resolveDocument(e.source.absoluteRef,r):e}catch(n){const r={resolved:!1,isRemote:l,document:void 0,error:n},i=f(e.source.absoluteRef,t.$ref);return o.set(i,r),r}let u={resolved:!0,document:c,isRemote:l,node:e.parsed,nodePointer:"#/"},p=c.parsed;const m=s;for(let e of m){if("object"!=typeof p){p=void 0;break}if(void 0!==p[e])p=p[e],u.nodePointer=a.joinPointer(u.nodePointer,a.escapePointer(e));else{if(!a.isRef(p)){p=void 0;break}if(u=yield d(c,p,h(i,p)),c=u.document||c,"object"!=typeof u.node){p=void 0;break}p=u.node[e],u.nodePointer=a.joinPointer(u.nodePointer,a.escapePointer(e))}}u.node=p,u.document=c;const g=f(e.source.absoluteRef,t.$ref);return u.document&&a.isRef(p)&&(u=yield d(u.document,p,h(i,p))),o.set(g,u),Object.assign({},u)}))}!function t(n,r,o){if("object"!=typeof n||null===n)return;const u=`${r.name}::${o}`;if(!l.has(u))if(l.add(u),Array.isArray(n)){const e=r.items;if(r!==m&&void 0===e)return;for(let r=0;r<n.length;r++)t(n[r],e||m,a.joinPointer(o,r))}else{for(const e of Object.keys(n)){let i=n[e],l=r.properties[e];void 0===l&&(l=r.additionalProperties),"function"==typeof l&&(l=l(i,e)),void 0===l&&(l=m),!s.isNamedType(l)&&(null==l?void 0:l.directResolveAs)&&(l=l.directResolveAs,i={$ref:i}),l&&void 0===l.name&&!1!==l.resolvable&&(l=g),s.isNamedType(l)&&"object"==typeof i&&t(i,l,a.joinPointer(o,a.escapePointer(e)))}if(a.isRef(n)){const t=d(i,n,{prev:null,node:n}).then((t=>{t.resolved&&e(t.node,t.document,t.nodePointer,r)}));c.push(t)}}}(t,p,i.source.absoluteRef+u)}(t.parsed,t,"#/",i);do{u=yield Promise.all(c)}while(c.length!==u.length);return o}))}},348:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reportUnresolvedRef=t.NoUnresolvedRefs=void 0;const r=n(4182);function i(e,t,n){var i;const o=e.error;o instanceof r.YamlParseError&&t({message:"Failed to parse: "+o.message,location:{source:o.source,pointer:void 0,start:{col:o.col,line:o.line}}});const a=null===(i=e.error)||void 0===i?void 0:i.message;t({location:n,message:"Can't resolve $ref"+(a?": "+a:"")})}t.NoUnresolvedRefs=()=>({ref:{leave(e,{report:t,location:n},r){void 0===r.node&&i(r,t,n)}},DiscriminatorMapping(e,{report:t,resolve:n,location:r}){for(const o of Object.keys(e)){const a=n({$ref:e[o]});if(void 0!==a.node)return;i(a,t,r.child(o))}}}),t.reportUnresolvedRef=i},4508:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RemoveUnusedComponents=void 0;const r=n(771);t.RemoveUnusedComponents=()=>{let e=new Map;function t(t,n,r){var i;e.set(t.absolutePointer,{used:(null===(i=e.get(t.absolutePointer))||void 0===i?void 0:i.used)||!1,componentType:n,name:r})}return{ref:{leave(t,{type:n,resolve:r,key:i}){if(["Schema","Parameter","Response","SecurityScheme"].includes(n.name)){const n=r(t);if(!n.location)return;e.set(n.location.absolutePointer,{used:!0,name:i.toString()})}}},DefinitionRoot:{leave(t,n){const i=n.getVisitorData();i.removedCount=0;let o=new Set;e.forEach((e=>{const{used:n,name:r,componentType:a}=e;!n&&a&&(o.add(a),delete t[a][r],i.removedCount++)}));for(const e of o)r.isEmptyObject(t[e])&&delete t[e]}},NamedSchemas:{Schema(e,{location:n,key:r}){e.allOf||t(n,"definitions",r.toString())}},NamedParameters:{Parameter(e,{location:n,key:r}){t(n,"parameters",r.toString())}},NamedResponses:{Response(e,{location:n,key:r}){t(n,"responses",r.toString())}},NamedSecuritySchemes:{SecurityScheme(e,{location:n,key:r}){t(n,"securityDefinitions",r.toString())}}}}},6350:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RemoveUnusedComponents=void 0;const r=n(771);t.RemoveUnusedComponents=()=>{let e=new Map;function t(t,n,r){var i;e.set(t.absolutePointer,{used:(null===(i=e.get(t.absolutePointer))||void 0===i?void 0:i.used)||!1,componentType:n,name:r})}return{ref:{leave(t,{type:n,resolve:r,key:i}){if(["Schema","Header","Parameter","Response","Example","RequestBody"].includes(n.name)){const n=r(t);if(!n.location)return;e.set(n.location.absolutePointer,{used:!0,name:i.toString()})}}},DefinitionRoot:{leave(t,n){const i=n.getVisitorData();i.removedCount=0,e.forEach((e=>{const{used:n,componentType:o,name:a}=e;if(!n&&o){let e=t.components[o];delete e[a],i.removedCount++,r.isEmptyObject(e)&&delete t.components[o]}})),r.isEmptyObject(t.components)&&delete t.components}},NamedSchemas:{Schema(e,{location:n,key:r}){e.allOf||t(n,"schemas",r.toString())}},NamedParameters:{Parameter(e,{location:n,key:r}){t(n,"parameters",r.toString())}},NamedResponses:{Response(e,{location:n,key:r}){t(n,"responses",r.toString())}},NamedExamples:{Example(e,{location:n,key:r}){t(n,"examples",r.toString())}},NamedRequestBodies:{RequestBody(e,{location:n,key:r}){t(n,"requestBodies",r.toString())}},NamedHeaders:{Header(e,{location:n,key:r}){t(n,"headers",r.toString())}}}}},5220:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isNamedType=t.normalizeTypes=t.mapOf=t.listOf=void 0,t.listOf=function(e){return{name:`${e}List`,properties:{},items:e}},t.mapOf=function(e){return{name:`${e}Map`,properties:{},additionalProperties:()=>e}},t.normalizeTypes=function(e,t={}){const n={};for(const t of Object.keys(e))n[t]=Object.assign(Object.assign({},e[t]),{name:t});for(const e of Object.values(n))r(e);return n;function r(e){if(e.additionalProperties&&(e.additionalProperties=i(e.additionalProperties)),e.items&&(e.items=i(e.items)),e.properties){const n={};for(const[r,o]of Object.entries(e.properties))n[r]=i(o),t.doNotResolveExamples&&o&&o.isExample&&(n[r]=Object.assign(Object.assign({},o),{resolvable:!1}));e.properties=n}}function i(e){if("string"==typeof e){if(!n[e])throw new Error(`Unknown type name found: ${e}`);return n[e]}return"function"==typeof e?(t,n)=>i(e(t,n)):e&&e.name?(r(e=Object.assign({},e)),e):e&&e.directResolveAs?Object.assign(Object.assign({},e),{directResolveAs:i(e.directResolveAs)}):e}},t.isNamedType=function(e){return"string"==typeof(null==e?void 0:e.name)}},388:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Oas2Types=void 0;const r=n(5220),i=/^[0-9][0-9Xx]{2}$/,o={properties:{swagger:{type:"string"},info:"Info",host:{type:"string"},basePath:{type:"string"},schemes:{type:"array",items:{type:"string"}},consumes:{type:"array",items:{type:"string"}},produces:{type:"array",items:{type:"string"}},paths:"PathMap",definitions:"NamedSchemas",parameters:"NamedParameters",responses:"NamedResponses",securityDefinitions:"NamedSecuritySchemes",security:r.listOf("SecurityRequirement"),tags:r.listOf("Tag"),externalDocs:"ExternalDocs"},required:["swagger","paths","info"]},a={properties:{$ref:{type:"string"},parameters:r.listOf("Parameter"),get:"Operation",put:"Operation",post:"Operation",delete:"Operation",options:"Operation",head:"Operation",patch:"Operation"}},s={properties:{tags:{type:"array",items:{type:"string"}},summary:{type:"string"},description:{type:"string"},externalDocs:"ExternalDocs",operationId:{type:"string"},consumes:{type:"array",items:{type:"string"}},produces:{type:"array",items:{type:"string"}},parameters:r.listOf("Parameter"),responses:"ResponsesMap",schemes:{type:"array",items:{type:"string"}},deprecated:{type:"boolean"},security:r.listOf("SecurityRequirement"),"x-codeSamples":r.listOf("XCodeSample"),"x-code-samples":r.listOf("XCodeSample")},required:["responses"]},l={properties:{default:"Response"},additionalProperties:(e,t)=>i.test(t)?"Response":void 0},c={properties:{description:{type:"string"},schema:"Schema",headers:r.mapOf("Header"),examples:"Examples"},required:["description"]},u={properties:{format:{type:"string"},title:{type:"string"},description:{type:"string"},default:null,multipleOf:{type:"number"},maximum:{type:"number"},minimum:{type:"number"},exclusiveMaximum:{type:"boolean"},exclusiveMinimum:{type:"boolean"},maxLength:{type:"number"},minLength:{type:"number"},pattern:{type:"string"},maxItems:{type:"number"},minItems:{type:"number"},uniqueItems:{type:"boolean"},maxProperties:{type:"number"},minProperties:{type:"number"},required:{type:"array",items:{type:"string"}},enum:{type:"array"},type:{type:"string",enum:["object","array","string","number","integer","boolean","null"]},items:e=>Array.isArray(e)?r.listOf("Schema"):"Schema",allOf:r.listOf("Schema"),properties:"SchemaProperties",additionalProperties:e=>"boolean"==typeof e?{type:"boolean"}:"Schema",discriminator:{type:"string"},readOnly:{type:"boolean"},xml:"Xml",externalDocs:"ExternalDocs",example:{isExample:!0}}},p={properties:{type:{enum:["basic","apiKey","oauth2"]},description:{type:"string"},name:{type:"string"},in:{type:"string",enum:["query","header"]},flow:{enum:["implicit","password","application","accessCode"]},authorizationUrl:{type:"string"},tokenUrl:{type:"string"},scopes:{type:"object",additionalProperties:{type:"string"}}},required(e){switch(null==e?void 0:e.type){case"apiKey":return["type","name","in"];case"oauth2":switch(null==e?void 0:e.flow){case"implicit":return["type","flow","authorizationUrl","scopes"];case"accessCode":return["type","flow","authorizationUrl","tokenUrl","scopes"];case"application":case"password":return["type","flow","tokenUrl","scopes"];default:return["type","flow","scopes"]}default:return["type"]}},allowed(e){switch(null==e?void 0:e.type){case"basic":return["type","description"];case"apiKey":return["type","name","in","description"];case"oauth2":switch(null==e?void 0:e.flow){case"implicit":return["type","flow","authorizationUrl","description","scopes"];case"accessCode":return["type","flow","authorizationUrl","tokenUrl","description","scopes"];case"application":case"password":return["type","flow","tokenUrl","description","scopes"];default:return["type","flow","tokenUrl","authorizationUrl","description","scopes"]}default:return["type","description"]}},extensionsPrefix:"x-"};t.Oas2Types={DefinitionRoot:o,Tag:{properties:{name:{type:"string"},description:{type:"string"},externalDocs:"ExternalDocs"},required:["name"]},ExternalDocs:{properties:{description:{type:"string"},url:{type:"string"}},required:["url"]},SecurityRequirement:{properties:{},additionalProperties:{type:"array",items:{type:"string"}}},Info:{properties:{title:{type:"string"},description:{type:"string"},termsOfService:{type:"string"},contact:"Contact",license:"License",version:{type:"string"}},required:["title","version"]},Contact:{properties:{name:{type:"string"},url:{type:"string"},email:{type:"string"}}},License:{properties:{name:{type:"string"},url:{type:"string"}},required:["name"]},PathMap:{properties:{},additionalProperties:(e,t)=>t.startsWith("/")?"PathItem":void 0},PathItem:a,Parameter:{properties:{name:{type:"string"},in:{type:"string",enum:["query","header","path","formData","body"]},description:{type:"string"},required:{type:"boolean"},schema:"Schema",type:{type:"string",enum:["string","number","integer","boolean","array","file"]},format:{type:"string"},allowEmptyValue:{type:"boolean"},items:"ParameterItems",collectionFormat:{type:"string",enum:["csv","ssv","tsv","pipes","multi"]},default:null,maximum:{type:"integer"},exclusiveMaximum:{type:"boolean"},minimum:{type:"integer"},exclusiveMinimum:{type:"boolean"},maxLength:{type:"integer"},minLength:{type:"integer"},pattern:{type:"string"},maxItems:{type:"integer"},minItems:{type:"integer"},uniqueItems:{type:"boolean"},enum:{type:"array"},multipleOf:{type:"number"}},required:e=>e&&e.in?"body"===e.in?["name","in","schema"]:"array"===e.type?["name","in","type","items"]:["name","in","type"]:["name","in"]},ParameterItems:{properties:{type:{type:"string",enum:["string","number","integer","boolean","array"]},format:{type:"string"},items:"ParameterItems",collectionFormat:{type:"string",enum:["csv","ssv","tsv","pipes","multi"]},default:null,maximum:{type:"integer"},exclusiveMaximum:{type:"boolean"},minimum:{type:"integer"},exclusiveMinimum:{type:"boolean"},maxLength:{type:"integer"},minLength:{type:"integer"},pattern:{type:"string"},maxItems:{type:"integer"},minItems:{type:"integer"},uniqueItems:{type:"boolean"},enum:{type:"array"},multipleOf:{type:"number"}},required:e=>e&&"array"===e.type?["type","items"]:["type"]},Operation:s,Examples:{properties:{},additionalProperties:{isExample:!0}},Header:{properties:{description:{type:"string"},type:{type:"string",enum:["string","number","integer","boolean","array"]},format:{type:"string"},items:"ParameterItems",collectionFormat:{type:"string",enum:["csv","ssv","tsv","pipes","multi"]},default:null,maximum:{type:"integer"},exclusiveMaximum:{type:"boolean"},minimum:{type:"integer"},exclusiveMinimum:{type:"boolean"},maxLength:{type:"integer"},minLength:{type:"integer"},pattern:{type:"string"},maxItems:{type:"integer"},minItems:{type:"integer"},uniqueItems:{type:"boolean"},enum:{type:"array"},multipleOf:{type:"number"}},required:e=>e&&"array"===e.type?["type","items"]:["type"]},ResponsesMap:l,Response:c,Schema:u,Xml:{properties:{name:{type:"string"},namespace:{type:"string"},prefix:{type:"string"},attribute:{type:"boolean"},wrapped:{type:"boolean"}}},SchemaProperties:{properties:{},additionalProperties:"Schema"},NamedSchemas:r.mapOf("Schema"),NamedResponses:r.mapOf("Response"),NamedParameters:r.mapOf("Parameter"),NamedSecuritySchemes:r.mapOf("SecurityScheme"),SecurityScheme:p,XCodeSample:{properties:{lang:{type:"string"},label:{type:"string"},source:{type:"string"}}}}},5241:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Oas3Types=void 0;const r=n(5220),i=n(7468),o=/^[0-9][0-9Xx]{2}$/,a={properties:{openapi:null,info:"Info",servers:r.listOf("Server"),security:r.listOf("SecurityRequirement"),tags:r.listOf("Tag"),externalDocs:"ExternalDocs",paths:"PathMap",components:"Components","x-webhooks":"WebhooksMap"},required:["openapi","paths","info"]},s={properties:{url:{type:"string"},description:{type:"string"},variables:r.mapOf("ServerVariable")},required:["url"]},l={properties:{$ref:{type:"string"},servers:r.listOf("Server"),parameters:r.listOf("Parameter"),summary:{type:"string"},description:{type:"string"},get:"Operation",put:"Operation",post:"Operation",delete:"Operation",options:"Operation",head:"Operation",patch:"Operation",trace:"Operation"}},c={properties:{name:{type:"string"},in:{enum:["query","header","path","cookie"]},description:{type:"string"},required:{type:"boolean"},deprecated:{type:"boolean"},allowEmptyValue:{type:"boolean"},style:{enum:["form","simple","label","matrix","spaceDelimited","pipeDelimited","deepObject"]},explode:{type:"boolean"},allowReserved:{type:"boolean"},schema:"Schema",example:{isExample:!0},examples:r.mapOf("Example"),content:"MediaTypeMap"},required:["name","in"],requiredOneOf:["schema","content"]},u={properties:{tags:{type:"array",items:{type:"string"}},summary:{type:"string"},description:{type:"string"},externalDocs:"ExternalDocs",operationId:{type:"string"},parameters:r.listOf("Parameter"),security:r.listOf("SecurityRequirement"),servers:r.listOf("Server"),requestBody:"RequestBody",responses:"ResponsesMap",deprecated:{type:"boolean"},callbacks:r.mapOf("Callback"),"x-codeSamples":r.listOf("XCodeSample"),"x-code-samples":r.listOf("XCodeSample")},required:["responses"]},p={properties:{schema:"Schema",example:{isExample:!0},examples:r.mapOf("Example"),encoding:r.mapOf("Encoding")}},d={properties:{contentType:{type:"string"},headers:r.mapOf("Header"),style:{enum:["form","simple","label","matrix","spaceDelimited","pipeDelimited","deepObject"]},explode:{type:"boolean"},allowReserved:{type:"boolean"}}},f={properties:{description:{type:"string"},required:{type:"boolean"},deprecated:{type:"boolean"},allowEmptyValue:{type:"boolean"},style:{enum:["form","simple","label","matrix","spaceDelimited","pipeDelimited","deepObject"]},explode:{type:"boolean"},allowReserved:{type:"boolean"},schema:"Schema",example:{isExample:!0},examples:r.mapOf("Example"),content:"MediaTypeMap"}},h={properties:{default:"Response"},additionalProperties:(e,t)=>o.test(t)?"Response":void 0},m={properties:{description:{type:"string"},headers:r.mapOf("Header"),content:"MediaTypeMap",links:r.mapOf("Link")},required:["description"]},g={properties:{externalDocs:"ExternalDocs",discriminator:"Discriminator",title:{type:"string"},multipleOf:{type:"number",minimum:0},maximum:{type:"number"},minimum:{type:"number"},exclusiveMaximum:{type:"boolean"},exclusiveMinimum:{type:"boolean"},maxLength:{type:"number",minimum:0},minLength:{type:"number",minimum:0},pattern:{type:"string"},maxItems:{type:"number",minimum:0},minItems:{type:"number",minimum:0},uniqueItems:{type:"boolean"},maxProperties:{type:"number",minimum:0},minProperties:{type:"number",minimum:0},required:{type:"array",items:{type:"string"}},enum:{type:"array"},type:{enum:["object","array","string","number","integer","boolean","null"]},allOf:r.listOf("Schema"),anyOf:r.listOf("Schema"),oneOf:r.listOf("Schema"),not:"Schema",properties:"SchemaProperties",items:e=>Array.isArray(e)?r.listOf("Schema"):"Schema",additionalProperties:e=>"boolean"==typeof e?{type:"boolean"}:"Schema",description:{type:"string"},format:{type:"string"},default:null,nullable:{type:"boolean"},readOnly:{type:"boolean"},writeOnly:{type:"boolean"},xml:"Xml",example:{isExample:!0},deprecated:{type:"boolean"}}},y={properties:{},additionalProperties:e=>i.isMappingRef(e)?{type:"string",directResolveAs:"Schema"}:{type:"string"}},b={properties:{type:{enum:["apiKey","http","oauth2","openIdConnect"]},description:{type:"string"},name:{type:"string"},in:{type:"string",enum:["query","header","cookie"]},scheme:{type:"string"},bearerFormat:{type:"string"},flows:"SecuritySchemeFlows",openIdConnectUrl:{type:"string"}},required(e){switch(null==e?void 0:e.type){case"apiKey":return["type","name","in"];case"http":return["type","scheme"];case"oauth2":return["type","flows"];case"openIdConnect":return["type","openIdConnectUrl"];default:return["type"]}},allowed(e){switch(null==e?void 0:e.type){case"apiKey":return["type","name","in","description"];case"http":return["type","scheme","bearerFormat","description"];case"oauth2":return["type","flows","description"];case"openIdConnect":return["type","openIdConnectUrl","description"];default:return["type","description"]}},extensionsPrefix:"x-"};t.Oas3Types={DefinitionRoot:a,Tag:{properties:{name:{type:"string"},description:{type:"string"},externalDocs:"ExternalDocs"},required:["name"]},ExternalDocs:{properties:{description:{type:"string"},url:{type:"string"}},required:["url"]},Server:s,ServerVariable:{properties:{enum:{type:"array",items:{type:"string"}},default:{type:"string"},description:null},required:["default"]},SecurityRequirement:{properties:{},additionalProperties:{type:"array",items:{type:"string"}}},Info:{properties:{title:{type:"string"},version:{type:"string"},description:{type:"string"},termsOfService:{type:"string"},contact:"Contact",license:"License"},required:["title","version"]},Contact:{properties:{name:{type:"string"},url:{type:"string"},email:{type:"string"}}},License:{properties:{name:{type:"string"},url:{type:"string"}},required:["name"]},PathMap:{properties:{},additionalProperties:(e,t)=>t.startsWith("/")?"PathItem":void 0},PathItem:l,Parameter:c,Operation:u,Callback:{properties:{},additionalProperties:"PathItem"},RequestBody:{properties:{description:{type:"string"},required:{type:"boolean"},content:"MediaTypeMap"},required:["content"]},MediaTypeMap:{properties:{},additionalProperties:"MediaType"},MediaType:p,Example:{properties:{value:{isExample:!0},summary:{type:"string"},description:{type:"string"},externalValue:{type:"string"}}},Encoding:d,Header:f,ResponsesMap:h,Response:m,Link:{properties:{operationRef:{type:"string"},operationId:{type:"string"},parameters:null,requestBody:null,description:{type:"string"},server:"Server"}},Schema:g,Xml:{properties:{name:{type:"string"},namespace:{type:"string"},prefix:{type:"string"},attribute:{type:"boolean"},wrapped:{type:"boolean"}}},SchemaProperties:{properties:{},additionalProperties:"Schema"},DiscriminatorMapping:y,Discriminator:{properties:{propertyName:{type:"string"},mapping:"DiscriminatorMapping"},required:["propertyName"]},Components:{properties:{parameters:"NamedParameters",schemas:"NamedSchemas",responses:"NamedResponses",examples:"NamedExamples",requestBodies:"NamedRequestBodies",headers:"NamedHeaders",securitySchemes:"NamedSecuritySchemes",links:"NamedLinks",callbacks:"NamedCallbacks"}},NamedSchemas:r.mapOf("Schema"),NamedResponses:r.mapOf("Response"),NamedParameters:r.mapOf("Parameter"),NamedExamples:r.mapOf("Example"),NamedRequestBodies:r.mapOf("RequestBody"),NamedHeaders:r.mapOf("Header"),NamedSecuritySchemes:r.mapOf("SecurityScheme"),NamedLinks:r.mapOf("Link"),NamedCallbacks:r.mapOf("PathItem"),ImplicitFlow:{properties:{refreshUrl:{type:"string"},scopes:{type:"object",additionalProperties:{type:"string"}},authorizationUrl:{type:"string"}},required:["authorizationUrl","scopes"]},PasswordFlow:{properties:{refreshUrl:{type:"string"},scopes:{type:"object",additionalProperties:{type:"string"}},tokenUrl:{type:"string"}},required:["tokenUrl","scopes"]},ClientCredentials:{properties:{refreshUrl:{type:"string"},scopes:{type:"object",additionalProperties:{type:"string"}},tokenUrl:{type:"string"}},required:["tokenUrl","scopes"]},AuthorizationCode:{properties:{refreshUrl:{type:"string"},authorizationUrl:{type:"string"},scopes:{type:"object",additionalProperties:{type:"string"}},tokenUrl:{type:"string"}},required:["authorizationUrl","tokenUrl","scopes"]},SecuritySchemeFlows:{properties:{implicit:"ImplicitFlow",password:"PasswordFlow",clientCredentials:"ClientCredentials",authorizationCode:"AuthorizationCode"}},SecurityScheme:b,XCodeSample:{properties:{lang:{type:"string"},label:{type:"string"},source:{type:"string"}}},WebhooksMap:{properties:{},additionalProperties:()=>"PathItem"}}},2608:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Oas3_1Types=void 0;const r=n(5220),i=n(5241),o={properties:{openapi:null,info:"Info",servers:r.listOf("Server"),security:r.listOf("SecurityRequirement"),tags:r.listOf("Tag"),externalDocs:"ExternalDocs",paths:"PathMap",webhooks:"WebhooksMap",components:"Components",jsonSchemaDialect:{type:"string"}},required:["openapi","info"],requiredOneOf:["paths","components","webhooks"]},a={properties:{tags:{type:"array",items:{type:"string"}},summary:{type:"string"},description:{type:"string"},externalDocs:"ExternalDocs",operationId:{type:"string"},parameters:r.listOf("Parameter"),security:r.listOf("SecurityRequirement"),servers:r.listOf("Server"),requestBody:"RequestBody",responses:"ResponsesMap",deprecated:{type:"boolean"},callbacks:r.mapOf("Callback"),"x-codeSamples":r.listOf("XCodeSample"),"x-code-samples":r.listOf("XCodeSample")}},s={properties:{$id:{type:"string"},id:{type:"string"},$schema:{type:"string"},definitions:"NamedSchemas",$defs:"NamedSchemas",$vocabulary:{type:"string"},externalDocs:"ExternalDocs",discriminator:"Discriminator",myArbitraryKeyword:{type:"boolean"},title:{type:"string"},multipleOf:{type:"number"},maximum:{type:"number"},minimum:{type:"number"},exclusiveMaximum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{type:"number"},minLength:{type:"number"},pattern:{type:"string"},maxItems:{type:"number"},minItems:{type:"number"},uniqueItems:{type:"boolean"},maxProperties:{type:"number"},minProperties:{type:"number"},required:{type:"array",items:{type:"string"}},enum:{type:"array"},type:e=>Array.isArray(e)?{type:"array",items:{enum:["object","array","string","number","integer","boolean","null"]}}:{enum:["object","array","string","number","integer","boolean","null"]},allOf:r.listOf("Schema"),anyOf:r.listOf("Schema"),oneOf:r.listOf("Schema"),not:"Schema",if:"Schema",then:"Schema",else:"Schema",dependentSchemas:r.listOf("Schema"),prefixItems:r.listOf("Schema"),contains:"Schema",patternProperties:{type:"object"},propertyNames:"Schema",unevaluatedItems:"Schema",unevaluatedProperties:e=>"boolean"==typeof e?{type:"boolean"}:"Schema",summary:{type:"string"},properties:"SchemaProperties",items:e=>Array.isArray(e)?r.listOf("Schema"):"boolean"==typeof e?{type:"boolean"}:"Schema",additionalProperties:e=>"boolean"==typeof e?{type:"boolean"}:"Schema",description:{type:"string"},format:{type:"string"},contentEncoding:{type:"string"},contentMediaType:{type:"string"},default:null,readOnly:{type:"boolean"},writeOnly:{type:"boolean"},xml:"Xml",examples:{type:"array"},example:{isExample:!0},deprecated:{type:"boolean"},const:null,$comment:{type:"string"}}},l={properties:{type:{enum:["apiKey","http","oauth2","openIdConnect","mutualTLS"]},description:{type:"string"},name:{type:"string"},in:{type:"string",enum:["query","header","cookie"]},scheme:{type:"string"},bearerFormat:{type:"string"},flows:"SecuritySchemeFlows",openIdConnectUrl:{type:"string"}},required(e){switch(null==e?void 0:e.type){case"apiKey":return["type","name","in"];case"http":return["type","scheme"];case"oauth2":return["type","flows"];case"openIdConnect":return["type","openIdConnectUrl"];default:return["type"]}},allowed(e){switch(null==e?void 0:e.type){case"apiKey":return["type","name","in","description"];case"http":return["type","scheme","bearerFormat","description"];case"oauth2":switch(null==e?void 0:e.flows){case"implicit":return["type","flows","authorizationUrl","refreshUrl","description","scopes"];case"password":case"clientCredentials":return["type","flows","tokenUrl","refreshUrl","description","scopes"];case"authorizationCode":default:return["type","flows","authorizationUrl","refreshUrl","tokenUrl","description","scopes"]}case"openIdConnect":return["type","openIdConnectUrl","description"];case"mutualTLS":default:return["type","description"]}},extensionsPrefix:"x-"};t.Oas3_1Types=Object.assign(Object.assign({},i.Oas3Types),{Info:{properties:{title:{type:"string"},version:{type:"string"},description:{type:"string"},termsOfService:{type:"string"},summary:{type:"string"},contact:"Contact",license:"License"},required:["title","version"]},DefinitionRoot:o,Schema:s,License:{properties:{name:{type:"string"},url:{type:"string"},identifier:{type:"string"}},required:["name"]},Components:{properties:{parameters:"NamedParameters",schemas:"NamedSchemas",responses:"NamedResponses",examples:"NamedExamples",requestBodies:"NamedRequestBodies",headers:"NamedHeaders",securitySchemes:"NamedSecuritySchemes",links:"NamedLinks",callbacks:"NamedCallbacks",pathItems:"NamedPathItems"}},NamedPathItems:r.mapOf("PathItem"),SecurityScheme:l,Operation:a})},771:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{l(r.next(e))}catch(e){o(e)}}function s(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.assignExisting=t.isNotString=t.isString=t.isNotEmptyObject=t.slash=t.isPathParameter=t.readFileAsStringSync=t.isSingular=t.validateMimeTypeOAS3=t.validateMimeType=t.splitCamelCaseIntoWords=t.omitObjectProps=t.pickObjectProps=t.match=t.readFileFromUrl=t.isEmptyArray=t.isEmptyObject=t.isPlainObject=t.notUndefined=t.loadYaml=t.popStack=t.pushStack=t.stringifyYaml=t.parseYaml=void 0;const i=n(3197),o=n(1171),a=n(7707),s=n(3450),l=n(5273);var c=n(5273);function u(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function p(e,t){return t.match(/^https?:\/\//)||(e=e.replace(/^https?:\/\//,"")),o(e,t)}function d(e){return"string"==typeof e}Object.defineProperty(t,"parseYaml",{enumerable:!0,get:function(){return c.parseYaml}}),Object.defineProperty(t,"stringifyYaml",{enumerable:!0,get:function(){return c.stringifyYaml}}),t.pushStack=function(e,t){return{prev:e,value:t}},t.popStack=function(e){var t;return null!==(t=null==e?void 0:e.prev)&&void 0!==t?t:null},t.loadYaml=function(e){return r(this,void 0,void 0,(function*(){const t=yield i.promises.readFile(e,"utf-8");return l.parseYaml(t)}))},t.notUndefined=function(e){return void 0!==e},t.isPlainObject=u,t.isEmptyObject=function(e){return u(e)&&0===Object.keys(e).length},t.isEmptyArray=function(e){return Array.isArray(e)&&0===e.length},t.readFileFromUrl=function(e,t){return r(this,void 0,void 0,(function*(){const n={};for(const r of t.headers)p(e,r.matches)&&(n[r.name]=void 0!==r.envVariable?{}[r.envVariable]||"":r.value);const r=yield(t.customFetch||a.default)(e,{headers:n});if(!r.ok)throw new Error(`Failed to load ${e}: ${r.status} ${r.statusText}`);return{body:yield r.text(),mimeType:r.headers.get("content-type")}}))},t.match=p,t.pickObjectProps=function(e,t){return Object.fromEntries(t.filter((t=>t in e)).map((t=>[t,e[t]])))},t.omitObjectProps=function(e,t){return Object.fromEntries(Object.entries(e).filter((([e])=>!t.includes(e))))},t.splitCamelCaseIntoWords=function(e){const t=e.split(/(?:[-._])|([A-Z][a-z]+)/).filter(Boolean).map((e=>e.toLocaleLowerCase())),n=e.split(/([A-Z]{2,})/).filter((e=>e&&e===e.toUpperCase())).map((e=>e.toLocaleLowerCase()));return new Set([...t,...n])},t.validateMimeType=function({type:e,value:t},{report:n,location:r},i){if(!i)throw new Error(`Parameter "allowedValues" is not provided for "${"consumes"===e?"request":"response"}-mime-type" rule`);if(t[e])for(const o of t[e])i.includes(o)||n({message:`Mime type "${o}" is not allowed`,location:r.child(t[e].indexOf(o)).key()})},t.validateMimeTypeOAS3=function({type:e,value:t},{report:n,location:r},i){if(!i)throw new Error(`Parameter "allowedValues" is not provided for "${"consumes"===e?"request":"response"}-mime-type" rule`);if(t.content)for(const e of Object.keys(t.content))i.includes(e)||n({message:`Mime type "${e}" is not allowed`,location:r.child("content").child(e).key()})},t.isSingular=function(e){return s.isSingular(e)},t.readFileAsStringSync=function(e){return i.readFileSync(e,"utf-8")},t.isPathParameter=function(e){return e.startsWith("{")&&e.endsWith("}")},t.slash=function(e){return/^\\\\\?\\/.test(e)?e:e.replace(/\\/g,"/")},t.isNotEmptyObject=function(e){return!!e&&Object.keys(e).length>0},t.isString=d,t.isNotString=function(e){return!d(e)},t.assignExisting=function(e,t){for(let n of Object.keys(t))e.hasOwnProperty(n)&&(e[n]=t[n])}},8065:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeVisitors=void 0,t.normalizeVisitors=function(e,t){const n={any:{enter:[],leave:[]}};for(const e of Object.keys(t))n[e]={enter:[],leave:[]};n.ref={enter:[],leave:[]};for(const{ruleId:t,severity:n,visitor:r}of e)i({ruleId:t,severity:n},r,null);for(const e of Object.keys(n))n[e].enter.sort(((e,t)=>t.depth-e.depth)),n[e].leave.sort(((e,t)=>e.depth-t.depth));return n;function r(e,t,i,o,a=[]){if(a.includes(t))return;a=[...a,t];const s=new Set;for(let n of Object.values(t.properties))n!==i?"object"==typeof n&&null!==n&&n.name&&s.add(n):l(e,a);t.additionalProperties&&"function"!=typeof t.additionalProperties&&(t.additionalProperties===i?l(e,a):void 0!==t.additionalProperties.name&&s.add(t.additionalProperties)),t.items&&(t.items===i?l(e,a):void 0!==t.items.name&&s.add(t.items));for(let t of Array.from(s.values()))r(e,t,i,o,a);function l(e,t){for(const r of t.slice(1))n[r.name]=n[r.name]||{enter:[],leave:[]},n[r.name].enter.push(Object.assign(Object.assign({},e),{visit:()=>{},depth:0,context:{isSkippedLevel:!0,seen:new Set,parent:o}}))}}function i(e,o,a,s=0){const l=Object.keys(t);if(0===s)l.push("any"),l.push("ref");else{if(o.any)throw new Error("any() is allowed only on top level");if(o.ref)throw new Error("ref() is allowed only on top level")}for(const c of l){const l=o[c],u=n[c];if(!l)continue;let p,d,f;const h="object"==typeof l;if("ref"===c&&h&&l.skip)throw new Error("ref() visitor does not support skip");"function"==typeof l?p=l:h&&(p=l.enter,d=l.leave,f=l.skip);const m={activatedOn:null,type:t[c],parent:a,isSkippedLevel:!1};if("object"==typeof l&&i(e,l,m,s+1),a&&r(e,a.type,t[c],a),p||h){if(p&&"function"!=typeof p)throw new Error("DEV: should be function");u.enter.push(Object.assign(Object.assign({},e),{visit:p||(()=>{}),skip:f,depth:s,context:m}))}if(d){if("function"!=typeof d)throw new Error("DEV: should be function");u.leave.push(Object.assign(Object.assign({},e),{visit:d,depth:s,context:m}))}}}}},9443:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.walkDocument=void 0;const r=n(7468),i=n(4182),o=n(771),a=n(5220);function s(e){var t,n;const r={};for(;e.parent;)(null===(t=e.parent.activatedOn)||void 0===t?void 0:t.value.location)&&(r[e.parent.type.name]=null===(n=e.parent.activatedOn)||void 0===n?void 0:n.value.location),e=e.parent;return r}t.walkDocument=function(e){const{document:t,rootType:n,normalizedVisitors:l,resolvedRefMap:c,ctx:u}=e,p={},d=new Set;!function e(t,n,f,h,m){var g,y,b,v,x,w,k,O,S,E,_;let A=f;const{node:R,location:C,error:P}=I(t),T=new Set;if(r.isRef(t)){const e=l.ref.enter;for(const{visit:r,ruleId:i,severity:o,context:a}of e)if(!d.has(t)){T.add(a);r(t,{report:N.bind(void 0,i,o),resolve:I,location:f,type:n,parent:h,key:m,parentLocations:{},oasVersion:u.oasVersion,getVisitorData:$.bind(void 0,i)},{node:R,location:C,error:P}),(null==C?void 0:C.source.absoluteRef)&&u.refTypes&&u.refTypes.set(null==C?void 0:C.source.absoluteRef,n)}}if(void 0!==R&&C&&"scalar"!==n.name){A=C;const i=null===(y=null===(g=p[n.name])||void 0===g?void 0:g.has)||void 0===y?void 0:y.call(g,R);let s=!1;const c=l.any.enter.concat((null===(b=l[n.name])||void 0===b?void 0:b.enter)||[]),u=[];for(const{context:e,visit:r,skip:a,ruleId:l,severity:p}of c)if(e.isSkippedLevel)!e.parent.activatedOn||e.parent.activatedOn.value.nextLevelTypeActivated||e.seen.has(t)||(e.seen.add(t),s=!0,u.push(e));else if(e.parent&&e.parent.activatedOn&&(null===(v=e.activatedOn)||void 0===v?void 0:v.value.withParentNode)!==e.parent.activatedOn.value.node&&(null===(x=e.parent.activatedOn.value.nextLevelTypeActivated)||void 0===x?void 0:x.value)!==n||!e.parent&&!i){u.push(e);const t={node:R,location:C,nextLevelTypeActivated:null,withParentNode:null===(k=null===(w=e.parent)||void 0===w?void 0:w.activatedOn)||void 0===k?void 0:k.value.node,skipped:null!==(E=(null===(S=null===(O=e.parent)||void 0===O?void 0:O.activatedOn)||void 0===S?void 0:S.value.skipped)||(null==a?void 0:a(R,m)))&&void 0!==E&&E};e.activatedOn=o.pushStack(e.activatedOn,t);let i=e.parent;for(;i;)i.activatedOn.value.nextLevelTypeActivated=o.pushStack(i.activatedOn.value.nextLevelTypeActivated,n),i=i.parent;if(!t.skipped){s=!0,T.add(e);const{ignoreNextVisitorsOnNode:t}=j(r,R,e,l,p);if(t)break}}if(s||!i)if(p[n.name]=p[n.name]||new Set,p[n.name].add(R),Array.isArray(R)){const t=n.items;if(void 0!==t)for(let n=0;n<R.length;n++)e(R[n],t,C.child([n]),R,n)}else if("object"==typeof R&&null!==R){const i=Object.keys(n.properties);n.additionalProperties&&i.push(...Object.keys(R).filter((e=>!i.includes(e)))),r.isRef(t)&&i.push(...Object.keys(t).filter((e=>"$ref"!==e&&!i.includes(e))));for(const o of i){let i=R[o],s=C;void 0===i&&(i=t[o],s=f);let l=n.properties[o];void 0===l&&(l=n.additionalProperties),"function"==typeof l&&(l=l(i,o)),!a.isNamedType(l)&&(null==l?void 0:l.directResolveAs)&&(l=l.directResolveAs,i={$ref:i}),l&&void 0===l.name&&!1!==l.resolvable&&(l={name:"scalar",properties:{}}),a.isNamedType(l)&&("scalar"!==l.name||r.isRef(i))&&e(i,l,s.child([o]),R,o)}}const d=l.any.leave,h=((null===(_=l[n.name])||void 0===_?void 0:_.leave)||[]).concat(d);for(const e of u.reverse())if(e.isSkippedLevel)e.seen.delete(R);else if(e.activatedOn=o.popStack(e.activatedOn),e.parent){let t=e.parent;for(;t;)t.activatedOn.value.nextLevelTypeActivated=o.popStack(t.activatedOn.value.nextLevelTypeActivated),t=t.parent}for(const{context:e,visit:t,ruleId:n,severity:r}of h)!e.isSkippedLevel&&T.has(e)&&j(t,R,e,n,r)}if(A=f,r.isRef(t)){const e=l.ref.leave;for(const{visit:r,ruleId:i,severity:o,context:a}of e)if(T.has(a)){r(t,{report:N.bind(void 0,i,o),resolve:I,location:f,type:n,parent:h,key:m,parentLocations:{},oasVersion:u.oasVersion,getVisitorData:$.bind(void 0,i)},{node:R,location:C,error:P})}}function j(e,t,r,i,o){const a=N.bind(void 0,i,o);let l=!1;return e(t,{report:a,resolve:I,location:A,type:n,parent:h,key:m,parentLocations:s(r),oasVersion:u.oasVersion,ignoreNextVisitorsOnNode:()=>{l=!0},getVisitorData:$.bind(void 0,i)},function(e){var t;const n={};for(;e.parent;)n[e.parent.type.name]=null===(t=e.parent.activatedOn)||void 0===t?void 0:t.value.node,e=e.parent;return n}(r),r),{ignoreNextVisitorsOnNode:l}}function I(e,t=A.source.absoluteRef){if(!r.isRef(e))return{location:f,node:e};const n=i.makeRefId(t,e.$ref),o=c.get(n);if(!o)return{location:void 0,node:void 0};const{resolved:a,node:s,document:l,nodePointer:u,error:p}=o;return{location:a?new r.Location(l.source,u):p instanceof i.YamlParseError?new r.Location(p.source,""):void 0,node:s,error:p}}function N(e,t,n){const r=n.location?Array.isArray(n.location)?n.location:[n.location]:[Object.assign(Object.assign({},A),{reportOnKey:!1})];u.problems.push(Object.assign(Object.assign({ruleId:n.ruleId||e,severity:n.forceSeverity||t},n),{suggest:n.suggest||[],location:r.map((e=>Object.assign(Object.assign(Object.assign({},A),{reportOnKey:!1}),e)))}))}function $(e){return u.visitorsData[e]=u.visitorsData[e]||{},u.visitorsData[e]}}(t.parsed,n,new r.Location(t.source,"#/"),void 0,"")}},337:function(e){"use strict";e.exports=JSON.parse('{"i8":"1.0.0-beta.95"}')},5623:function(e){"use strict";function t(e,t,i){e instanceof RegExp&&(e=n(e,i)),t instanceof RegExp&&(t=n(t,i));var o=r(e,t,i);return o&&{start:o[0],end:o[1],pre:i.slice(0,o[0]),body:i.slice(o[0]+e.length,o[1]),post:i.slice(o[1]+t.length)}}function n(e,t){var n=t.match(e);return n?n[0]:null}function r(e,t,n){var r,i,o,a,s,l=n.indexOf(e),c=n.indexOf(t,l+1),u=l;if(l>=0&&c>0){if(e===t)return[l,c];for(r=[],o=n.length;u>=0&&!s;)u==l?(r.push(u),l=n.indexOf(e,u+1)):1==r.length?s=[r.pop(),c]:((i=r.pop())<o&&(o=i,a=c),c=n.indexOf(t,u+1)),u=l<c&&l>=0?l:c;r.length&&(s=[o,a])}return s}e.exports=t,t.range=r},3644:function(e,t,n){var r=n(1048),i=n(5623);e.exports=function(e){return e?("{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2)),y(function(e){return e.split("\\\\").join(o).split("\\{").join(a).split("\\}").join(s).split("\\,").join(l).split("\\.").join(c)}(e),!0).map(p)):[]};var o="\0SLASH"+Math.random()+"\0",a="\0OPEN"+Math.random()+"\0",s="\0CLOSE"+Math.random()+"\0",l="\0COMMA"+Math.random()+"\0",c="\0PERIOD"+Math.random()+"\0";function u(e){return parseInt(e,10)==e?parseInt(e,10):e.charCodeAt(0)}function p(e){return e.split(o).join("\\").split(a).join("{").split(s).join("}").split(l).join(",").split(c).join(".")}function d(e){if(!e)return[""];var t=[],n=i("{","}",e);if(!n)return e.split(",");var r=n.pre,o=n.body,a=n.post,s=r.split(",");s[s.length-1]+="{"+o+"}";var l=d(a);return a.length&&(s[s.length-1]+=l.shift(),s.push.apply(s,l)),t.push.apply(t,s),t}function f(e){return"{"+e+"}"}function h(e){return/^-?0\d/.test(e)}function m(e,t){return e<=t}function g(e,t){return e>=t}function y(e,t){var n=[],o=i("{","}",e);if(!o||/\$$/.test(o.pre))return[e];var a,l=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(o.body),c=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(o.body),p=l||c,b=o.body.indexOf(",")>=0;if(!p&&!b)return o.post.match(/,.*\}/)?y(e=o.pre+"{"+o.body+s+o.post):[e];if(p)a=o.body.split(/\.\./);else if(1===(a=d(o.body)).length&&1===(a=y(a[0],!1).map(f)).length)return(w=o.post.length?y(o.post,!1):[""]).map((function(e){return o.pre+a[0]+e}));var v,x=o.pre,w=o.post.length?y(o.post,!1):[""];if(p){var k=u(a[0]),O=u(a[1]),S=Math.max(a[0].length,a[1].length),E=3==a.length?Math.abs(u(a[2])):1,_=m;O<k&&(E*=-1,_=g);var A=a.some(h);v=[];for(var R=k;_(R,O);R+=E){var C;if(c)"\\"===(C=String.fromCharCode(R))&&(C="");else if(C=String(R),A){var P=S-C.length;if(P>0){var T=new Array(P+1).join("0");C=R<0?"-"+T+C.slice(1):T+C}}v.push(C)}}else v=r(a,(function(e){return y(e,!1)}));for(var j=0;j<v.length;j++)for(var I=0;I<w.length;I++){var N=x+v[j]+w[I];(!t||p||N)&&n.push(N)}return n}},4480:function(e,t,n){"use strict";var r=n.g.process&&process.nextTick||n.g.setImmediate||function(e){setTimeout(e,0)};e.exports=function(e,t){return e?void t.then((function(t){r((function(){e(null,t)}))}),(function(t){r((function(){e(t)}))})):t}},4184:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function i(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var o=typeof n;if("string"===o||"number"===o)e.push(n);else if(Array.isArray(n)){if(n.length){var a=i.apply(null,n);a&&e.push(a)}}else if("object"===o)if(n.toString===Object.prototype.toString)for(var s in n)r.call(n,s)&&n[s]&&e.push(s);else e.push(n.toString())}}return e.join(" ")}e.exports?(i.default=i,e.exports=i):void 0===(n=function(){return i}.apply(t,[]))||(e.exports=n)}()},7121:function(e,t){let n=!("NO_COLOR"in{})&&("FORCE_COLOR"in{}||!1);const r=(e,t,r,i)=>o=>n?e+(~(o+="").indexOf(t,4)?o.replace(r,i):o)+t:o,i=(e,t)=>r(`[${e}m`,`[${t}m`,new RegExp(`\\x1b\\[${t}m`,"g"),`[${e}m`);t.options=Object.defineProperty({},"enabled",{get:()=>n,set:e=>n=e}),t.reset=i(0,0),t.bold=r("[1m","[22m",/\x1b\[22m/g,"[22m[1m"),t.dim=r("[2m","[22m",/\x1b\[22m/g,"[22m[2m"),t.italic=i(3,23),t.underline=i(4,24),t.inverse=i(7,27),t.hidden=i(8,28),t.strikethrough=i(9,29),t.black=i(30,39),t.red=i(31,39),t.green=i(32,39),t.yellow=i(33,39),t.blue=i(34,39),t.magenta=i(35,39),t.cyan=i(36,39),t.white=i(37,39),t.gray=i(90,39),t.bgBlack=i(40,49),t.bgRed=i(41,49),t.bgGreen=i(42,49),t.bgYellow=i(43,49),t.bgBlue=i(44,49),t.bgMagenta=i(45,49),t.bgCyan=i(46,49),t.bgWhite=i(47,49),t.blackBright=i(90,39),t.redBright=i(91,39),t.greenBright=i(92,39),t.yellowBright=i(93,39),t.blueBright=i(94,39),t.magentaBright=i(95,39),t.cyanBright=i(96,39),t.whiteBright=i(97,39),t.bgBlackBright=i(100,49),t.bgRedBright=i(101,49),t.bgGreenBright=i(102,49),t.bgYellowBright=i(103,49),t.bgBlueBright=i(104,49),t.bgMagentaBright=i(105,49),t.bgCyanBright=i(106,49),t.bgWhiteBright=i(107,49)},1048:function(e){e.exports=function(e,n){for(var r=[],i=0;i<e.length;i++){var o=n(e[i],i);t(o)?r.push.apply(r,o):r.push(o)}return r};var t=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},9266:function(e,t,n){n(2222),n(1539),n(2526),n(2443),n(1817),n(2401),n(8722),n(2165),n(9007),n(6066),n(3510),n(1840),n(6982),n(2159),n(6649),n(9341),n(543),n(3706),n(408),n(1299);var r=n(857);e.exports=r.Symbol},3099:function(e){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},9670:function(e,t,n){var r=n(111);e.exports=function(e){if(!r(e))throw TypeError(String(e)+" is not an object");return e}},1318:function(e,t,n){var r=n(5656),i=n(7466),o=n(1400),a=function(e){return function(t,n,a){var s,l=r(t),c=i(l.length),u=o(a,c);if(e&&n!=n){for(;c>u;)if((s=l[u++])!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},2092:function(e,t,n){var r=n(9974),i=n(8361),o=n(7908),a=n(7466),s=n(5417),l=[].push,c=function(e){var t=1==e,n=2==e,c=3==e,u=4==e,p=6==e,d=7==e,f=5==e||p;return function(h,m,g,y){for(var b,v,x=o(h),w=i(x),k=r(m,g,3),O=a(w.length),S=0,E=y||s,_=t?E(h,O):n||d?E(h,0):void 0;O>S;S++)if((f||S in w)&&(v=k(b=w[S],S,x),e))if(t)_[S]=v;else if(v)switch(e){case 3:return!0;case 5:return b;case 6:return S;case 2:l.call(_,b)}else switch(e){case 4:return!1;case 7:l.call(_,b)}return p?-1:c||u?u:_}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterOut:c(7)}},1194:function(e,t,n){var r=n(7293),i=n(5112),o=n(7392),a=i("species");e.exports=function(e){return o>=51||!r((function(){var t=[];return(t.constructor={})[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},5417:function(e,t,n){var r=n(111),i=n(3157),o=n(5112)("species");e.exports=function(e,t){var n;return i(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!i(n.prototype)?r(n)&&null===(n=n[o])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===t?0:t)}},4326:function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},648:function(e,t,n){var r=n(1694),i=n(4326),o=n(5112)("toStringTag"),a="Arguments"==i(function(){return arguments}());e.exports=r?i:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?n:a?i(t):"Object"==(r=i(t))&&"function"==typeof t.callee?"Arguments":r}},9920:function(e,t,n){var r=n(6656),i=n(3887),o=n(1236),a=n(3070);e.exports=function(e,t){for(var n=i(t),s=a.f,l=o.f,c=0;c<n.length;c++){var u=n[c];r(e,u)||s(e,u,l(t,u))}}},8880:function(e,t,n){var r=n(9781),i=n(3070),o=n(9114);e.exports=r?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},9114:function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},6135:function(e,t,n){"use strict";var r=n(7593),i=n(3070),o=n(9114);e.exports=function(e,t,n){var a=r(t);a in e?i.f(e,a,o(0,n)):e[a]=n}},7235:function(e,t,n){var r=n(857),i=n(6656),o=n(6061),a=n(3070).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});i(t,e)||a(t,e,{value:o.f(e)})}},9781:function(e,t,n){var r=n(7293);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},317:function(e,t,n){var r=n(7854),i=n(111),o=r.document,a=i(o)&&i(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},8113:function(e,t,n){var r=n(5005);e.exports=r("navigator","userAgent")||""},7392:function(e,t,n){var r,i,o=n(7854),a=n(8113),s=o.process,l=s&&s.versions,c=l&&l.v8;c?i=(r=c.split("."))[0]<4?1:r[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(i=r[1]),e.exports=i&&+i},748:function(e){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},2109:function(e,t,n){var r=n(7854),i=n(1236).f,o=n(8880),a=n(1320),s=n(3505),l=n(9920),c=n(4705);e.exports=function(e,t){var n,u,p,d,f,h=e.target,m=e.global,g=e.stat;if(n=m?r:g?r[h]||s(h,{}):(r[h]||{}).prototype)for(u in t){if(d=t[u],p=e.noTargetGet?(f=i(n,u))&&f.value:n[u],!c(m?u:h+(g?".":"#")+u,e.forced)&&void 0!==p){if(typeof d==typeof p)continue;l(d,p)}(e.sham||p&&p.sham)&&o(d,"sham",!0),a(n,u,d,e)}}},7293:function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},9974:function(e,t,n){var r=n(3099);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},5005:function(e,t,n){var r=n(857),i=n(7854),o=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?o(r[e])||o(i[e]):r[e]&&r[e][t]||i[e]&&i[e][t]}},7854:function(e,t,n){var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},6656:function(e,t,n){var r=n(7908),i={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,t){return i.call(r(e),t)}},3501:function(e){e.exports={}},490:function(e,t,n){var r=n(5005);e.exports=r("document","documentElement")},4664:function(e,t,n){var r=n(9781),i=n(7293),o=n(317);e.exports=!r&&!i((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},8361:function(e,t,n){var r=n(7293),i=n(4326),o="".split;e.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?o.call(e,""):Object(e)}:Object},2788:function(e,t,n){var r=n(5465),i=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(e){return i.call(e)}),e.exports=r.inspectSource},9909:function(e,t,n){var r,i,o,a=n(8536),s=n(7854),l=n(111),c=n(8880),u=n(6656),p=n(5465),d=n(6200),f=n(3501),h="Object already initialized",m=s.WeakMap;if(a||p.state){var g=p.state||(p.state=new m),y=g.get,b=g.has,v=g.set;r=function(e,t){if(b.call(g,e))throw new TypeError(h);return t.facade=e,v.call(g,e,t),t},i=function(e){return y.call(g,e)||{}},o=function(e){return b.call(g,e)}}else{var x=d("state");f[x]=!0,r=function(e,t){if(u(e,x))throw new TypeError(h);return t.facade=e,c(e,x,t),t},i=function(e){return u(e,x)?e[x]:{}},o=function(e){return u(e,x)}}e.exports={set:r,get:i,has:o,enforce:function(e){return o(e)?i(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=i(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},3157:function(e,t,n){var r=n(4326);e.exports=Array.isArray||function(e){return"Array"==r(e)}},4705:function(e,t,n){var r=n(7293),i=/#|\.prototype\./,o=function(e,t){var n=s[a(e)];return n==c||n!=l&&("function"==typeof t?r(t):!!t)},a=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},s=o.data={},l=o.NATIVE="N",c=o.POLYFILL="P";e.exports=o},111:function(e){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},1913:function(e){e.exports=!1},133:function(e,t,n){var r=n(7392),i=n(7293);e.exports=!!Object.getOwnPropertySymbols&&!i((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},8536:function(e,t,n){var r=n(7854),i=n(2788),o=r.WeakMap;e.exports="function"==typeof o&&/native code/.test(i(o))},30:function(e,t,n){var r,i=n(9670),o=n(6048),a=n(748),s=n(3501),l=n(490),c=n(317),u=n(6200)("IE_PROTO"),p=function(){},d=function(e){return"<script>"+e+"<\/script>"},f=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(e){}var e,t;f=r?function(e){e.write(d("")),e.close();var t=e.parentWindow.Object;return e=null,t}(r):((t=c("iframe")).style.display="none",l.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(d("document.F=Object")),e.close(),e.F);for(var n=a.length;n--;)delete f.prototype[a[n]];return f()};s[u]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(p.prototype=i(e),n=new p,p.prototype=null,n[u]=e):n=f(),void 0===t?n:o(n,t)}},6048:function(e,t,n){var r=n(9781),i=n(3070),o=n(9670),a=n(1956);e.exports=r?Object.defineProperties:function(e,t){o(e);for(var n,r=a(t),s=r.length,l=0;s>l;)i.f(e,n=r[l++],t[n]);return e}},3070:function(e,t,n){var r=n(9781),i=n(4664),o=n(9670),a=n(7593),s=Object.defineProperty;t.f=r?s:function(e,t,n){if(o(e),t=a(t,!0),o(n),i)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},1236:function(e,t,n){var r=n(9781),i=n(5296),o=n(9114),a=n(5656),s=n(7593),l=n(6656),c=n(4664),u=Object.getOwnPropertyDescriptor;t.f=r?u:function(e,t){if(e=a(e),t=s(t,!0),c)try{return u(e,t)}catch(e){}if(l(e,t))return o(!i.f.call(e,t),e[t])}},1156:function(e,t,n){var r=n(5656),i=n(8006).f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?function(e){try{return i(e)}catch(e){return a.slice()}}(e):i(r(e))}},8006:function(e,t,n){var r=n(6324),i=n(748).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},5181:function(e,t){t.f=Object.getOwnPropertySymbols},6324:function(e,t,n){var r=n(6656),i=n(5656),o=n(1318).indexOf,a=n(3501);e.exports=function(e,t){var n,s=i(e),l=0,c=[];for(n in s)!r(a,n)&&r(s,n)&&c.push(n);for(;t.length>l;)r(s,n=t[l++])&&(~o(c,n)||c.push(n));return c}},1956:function(e,t,n){var r=n(6324),i=n(748);e.exports=Object.keys||function(e){return r(e,i)}},5296:function(e,t){"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!n.call({1:2},1);t.f=i?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},288:function(e,t,n){"use strict";var r=n(1694),i=n(648);e.exports=r?{}.toString:function(){return"[object "+i(this)+"]"}},3887:function(e,t,n){var r=n(5005),i=n(8006),o=n(5181),a=n(9670);e.exports=r("Reflect","ownKeys")||function(e){var t=i.f(a(e)),n=o.f;return n?t.concat(n(e)):t}},857:function(e,t,n){var r=n(7854);e.exports=r},1320:function(e,t,n){var r=n(7854),i=n(8880),o=n(6656),a=n(3505),s=n(2788),l=n(9909),c=l.get,u=l.enforce,p=String(String).split("String");(e.exports=function(e,t,n,s){var l,c=!!s&&!!s.unsafe,d=!!s&&!!s.enumerable,f=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof t||o(n,"name")||i(n,"name",t),(l=u(n)).source||(l.source=p.join("string"==typeof t?t:""))),e!==r?(c?!f&&e[t]&&(d=!0):delete e[t],d?e[t]=n:i(e,t,n)):d?e[t]=n:a(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&c(this).source||s(this)}))},4488:function(e){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},3505:function(e,t,n){var r=n(7854),i=n(8880);e.exports=function(e,t){try{i(r,e,t)}catch(n){r[e]=t}return t}},8003:function(e,t,n){var r=n(3070).f,i=n(6656),o=n(5112)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},6200:function(e,t,n){var r=n(2309),i=n(9711),o=r("keys");e.exports=function(e){return o[e]||(o[e]=i(e))}},5465:function(e,t,n){var r=n(7854),i=n(3505),o="__core-js_shared__",a=r[o]||i(o,{});e.exports=a},2309:function(e,t,n){var r=n(1913),i=n(5465);(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.14.0",mode:r?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},1400:function(e,t,n){var r=n(9958),i=Math.max,o=Math.min;e.exports=function(e,t){var n=r(e);return n<0?i(n+t,0):o(n,t)}},5656:function(e,t,n){var r=n(8361),i=n(4488);e.exports=function(e){return r(i(e))}},9958:function(e){var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},7466:function(e,t,n){var r=n(9958),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},7908:function(e,t,n){var r=n(4488);e.exports=function(e){return Object(r(e))}},7593:function(e,t,n){var r=n(111);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},1694:function(e,t,n){var r={};r[n(5112)("toStringTag")]="z",e.exports="[object z]"===String(r)},9711:function(e){var t=0,n=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++t+n).toString(36)}},3307:function(e,t,n){var r=n(133);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},6061:function(e,t,n){var r=n(5112);t.f=r},5112:function(e,t,n){var r=n(7854),i=n(2309),o=n(6656),a=n(9711),s=n(133),l=n(3307),c=i("wks"),u=r.Symbol,p=l?u:u&&u.withoutSetter||a;e.exports=function(e){return o(c,e)&&(s||"string"==typeof c[e])||(s&&o(u,e)?c[e]=u[e]:c[e]=p("Symbol."+e)),c[e]}},2222:function(e,t,n){"use strict";var r=n(2109),i=n(7293),o=n(3157),a=n(111),s=n(7908),l=n(7466),c=n(6135),u=n(5417),p=n(1194),d=n(5112),f=n(7392),h=d("isConcatSpreadable"),m=9007199254740991,g="Maximum allowed index exceeded",y=f>=51||!i((function(){var e=[];return e[h]=!1,e.concat()[0]!==e})),b=p("concat"),v=function(e){if(!a(e))return!1;var t=e[h];return void 0!==t?!!t:o(e)};r({target:"Array",proto:!0,forced:!y||!b},{concat:function(e){var t,n,r,i,o,a=s(this),p=u(a,0),d=0;for(t=-1,r=arguments.length;t<r;t++)if(v(o=-1===t?a:arguments[t])){if(d+(i=l(o.length))>m)throw TypeError(g);for(n=0;n<i;n++,d++)n in o&&c(p,d,o[n])}else{if(d>=m)throw TypeError(g);c(p,d++,o)}return p.length=d,p}})},3706:function(e,t,n){var r=n(7854);n(8003)(r.JSON,"JSON",!0)},408:function(e,t,n){n(8003)(Math,"Math",!0)},1539:function(e,t,n){var r=n(1694),i=n(1320),o=n(288);r||i(Object.prototype,"toString",o,{unsafe:!0})},1299:function(e,t,n){var r=n(2109),i=n(7854),o=n(8003);r({global:!0},{Reflect:{}}),o(i.Reflect,"Reflect",!0)},2443:function(e,t,n){n(7235)("asyncIterator")},1817:function(e,t,n){"use strict";var r=n(2109),i=n(9781),o=n(7854),a=n(6656),s=n(111),l=n(3070).f,c=n(9920),u=o.Symbol;if(i&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var p={},d=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),t=this instanceof d?new u(e):void 0===e?u():u(e);return""===e&&(p[t]=!0),t};c(d,u);var f=d.prototype=u.prototype;f.constructor=d;var h=f.toString,m="Symbol(test)"==String(u("test")),g=/^Symbol\((.*)\)[^)]+$/;l(f,"description",{configurable:!0,get:function(){var e=s(this)?this.valueOf():this,t=h.call(e);if(a(p,e))return"";var n=m?t.slice(7,-1):t.replace(g,"$1");return""===n?void 0:n}}),r({global:!0,forced:!0},{Symbol:d})}},2401:function(e,t,n){n(7235)("hasInstance")},8722:function(e,t,n){n(7235)("isConcatSpreadable")},2165:function(e,t,n){n(7235)("iterator")},2526:function(e,t,n){"use strict";var r=n(2109),i=n(7854),o=n(5005),a=n(1913),s=n(9781),l=n(133),c=n(3307),u=n(7293),p=n(6656),d=n(3157),f=n(111),h=n(9670),m=n(7908),g=n(5656),y=n(7593),b=n(9114),v=n(30),x=n(1956),w=n(8006),k=n(1156),O=n(5181),S=n(1236),E=n(3070),_=n(5296),A=n(8880),R=n(1320),C=n(2309),P=n(6200),T=n(3501),j=n(9711),I=n(5112),N=n(6061),$=n(7235),L=n(8003),D=n(9909),M=n(2092).forEach,F=P("hidden"),z="Symbol",U=I("toPrimitive"),B=D.set,q=D.getterFor(z),V=Object.prototype,W=i.Symbol,H=o("JSON","stringify"),Y=S.f,Q=E.f,G=k.f,X=_.f,K=C("symbols"),Z=C("op-symbols"),J=C("string-to-symbol-registry"),ee=C("symbol-to-string-registry"),te=C("wks"),ne=i.QObject,re=!ne||!ne.prototype||!ne.prototype.findChild,ie=s&&u((function(){return 7!=v(Q({},"a",{get:function(){return Q(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=Y(V,t);r&&delete V[t],Q(e,t,n),r&&e!==V&&Q(V,t,r)}:Q,oe=function(e,t){var n=K[e]=v(W.prototype);return B(n,{type:z,tag:e,description:t}),s||(n.description=t),n},ae=c?function(e){return"symbol"==typeof e}:function(e){return Object(e)instanceof W},se=function(e,t,n){e===V&&se(Z,t,n),h(e);var r=y(t,!0);return h(n),p(K,r)?(n.enumerable?(p(e,F)&&e[F][r]&&(e[F][r]=!1),n=v(n,{enumerable:b(0,!1)})):(p(e,F)||Q(e,F,b(1,{})),e[F][r]=!0),ie(e,r,n)):Q(e,r,n)},le=function(e,t){h(e);var n=g(t),r=x(n).concat(de(n));return M(r,(function(t){s&&!ce.call(n,t)||se(e,t,n[t])})),e},ce=function(e){var t=y(e,!0),n=X.call(this,t);return!(this===V&&p(K,t)&&!p(Z,t))&&(!(n||!p(this,t)||!p(K,t)||p(this,F)&&this[F][t])||n)},ue=function(e,t){var n=g(e),r=y(t,!0);if(n!==V||!p(K,r)||p(Z,r)){var i=Y(n,r);return!i||!p(K,r)||p(n,F)&&n[F][r]||(i.enumerable=!0),i}},pe=function(e){var t=G(g(e)),n=[];return M(t,(function(e){p(K,e)||p(T,e)||n.push(e)})),n},de=function(e){var t=e===V,n=G(t?Z:g(e)),r=[];return M(n,(function(e){!p(K,e)||t&&!p(V,e)||r.push(K[e])})),r};l||(R((W=function(){if(this instanceof W)throw TypeError("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,t=j(e),n=function(e){this===V&&n.call(Z,e),p(this,F)&&p(this[F],t)&&(this[F][t]=!1),ie(this,t,b(1,e))};return s&&re&&ie(V,t,{configurable:!0,set:n}),oe(t,e)}).prototype,"toString",(function(){return q(this).tag})),R(W,"withoutSetter",(function(e){return oe(j(e),e)})),_.f=ce,E.f=se,S.f=ue,w.f=k.f=pe,O.f=de,N.f=function(e){return oe(I(e),e)},s&&(Q(W.prototype,"description",{configurable:!0,get:function(){return q(this).description}}),a||R(V,"propertyIsEnumerable",ce,{unsafe:!0}))),r({global:!0,wrap:!0,forced:!l,sham:!l},{Symbol:W}),M(x(te),(function(e){$(e)})),r({target:z,stat:!0,forced:!l},{for:function(e){var t=String(e);if(p(J,t))return J[t];var n=W(t);return J[t]=n,ee[n]=t,n},keyFor:function(e){if(!ae(e))throw TypeError(e+" is not a symbol");if(p(ee,e))return ee[e]},useSetter:function(){re=!0},useSimple:function(){re=!1}}),r({target:"Object",stat:!0,forced:!l,sham:!s},{create:function(e,t){return void 0===t?v(e):le(v(e),t)},defineProperty:se,defineProperties:le,getOwnPropertyDescriptor:ue}),r({target:"Object",stat:!0,forced:!l},{getOwnPropertyNames:pe,getOwnPropertySymbols:de}),r({target:"Object",stat:!0,forced:u((function(){O.f(1)}))},{getOwnPropertySymbols:function(e){return O.f(m(e))}}),H&&r({target:"JSON",stat:!0,forced:!l||u((function(){var e=W();return"[null]"!=H([e])||"{}"!=H({a:e})||"{}"!=H(Object(e))}))},{stringify:function(e,t,n){for(var r,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(r=t,(f(t)||void 0!==e)&&!ae(e))return d(t)||(t=function(e,t){if("function"==typeof r&&(t=r.call(this,e,t)),!ae(t))return t}),i[1]=t,H.apply(null,i)}}),W.prototype[U]||A(W.prototype,U,W.prototype.valueOf),L(W,z),T[F]=!0},6066:function(e,t,n){n(7235)("matchAll")},9007:function(e,t,n){n(7235)("match")},3510:function(e,t,n){n(7235)("replace")},1840:function(e,t,n){n(7235)("search")},6982:function(e,t,n){n(7235)("species")},2159:function(e,t,n){n(7235)("split")},6649:function(e,t,n){n(7235)("toPrimitive")},9341:function(e,t,n){n(7235)("toStringTag")},543:function(e,t,n){n(7235)("unscopables")},2295:function(e,t,n){"use strict";var r=n(4015),i=n.n(r),o=n(3645),a=n.n(o)()(i());a.push([e.id,".ps{overflow:hidden!important;overflow-anchor:none;-ms-overflow-style:none;touch-action:auto;-ms-touch-action:auto}.ps__rail-x{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;height:15px;bottom:0;position:absolute}.ps__rail-y{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;width:15px;right:0;position:absolute}.ps--active-x>.ps__rail-x,.ps--active-y>.ps__rail-y{display:block;background-color:transparent}.ps:hover>.ps__rail-x,.ps:hover>.ps__rail-y,.ps--focus>.ps__rail-x,.ps--focus>.ps__rail-y,.ps--scrolling-x>.ps__rail-x,.ps--scrolling-y>.ps__rail-y{opacity:.6}.ps .ps__rail-x:hover,.ps .ps__rail-y:hover,.ps .ps__rail-x:focus,.ps .ps__rail-y:focus,.ps .ps__rail-x.ps--clicking,.ps .ps__rail-y.ps--clicking{background-color:#eee;opacity:.9}.ps__thumb-x{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,height .2s ease-in-out;-webkit-transition:background-color .2s linear,height .2s ease-in-out;height:6px;bottom:2px;position:absolute}.ps__thumb-y{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,width .2s ease-in-out;-webkit-transition:background-color .2s linear,width .2s ease-in-out;width:6px;right:2px;position:absolute}.ps__rail-x:hover>.ps__thumb-x,.ps__rail-x:focus>.ps__thumb-x,.ps__rail-x.ps--clicking .ps__thumb-x{background-color:#999;height:11px}.ps__rail-y:hover>.ps__thumb-y,.ps__rail-y:focus>.ps__thumb-y,.ps__rail-y.ps--clicking .ps__thumb-y{background-color:#999;width:11px}@supports (-ms-overflow-style: none){.ps{overflow:auto!important}}@media screen and (-ms-high-contrast: active),(-ms-high-contrast: none){.ps{overflow:auto!important}}\n","",{version:3,sources:["webpack://./node_modules/perfect-scrollbar/css/perfect-scrollbar.css"],names:[],mappings:"AAGA,IACE,yBAAA,CACA,oBAAA,CACA,uBAAA,CACA,iBAAA,CACA,qBAAA,CAMF,YACE,YAAA,CACA,SAAA,CACA,yDAAA,CACA,iEAAA,CACA,WAAA,CAEA,QAAA,CAEA,iBAAA,CAGF,YACE,YAAA,CACA,SAAA,CACA,yDAAA,CACA,iEAAA,CACA,UAAA,CAEA,OAAA,CAEA,iBAAA,CAGF,oDAEE,aAAA,CACA,4BAAA,CAGF,oJAME,UAAA,CAGF,kJAME,qBAAA,CACA,UAAA,CAMF,aACE,qBAAA,CAnEF,iBAAA,CAqEE,6DAAA,CACA,qEAAA,CACA,UAAA,CAEA,UAAA,CAEA,iBAAA,CAGF,aACE,qBAAA,CA/EF,iBAAA,CAiFE,4DAAA,CACA,oEAAA,CACA,SAAA,CAEA,SAAA,CAEA,iBAAA,CAGF,oGAGE,qBAAA,CACA,WAAA,CAGF,oGAGE,qBAAA,CACA,UAAA,CAIF,qCACE,IACE,uBAAA,CAAA,CAIJ,wEACE,IACE,uBAAA,CAAA",sourcesContent:["/*\r\n * Container style\r\n */\r\n.ps {\r\n overflow: hidden !important;\r\n overflow-anchor: none;\r\n -ms-overflow-style: none;\r\n touch-action: auto;\r\n -ms-touch-action: auto;\r\n}\r\n\r\n/*\r\n * Scrollbar rail styles\r\n */\r\n.ps__rail-x {\r\n display: none;\r\n opacity: 0;\r\n transition: background-color .2s linear, opacity .2s linear;\r\n -webkit-transition: background-color .2s linear, opacity .2s linear;\r\n height: 15px;\r\n /* there must be 'bottom' or 'top' for ps__rail-x */\r\n bottom: 0px;\r\n /* please don't change 'position' */\r\n position: absolute;\r\n}\r\n\r\n.ps__rail-y {\r\n display: none;\r\n opacity: 0;\r\n transition: background-color .2s linear, opacity .2s linear;\r\n -webkit-transition: background-color .2s linear, opacity .2s linear;\r\n width: 15px;\r\n /* there must be 'right' or 'left' for ps__rail-y */\r\n right: 0;\r\n /* please don't change 'position' */\r\n position: absolute;\r\n}\r\n\r\n.ps--active-x > .ps__rail-x,\r\n.ps--active-y > .ps__rail-y {\r\n display: block;\r\n background-color: transparent;\r\n}\r\n\r\n.ps:hover > .ps__rail-x,\r\n.ps:hover > .ps__rail-y,\r\n.ps--focus > .ps__rail-x,\r\n.ps--focus > .ps__rail-y,\r\n.ps--scrolling-x > .ps__rail-x,\r\n.ps--scrolling-y > .ps__rail-y {\r\n opacity: 0.6;\r\n}\r\n\r\n.ps .ps__rail-x:hover,\r\n.ps .ps__rail-y:hover,\r\n.ps .ps__rail-x:focus,\r\n.ps .ps__rail-y:focus,\r\n.ps .ps__rail-x.ps--clicking,\r\n.ps .ps__rail-y.ps--clicking {\r\n background-color: #eee;\r\n opacity: 0.9;\r\n}\r\n\r\n/*\r\n * Scrollbar thumb styles\r\n */\r\n.ps__thumb-x {\r\n background-color: #aaa;\r\n border-radius: 6px;\r\n transition: background-color .2s linear, height .2s ease-in-out;\r\n -webkit-transition: background-color .2s linear, height .2s ease-in-out;\r\n height: 6px;\r\n /* there must be 'bottom' for ps__thumb-x */\r\n bottom: 2px;\r\n /* please don't change 'position' */\r\n position: absolute;\r\n}\r\n\r\n.ps__thumb-y {\r\n background-color: #aaa;\r\n border-radius: 6px;\r\n transition: background-color .2s linear, width .2s ease-in-out;\r\n -webkit-transition: background-color .2s linear, width .2s ease-in-out;\r\n width: 6px;\r\n /* there must be 'right' for ps__thumb-y */\r\n right: 2px;\r\n /* please don't change 'position' */\r\n position: absolute;\r\n}\r\n\r\n.ps__rail-x:hover > .ps__thumb-x,\r\n.ps__rail-x:focus > .ps__thumb-x,\r\n.ps__rail-x.ps--clicking .ps__thumb-x {\r\n background-color: #999;\r\n height: 11px;\r\n}\r\n\r\n.ps__rail-y:hover > .ps__thumb-y,\r\n.ps__rail-y:focus > .ps__thumb-y,\r\n.ps__rail-y.ps--clicking .ps__thumb-y {\r\n background-color: #999;\r\n width: 11px;\r\n}\r\n\r\n/* MS supports */\r\n@supports (-ms-overflow-style: none) {\r\n .ps {\r\n overflow: auto !important;\r\n }\r\n}\r\n\r\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\r\n .ps {\r\n overflow: auto !important;\r\n }\r\n}\r\n"],sourceRoot:""}]),t.Z=a},3645:function(e){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(r)for(var o=0;o<this.length;o++){var a=this[o][0];null!=a&&(i[a]=!0)}for(var s=0;s<e.length;s++){var l=[].concat(e[s]);r&&i[l[0]]||(n&&(l[2]?l[2]="".concat(n," and ").concat(l[2]):l[2]=n),t.push(l))}},t}},4015:function(e){"use strict";function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}e.exports=function(e){var n,r,i=(r=4,function(e){if(Array.isArray(e))return e}(n=e)||function(e,t){var n=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=n){var r,i,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw i}}return o}}(n,r)||function(e,n){if(e){if("string"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=i[1],a=i[3];if("function"==typeof btoa){var s=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),l="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(s),c="/*# ".concat(l," */"),u=a.sources.map((function(e){return"/*# sourceURL=".concat(a.sourceRoot||"").concat(e," */")}));return[o].concat(u).concat([c]).join("\n")}return[o].join("\n")}},1851:function(e,t){var n,r;void 0===(r="function"==typeof(n=function(e){"use strict";e.__esModule=!0;var t={},n=Object.prototype.hasOwnProperty,r=function(e,t){if("function"==typeof t){var n=e;e=t,t=n}var r=t&&t.delay||t||0,i=void 0,o=void 0,a=void 0;return function(){for(var t=arguments.length,n=Array(t),s=0;s<t;s++)n[s]=arguments[s];i=n,o=this,a||(a=setTimeout((function(){e.apply(o,i),i=o=a=null}),r))}},i=function(e,t,n){var r=n.value;return{configurable:!0,get:function(){var e=r.bind(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e}}},o=l((function(e){var r=arguments.length<=1||void 0===arguments[1]?t:arguments[1],i=r.cache||{};return function(){for(var t=arguments.length,o=Array(t),a=0;a<t;a++)o[a]=arguments[a];var s=String(o[0]);return!1===r.caseSensitive&&(s=s.toLowerCase()),n.call(i,s)?i[s]:i[s]=e.apply(this,o)}})),a=l(r),s=l((function(e,t){return e.bind(t)}),(function(){return i}));function l(e,t){var n,r=(t=t||e.decorate||(n=e,function(e){return"function"==typeof e?n(e):function(t,r,i){i.value=n(i.value,e,t,r,i)}}))();return function(){for(var n=arguments.length,i=Array(n),o=0;o<n;o++)i[o]=arguments[o];var a=i.length;return(a<2?t:a>2?r:e).apply(void 0,i)}}e.memoize=o,e.debounce=a,e.bind=s,e.default={memoize:o,debounce:a,bind:s}})?n.apply(t,[t]):n)||(e.exports=r)},7856:function(e){e.exports=function(){"use strict";var e=Object.hasOwnProperty,t=Object.setPrototypeOf,n=Object.isFrozen,r=Object.getPrototypeOf,i=Object.getOwnPropertyDescriptor,o=Object.freeze,a=Object.seal,s=Object.create,l="undefined"!=typeof Reflect&&Reflect,c=l.apply,u=l.construct;c||(c=function(e,t,n){return e.apply(t,n)}),o||(o=function(e){return e}),a||(a=function(e){return e}),u||(u=function(e,t){return new(Function.prototype.bind.apply(e,[null].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(t))))});var p,d=k(Array.prototype.forEach),f=k(Array.prototype.pop),h=k(Array.prototype.push),m=k(String.prototype.toLowerCase),g=k(String.prototype.match),y=k(String.prototype.replace),b=k(String.prototype.indexOf),v=k(String.prototype.trim),x=k(RegExp.prototype.test),w=(p=TypeError,function(){for(var e=arguments.length,t=Arra
gitextract_xv5jft2n/
├── .dockerignore
├── .flake8
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ ├── build_docker.yml
│ ├── python.yml
│ └── release.yml
├── .gitignore
├── .markdownlint.yaml
├── .mypy.ini
├── .pre-commit-config.yaml
├── .yamllint
├── Dockerfile
├── README.md
├── example_outputs/
│ ├── lisek-out.swagger.yml
│ └── lisek-static.html
├── mitmproxy2swagger/
│ ├── __init__.py
│ ├── console_util.py
│ ├── har_capture_reader.py
│ ├── mitmproxy2swagger.py
│ ├── mitmproxy_capture_reader.py
│ ├── swagger_util.py
│ ├── test_mitmproxy2swagger.py
│ ├── test_openapi_compliance.py
│ └── testing_util.py
├── pyproject.toml
├── specs.yml
└── testdata/
├── form_data_flows
├── generic_keys_flows
├── generic_keys_testclient.py
├── generic_keys_testserver.py
├── msgpack_flows
├── msgpack_testclient.py
├── msgpack_testserver.py
├── sklep.lisek.app.har
├── test_flows
├── testclient.py
└── testserver.py
SYMBOL INDEX (73 symbols across 12 files)
FILE: mitmproxy2swagger/console_util.py
function rgb_interpolate (line 25) | def rgb_interpolate(start, end, progress):
function rainbow_at_position (line 30) | def rainbow_at_position(progress):
function print_progress_bar (line 40) | def print_progress_bar(progress=0.0):
FILE: mitmproxy2swagger/har_capture_reader.py
function har_archive_heuristic (line 10) | def har_archive_heuristic(file_path: str) -> int:
class HarFlowWrapper (line 40) | class HarFlowWrapper:
method __init__ (line 41) | def __init__(self, flow: dict):
method get_url (line 44) | def get_url(self):
method get_matching_url (line 47) | def get_matching_url(self, prefix) -> Union[str, None]:
method get_method (line 53) | def get_method(self):
method get_request_headers (line 56) | def get_request_headers(self):
method get_request_body (line 65) | def get_request_body(self):
method get_response_status_code (line 74) | def get_response_status_code(self):
method get_response_reason (line 77) | def get_response_reason(self):
method get_response_headers (line 80) | def get_response_headers(self):
method get_response_body (line 90) | def get_response_body(self):
class HarCaptureReader (line 108) | class HarCaptureReader:
method __init__ (line 109) | def __init__(self, file_path: str, progress_callback=None):
method captured_requests (line 113) | def captured_requests(self) -> Iterator[HarFlowWrapper]:
method name (line 122) | def name(self):
FILE: mitmproxy2swagger/mitmproxy2swagger.py
function path_to_regex (line 25) | def path_to_regex(path):
function strip_query_string (line 34) | def strip_query_string(path):
function set_key_if_not_exists (line 39) | def set_key_if_not_exists(dict, key, value):
function progress_callback (line 44) | def progress_callback(progress):
function detect_input_format (line 48) | def detect_input_format(file_path):
function main (line 59) | def main(override_args: Optional[Sequence[str]] = None):
FILE: mitmproxy2swagger/mitmproxy_capture_reader.py
function mitmproxy_dump_file_huristic (line 12) | def mitmproxy_dump_file_huristic(file_path: str) -> int:
class MitmproxyFlowWrapper (line 41) | class MitmproxyFlowWrapper:
method __init__ (line 42) | def __init__(self, flow: http.HTTPFlow):
method get_url (line 45) | def get_url(self) -> str:
method get_matching_url (line 48) | def get_matching_url(self, prefix) -> typing.Union[str, None]:
method get_method (line 74) | def get_method(self) -> str:
method get_request_headers (line 77) | def get_request_headers(self) -> dict[str, typing.List[str]]:
method get_request_body (line 85) | def get_request_body(self):
method get_response_status_code (line 88) | def get_response_status_code(self):
method get_response_reason (line 91) | def get_response_reason(self):
method get_response_headers (line 94) | def get_response_headers(self):
method get_response_body (line 102) | def get_response_body(self):
class MitmproxyCaptureReader (line 106) | class MitmproxyCaptureReader:
method __init__ (line 107) | def __init__(self, file_path, progress_callback=None):
method captured_requests (line 111) | def captured_requests(self) -> Iterator[MitmproxyFlowWrapper]:
method name (line 129) | def name(self):
FILE: mitmproxy2swagger/swagger_util.py
function path_template_to_endpoint_name (line 22) | def path_template_to_endpoint_name(method, path_template):
function url_to_params (line 50) | def url_to_params(url, path_template):
function request_to_headers (line 84) | def request_to_headers(headers: dict[str, List[Any]], add_example: bool ...
function response_to_headers (line 102) | def response_to_headers(headers):
function value_to_schema (line 113) | def value_to_schema(value):
function is_uuid (line 149) | def is_uuid(key):
function is_numeric_string (line 153) | def is_numeric_string(key):
function is_valid_uuid (line 157) | def is_valid_uuid(val):
function limit_example_size (line 170) | def limit_example_size(example):
FILE: mitmproxy2swagger/test_mitmproxy2swagger.py
function test_mitmproxy2swagger_generates_swagger_from_har (line 7) | def test_mitmproxy2swagger_generates_swagger_from_har():
function test_mitmproxy2swagger_generates_swagger_from_mitmproxy_flow_file (line 21) | def test_mitmproxy2swagger_generates_swagger_from_mitmproxy_flow_file():
function test_mitmproxy2swagger_generates_swagger_from_mitmproxy_flow_file_with_form_data (line 36) | def test_mitmproxy2swagger_generates_swagger_from_mitmproxy_flow_file_wi...
function test_mitmproxy2swagger_generates_swagger_from_mitmproxy_flow_file_with_generic_keys (line 56) | def test_mitmproxy2swagger_generates_swagger_from_mitmproxy_flow_file_wi...
function test_mitmproxy2swagger_generates_headers_for_flow_files (line 112) | def test_mitmproxy2swagger_generates_headers_for_flow_files():
function test_mitmproxy2swagger_parses_msgpack_requests_and_responses (line 129) | def test_mitmproxy2swagger_parses_msgpack_requests_and_responses():
FILE: mitmproxy2swagger/test_openapi_compliance.py
function test_mitmproxy2swagger_compliance_from_mitmproxy_flow_file (line 7) | def test_mitmproxy2swagger_compliance_from_mitmproxy_flow_file():
function test_mitmproxy2swagger_compliance_from_mitmproxy_flow_file_with_headers (line 20) | def test_mitmproxy2swagger_compliance_from_mitmproxy_flow_file_with_head...
function test_mitmproxy2swagger_compliance_from_har_file_with_headers (line 34) | def test_mitmproxy2swagger_compliance_from_har_file_with_headers():
function test_mitmproxy2swagger_compliance_from_form_data_file_with_headers (line 48) | def test_mitmproxy2swagger_compliance_from_form_data_file_with_headers():
function test_mitmproxy2swagger_compliance_from_msgpack_file_with_headers (line 62) | def test_mitmproxy2swagger_compliance_from_msgpack_file_with_headers():
function test_mitmproxy2swagger_compliance_from_generic_keys_file_with_headers (line 76) | def test_mitmproxy2swagger_compliance_from_generic_keys_file_with_header...
FILE: mitmproxy2swagger/testing_util.py
function get_nested_key (line 11) | def get_nested_key(obj: Any, path: str) -> Any:
function mitmproxy2swagger_e2e_test (line 23) | def mitmproxy2swagger_e2e_test(
FILE: testdata/generic_keys_testserver.py
class GenericKeysHandler (line 7) | class GenericKeysHandler(TestServerHandler):
method transform_data (line 8) | def transform_data(self, raw_data):
FILE: testdata/msgpack_testserver.py
class MessagePackHandler (line 6) | class MessagePackHandler(TestServerHandler):
method transform_data (line 7) | def transform_data(self, raw_data):
FILE: testdata/testclient.py
function testclient (line 7) | def testclient(
FILE: testdata/testserver.py
class TestServerHandler (line 7) | class TestServerHandler(http.server.BaseHTTPRequestHandler):
method do_POST (line 8) | def do_POST(self):
method transform_data (line 32) | def transform_data(self, raw_data):
function launchServerWith (line 36) | def launchServerWith(handler: Type[TestServerHandler]):
Condensed preview — 37 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,553K chars).
[
{
"path": ".dockerignore",
"chars": 63,
"preview": "testdata\ntestcase\ndocs\nexample_outputs\n.github\n.venv\n.coverage\n"
},
{
"path": ".flake8",
"chars": 57,
"preview": "[flake8]\nmax-line-length = 120\nextend-ignore = E203,E501\n"
},
{
"path": ".github/dependabot.yml",
"chars": 600,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/build_docker.yml",
"chars": 1320,
"preview": "name: Create and publish a Docker image\n\non:\n push:\n branches: [master]\n\nenv:\n REGISTRY: ghcr.io\n IMAGE_NAME: ${{ "
},
{
"path": ".github/workflows/python.yml",
"chars": 997,
"preview": "# This workflow will install Python dependencies, run tests and lint with a single version of Python\n# For more informat"
},
{
"path": ".github/workflows/release.yml",
"chars": 2581,
"preview": "name: Release package\non:\n workflow_dispatch:\n inputs:\n release-type:\n type: choice\n description:"
},
{
"path": ".gitignore",
"chars": 129,
"preview": "flows\n__pycache__\nass.yaml\nlisek.swagger.yml\ndist\ndupsko.yaml\ndist\n/.mypy_cache/\n.DS_Store\n.idea\nflow*\nswagger\n.vscode\n."
},
{
"path": ".markdownlint.yaml",
"chars": 55,
"preview": "default: true\nline-length: false\nno-inline-html: false\n"
},
{
"path": ".mypy.ini",
"chars": 59,
"preview": "[mypy]\n\n[mypy-json_stream.*]\nignore_missing_imports = True\n"
},
{
"path": ".pre-commit-config.yaml",
"chars": 1972,
"preview": "# See https://pre-commit.com for more information\n# See https://pre-commit.com/hooks.html for more hooks\nexclude: ^(api_"
},
{
"path": ".yamllint",
"chars": 191,
"preview": "extends: default\nyaml-files:\n - \"*.yaml\"\n - \"*.yml\"\n - \".yamllint\"\nrules:\n line-length:\n max: 120\n level: warn"
},
{
"path": "Dockerfile",
"chars": 741,
"preview": "FROM python:3.12-slim-bookworm AS builder\nCOPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/\nENV UV_HTTP_TIMEOUT=100"
},
{
"path": "README.md",
"chars": 5861,
"preview": "# mitmproxy2swagger\n\n[](https://badge.fury.io/py/mitmprox"
},
{
"path": "example_outputs/lisek-out.swagger.yml",
"chars": 80426,
"preview": "openapi: 3.0.0\ninfo:\n title: flows/flows_lisek_filtered Mitmproxy2Swagger\n version: 1.0.0\nservers:\n- url: https://api2"
},
{
"path": "example_outputs/lisek-static.html",
"chars": 1257614,
"preview": "<!DOCTYPE html>\n<!-- saved from url=(0042)https://alu.dog/swaggers/lisek-static.html -->\n<html data-darkreader-mode=\"dyn"
},
{
"path": "mitmproxy2swagger/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "mitmproxy2swagger/console_util.py",
"chars": 2144,
"preview": "# -*- coding: utf-8 -*-\nimport sys\n\nANSI_RGB = \"\\033[38;2;{};{};{}m\"\nANSI_RGB_BG = \"\\033[48;2;{};{};{}m\"\nANSI_RED = \"\\03"
},
{
"path": "mitmproxy2swagger/har_capture_reader.py",
"chars": 3890,
"preview": "# -*- coding: utf-8 -*-\nimport os\nfrom base64 import b64decode\nfrom typing import Iterator, Union\n\nimport json_stream\n\n\n"
},
{
"path": "mitmproxy2swagger/mitmproxy2swagger.py",
"chars": 16885,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"Converts a mitmproxy dump file to a swagger schema.\"\"\"\nimport argparse\n"
},
{
"path": "mitmproxy2swagger/mitmproxy_capture_reader.py",
"chars": 4425,
"preview": "# -*- coding: utf-8 -*-\nimport os\nimport typing\nfrom typing import Iterator\nfrom urllib.parse import urlparse\n\nfrom mitm"
},
{
"path": "mitmproxy2swagger/swagger_util.py",
"chars": 5749,
"preview": "# -*- coding: utf-8 -*-\nimport urllib\nimport uuid\nfrom typing import Any, List\n\nVERBS = [\n \"add\",\n \"create\",\n \""
},
{
"path": "mitmproxy2swagger/test_mitmproxy2swagger.py",
"chars": 4299,
"preview": "# -*- coding: utf-8 -*-\n\n\nfrom .testing_util import get_nested_key, mitmproxy2swagger_e2e_test\n\n\ndef test_mitmproxy2swag"
},
{
"path": "mitmproxy2swagger/test_openapi_compliance.py",
"chars": 2098,
"preview": "# -*- coding: utf-8 -*-\nfrom openapi_spec_validator import validate_spec\n\nfrom mitmproxy2swagger.testing_util import mit"
},
{
"path": "mitmproxy2swagger/testing_util.py",
"chars": 1772,
"preview": "# -*- coding: utf-8 -*-\n\nimport tempfile\nfrom typing import Any, List, Optional\n\nimport ruamel.yaml as ruamel\n\nfrom .mit"
},
{
"path": "pyproject.toml",
"chars": 1063,
"preview": "[tool.poetry]\nname = \"mitmproxy2swagger\"\nversion = \"0.14.0\"\ndescription = \"\"\nauthors = [\"alufers <alufers@wp.pl>\"]\nreadm"
},
{
"path": "specs.yml",
"chars": 36531,
"preview": "openapi: 3.0.0\ninfo:\n title: testdata/sklep.lisek.app.har Mitmproxy2Swagger\n version: 1.0.0\nservers:\n- url: https://sk"
},
{
"path": "testdata/form_data_flows",
"chars": 9649,
"preview": "9643:4:type;4:http;7:version;2:18#9:websocket;0:~8:response;870:6:reason;0:,11:status_code;3:200#13:timestamp_end;18:168"
},
{
"path": "testdata/generic_keys_flows",
"chars": 3305,
"preview": "3299:9:websocket;0:~8:response;1105:6:reason;2:OK,11:status_code;3:200#13:timestamp_end;18:1709848351.4360309^15:timesta"
},
{
"path": "testdata/generic_keys_testclient.py",
"chars": 1103,
"preview": "# -*- coding: utf-8 -*-\n\nimport json\n\nfrom testclient import testclient\n\n# Sample data\ndata = {\n \"numeric\": {\n "
},
{
"path": "testdata/generic_keys_testserver.py",
"chars": 818,
"preview": "# -*- coding: utf-8 -*-\nimport json\n\nfrom testserver import TestServerHandler, launchServerWith\n\n\nclass GenericKeysHandl"
},
{
"path": "testdata/msgpack_flows",
"chars": 2093,
"preview": "2099:9:websocket;0:~8:response;393:6:reason;2:OK,11:status_code;3:200#13:timestamp_end;18:1704284722.2074344^15:timestam"
},
{
"path": "testdata/msgpack_testclient.py",
"chars": 286,
"preview": "# -*- coding: utf-8 -*-\n\nimport msgpack\nfrom testclient import testclient\n\n# Sample MessagePack data\nmsgpack_data = {\"fi"
},
{
"path": "testdata/msgpack_testserver.py",
"chars": 493,
"preview": "# -*- coding: utf-8 -*-\nimport msgpack\nfrom testserver import TestServerHandler, launchServerWith\n\n\nclass MessagePackHan"
},
{
"path": "testdata/test_flows",
"chars": 37930,
"preview": "9330:4:type;4:http;7:version;2:18#9:websocket;0:~8:response;669:6:reason;0:,11:status_code;3:200#13:timestamp_end;18:168"
},
{
"path": "testdata/testclient.py",
"chars": 672,
"preview": "# -*- coding: utf-8 -*-\nfrom typing import Any, Callable\n\nimport requests # type: ignore\n\n\ndef testclient(\n contentT"
},
{
"path": "testdata/testserver.py",
"chars": 1323,
"preview": "# -*- coding: utf-8 -*-\nimport http.server\nimport socketserver\nfrom typing import Type\n\n\nclass TestServerHandler(http.se"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the alufers/mitmproxy2swagger GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 37 files (18.6 MB), approximately 478.9k tokens, and a symbol index with 73 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.