Full Code of alufers/mitmproxy2swagger for AI

master 2b3b3d83abf1 cached
37 files
18.6 MB
478.9k tokens
73 symbols
1 requests
Download .txt
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

[![PyPI version](https://badge.fury.io/py/mitmproxy2swagger.svg)](https://badge.fury.io/py/mitmproxy2swagger)
[![Arch Linux repository](https://img.shields.io/badge/archlinux-mitmproxy2swagger-blue)](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":

   ![A screenshot showing the location of the "Save" option in the "File" menu](./docs/mitmweb_save.png)

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.

   ![A screenshot showing where the export har button is located](./docs/export_har_button.png)

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("","",/\x1b\[22m/g,""),t.dim=r("","",/\x1b\[22m/g,""),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
Download .txt
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
Download .txt
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[![PyPI version](https://badge.fury.io/py/mitmproxy2swagger.svg)](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.

Copied to clipboard!