diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7a917b9e5..974c1f31d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,10 @@ release channel, you can take advantage of these new features and fixes.
## New Features/Changes
+- **Built-in Documentation**: AzuraCast now bundles its own documentation alongside the application itself. By
+ visiting `/docs`, you can see the documentation as it existed when the version you're using was released. This is
+ useful if you're on an older version or in an environment without good Internet connectivity.
+
- The "Listeners by Time Period" report has been expanded to include showing either "Average Listeners" (the previous
mode) or "Unique Listeners", similar to the dashboard charts. You can also view per-hour totals for every given day of
the week.
@@ -321,7 +325,7 @@ multi-tenant installations (i.e. resellers). Upgrading is strongly recommended i
high-performance (Websocket/SSE) Now Playing updates system due to an error in the library on Ubuntu 22.04. We have
since found an excellent replacement library and implemented it. If you're using Websockets or Server-Sent Events (
SSE) for your Now Playing updates, you'll need to make minor changes to how you connect, which we've documented
- here: https://docs.azuracast.com/en/developers/apis/now-playing-data#high-performance-updates
+ here: https://www.azuracast.com/docs/developers/now-playing-data/#high-performance-updates
- On Mastodon and Twitter posts, you can now specify different message bodies for the different web hook trigger types (
i.e. live DJ connect/disconnect or station online/offline).
@@ -760,7 +764,7 @@ multi-tenant installations (i.e. resellers). Upgrading is strongly recommended i
installation with fewer containers. If you are not using the multi-site setup (i.e. hosting another site on the same
Docker installation), no changes are required to your installation. If you want to continue using the multi-site
installation, you can follow
- the [instructions in our documentation](https://docs.azuracast.com/en/administration/docker/multi-site-installation).
+ the [instructions in our documentation](https://www.azuracast.com/docs/administration/multi-site-installation/).
- We have updated how we handle Listener Reports to significantly reduce both memory and overall processing times,
meaning stations with large listener counts can now more easily view and export reports for long time periods.
@@ -1965,7 +1969,7 @@ important updates to the software in that time, especially in the fields of reli
the "Now Playing" API, which is a rich summary of the state of a radio station at the moment. To improve performance
of more popular stations using our software, we've introduced two new methods of accessing this data: a static JSON
file and a live Websocket/EventSource-driven plugin. You can read more on our
- new [Now Playing Data APIs Guide](https://docs.azuracast.com/en/developers/apis/now-playing-data).
+ new [Now Playing Data APIs Guide](https://www.azuracast.com/docs/developers/now-playing-data/).
## Bug Fixes and Minor Updates
diff --git a/Dockerfile b/Dockerfile
index 712143aeb..e460c766f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -55,6 +55,9 @@ RUN bash /bd_build/mariadb/setup.sh
COPY ./util/docker/redis /bd_build/redis/
RUN bash /bd_build/redis/setup.sh
+COPY ./util/docker/docs /bd_build/docs/
+RUN bash /bd_build/docs/setup.sh
+
RUN bash /bd_build/cleanup.sh \
&& rm -rf /bd_build
diff --git a/README.md b/README.md
index 91813a293..561e7c0c9 100644
--- a/README.md
+++ b/README.md
@@ -17,12 +17,12 @@ currently beta software.
![](https://www.azuracast.com/img/ScreenshotTour.gif)
-You can learn more about AzuraCast via our [Documentation](https://docs.azuracast.com/):
+You can learn more about AzuraCast via our [Documentation](https://www.azuracast.com/docs):
-- [About AzuraCast](https://docs.azuracast.com/en/home#core-features)
-- [Included Software](https://docs.azuracast.com/en/home#whats-included)
-- [System Requirements](https://docs.azuracast.com/en/getting-started/requirements)
-- [Installation](https://docs.azuracast.com/en/getting-started/installation)
+- [About AzuraCast](https://www.azuracast.com/docs/#core-features)
+- [Included Software](https://www.azuracast.com/docs/#whats-included)
+- [System Requirements](https://www.azuracast.com/docs/getting-started/requirements/)
+- [Installation](https://www.azuracast.com/docs/getting-started/installation/)
## Live Demo
@@ -36,7 +36,8 @@ Want to see AzuraCast for yourself? Visit our demo site at [demo.azuracast.com](
To install AzuraCast, you should have a basic understanding of the Linux shell terminal. Once installed, every aspect of
your radio station can be managed via AzuraCast's web interface.
-Follow our **[installation guide](https://docs.azuracast.com/en/getting-started/installation)** for instructions on how
+Follow our **[installation guide](https://www.azuracast.com/docs/getting-started/installation/)** for instructions on
+how
to install AzuraCast on your own server.
## License
@@ -49,7 +50,7 @@ and open-source software, and pull requests are always welcome.
## Need Help?
If you need help with AzuraCast, the first place you should visit is
-our [Support page](https://docs.azuracast.com/en/user-guide/troubleshooting)
+our [Support page](https://www.azuracast.com/docs/help/troubleshooting/)
, which features solutions to a number of commonly encountered issues and questions, as well as instructions on how to
check your server's log files for more details. If you do need our help via GitHub, supplying these logs is absolutely
essential in helping us diagnose and resolve your issue.
diff --git a/config/routes/api.php b/config/routes/api.php
index b2d8cf76c..318fb2db9 100644
--- a/config/routes/api.php
+++ b/config/routes/api.php
@@ -29,7 +29,7 @@ return static function (RouteCollectorProxy $app) {
$group->get(
'',
function (ServerRequest $request, Response $response, ...$params): ResponseInterface {
- return $response->withRedirect('/static/api/index.html');
+ return $response->withRedirect('/docs/api/');
}
)->setName('api:index:index');
diff --git a/docker-compose.sample.yml b/docker-compose.sample.yml
index c5e10c068..7d5093424 100644
--- a/docker-compose.sample.yml
+++ b/docker-compose.sample.yml
@@ -17,15 +17,11 @@ services:
labels:
- "com.centurylinklabs.watchtower.scope=azuracast"
# Want to customize the HTTP/S ports? Follow the instructions here:
- # https://docs.azuracast.com/en/administration/docker#using-non-standard-ports
+ # https://www.azuracast.com/docs/administration/docker/#using-non-standard-ports
ports:
- '${AZURACAST_HTTP_PORT:-80}:80'
- '${AZURACAST_HTTPS_PORT:-443}:443'
- '${AZURACAST_SFTP_PORT:-2022}:2022'
- # This default mapping is the outgoing and incoming ports for the first 50 stations.
- # You can override this port mapping in your own docker-compose.override.yml file.
- # For instructions, see:
- # https://docs.azuracast.com/en/administration/docker#expanding-the-station-port-range
- '8000:8000'
- '8005:8005'
- '8006:8006'
diff --git a/frontend/src/components/Admin/Settings/ServicesTab.vue b/frontend/src/components/Admin/Settings/ServicesTab.vue
index 5901eb507..03020d4bf 100644
--- a/frontend/src/components/Admin/Settings/ServicesTab.vue
+++ b/frontend/src/components/Admin/Settings/ServicesTab.vue
@@ -16,7 +16,7 @@
>
{{ $gettext('Learn more about release channels in the AzuraCast docs.') }}
diff --git a/frontend/src/components/Admin/Updates.vue b/frontend/src/components/Admin/Updates.vue
index 6c677529c..7a74a81dc 100644
--- a/frontend/src/components/Admin/Updates.vue
+++ b/frontend/src/components/Admin/Updates.vue
@@ -57,7 +57,7 @@
@@ -137,7 +137,7 @@
diff --git a/frontend/src/components/PanelLayout.vue b/frontend/src/components/PanelLayout.vue
index ccf1a8f67..5ffd5fd91 100644
--- a/frontend/src/components/PanelLayout.vue
+++ b/frontend/src/components/PanelLayout.vue
@@ -93,13 +93,26 @@
{{ $gettext('Switch Theme') }}
+
+
+
+ {{ $gettext('Documentation') }}
+
+
+
+
+
{{ $gettext('Help') }}
@@ -155,7 +168,7 @@
{{ $gettext('Like our software?') }}
{{ $gettext('Donate to support AzuraCast!') }}
@@ -170,6 +183,7 @@ import useTheme from "~/functions/theme";
import {
IconAccountCircle,
IconExitToApp,
+ IconHelp,
IconHome,
IconInvertColors,
IconMenu,
diff --git a/frontend/src/components/Stations/Logs.vue b/frontend/src/components/Stations/Logs.vue
index baf4b631b..985040849 100644
--- a/frontend/src/components/Stations/Logs.vue
+++ b/frontend/src/components/Stations/Logs.vue
@@ -43,7 +43,7 @@
{{ $gettext('Support Documents') }}
diff --git a/frontend/src/components/Stations/Playlists/Form/BasicInfo.vue b/frontend/src/components/Stations/Playlists/Form/BasicInfo.vue
index 6b5ee552e..70f8ff4aa 100644
--- a/frontend/src/components/Stations/Playlists/Form/BasicInfo.vue
+++ b/frontend/src/components/Stations/Playlists/Form/BasicInfo.vue
@@ -88,7 +88,7 @@
>
{{ $gettext('Learn about Advanced Playlists') }}
diff --git a/frontend/src/components/Stations/Streamers/ConnectionInfo.vue b/frontend/src/components/Stations/Streamers/ConnectionInfo.vue
index 3747bded2..54b7b997a 100644
--- a/frontend/src/components/Stations/Streamers/ConnectionInfo.vue
+++ b/frontend/src/components/Stations/Streamers/ConnectionInfo.vue
@@ -79,7 +79,7 @@
{{ $gettext('Setup instructions for broadcasting software are available on the AzuraCast wiki.') }}
{{ $gettext('AzuraCast Wiki') }}
diff --git a/src/Notification/Check/UpdateCheck.php b/src/Notification/Check/UpdateCheck.php
index 4efde7e25..b78539af3 100644
--- a/src/Notification/Check/UpdateCheck.php
+++ b/src/Notification/Check/UpdateCheck.php
@@ -98,7 +98,7 @@ final class UpdateCheck
);
$notification->type = FlashLevels::Info->value;
$notification->actionLabel = __('About Release Channels');
- $notification->actionUrl = 'https://docs.azuracast.com/en/getting-started/updates/release-channels';
+ $notification->actionUrl = '/docs/getting-started/updates/release-channels/';
$event->addNotification($notification);
}
diff --git a/templates/frontend/account/forgot_disabled.phtml b/templates/frontend/account/forgot_disabled.phtml
index 5a72a0a88..719539a71 100644
--- a/templates/frontend/account/forgot_disabled.phtml
+++ b/templates/frontend/account/forgot_disabled.phtml
@@ -27,7 +27,7 @@ $this->layout(
)?>
-
+
=__('Password Reset Instructions')?>
diff --git a/util/docker/docs/setup.sh b/util/docker/docs/setup.sh
new file mode 100644
index 000000000..cee7d3589
--- /dev/null
+++ b/util/docker/docs/setup.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+set -e
+set -x
+
+export DEBIAN_FRONTEND=noninteractive
+
+mkdir -p /tmp/docs
+cd /tmp/docs
+
+# Updated 2023-10-10
+git clone https://github.com/AzuraCast/azuracast.com.git .
+cd builtin
+bash build.sh
+
+mkdir -p /var/azuracast/docs
+cp -TR /tmp/docs/builtin/dist/ /var/azuracast/docs/
+
+rm -rf /tmp/docs
diff --git a/util/docker/web/nginx/azuracast.conf.tmpl b/util/docker/web/nginx/azuracast.conf.tmpl
index 651957bbe..399b62b49 100644
--- a/util/docker/web/nginx/azuracast.conf.tmpl
+++ b/util/docker/web/nginx/azuracast.conf.tmpl
@@ -80,6 +80,12 @@ server {
try_files $uri =404;
}
+ # Built-in docs
+ location /docs {
+ alias /var/azuracast/docs;
+ index index.html;
+ }
+
# Serve a static version of the nowplaying data for non-PHP-blocking delivery.
location /api/nowplaying_static {
expires 10s;
diff --git a/web/static/api/favicon-16x16.png b/web/static/api/favicon-16x16.png
deleted file mode 100644
index 8b194e617..000000000
Binary files a/web/static/api/favicon-16x16.png and /dev/null differ
diff --git a/web/static/api/favicon-32x32.png b/web/static/api/favicon-32x32.png
deleted file mode 100644
index 249737fe4..000000000
Binary files a/web/static/api/favicon-32x32.png and /dev/null differ
diff --git a/web/static/api/index.html b/web/static/api/index.html
deleted file mode 100644
index 06167683f..000000000
--- a/web/static/api/index.html
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
-
- Swagger UI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/static/api/oauth2-redirect.html b/web/static/api/oauth2-redirect.html
deleted file mode 100644
index 64b171f7d..000000000
--- a/web/static/api/oauth2-redirect.html
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
- Swagger UI: OAuth2 Redirect
-
-
-
-
-
diff --git a/web/static/api/openapi.yml b/web/static/api/openapi.yml
deleted file mode 100644
index a390d2474..000000000
--- a/web/static/api/openapi.yml
+++ /dev/null
@@ -1,5180 +0,0 @@
-openapi: 3.0.0
-info:
- title: AzuraCast
- description: 'AzuraCast is a standalone, turnkey web radio management tool. Radio stations hosted by AzuraCast expose a public API for viewing now playing data, making requests and more.'
- license:
- name: 'Apache 2.0'
- url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
- version: 0.19.1
-servers:
- -
- url: 'https://demo.azuracast.com/api'
- description: 'AzuraCast Public Demo Server'
-paths:
- /admin/custom_fields:
- get:
- tags:
- - 'Administration: Custom Fields'
- description: 'List all current custom fields in the system.'
- operationId: getCustomFields
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/CustomField'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Administration: Custom Fields'
- description: 'Create a new custom field.'
- operationId: addCustomField
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/CustomField'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/CustomField'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/admin/custom_field/{id}':
- get:
- tags:
- - 'Administration: Custom Fields'
- description: 'Retrieve details for a single custom field.'
- operationId: getCustomField
- parameters:
- -
- name: id
- in: path
- description: ID
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/CustomField'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Administration: Custom Fields'
- description: 'Update details of a single custom field.'
- operationId: editCustomField
- parameters:
- -
- name: id
- in: path
- description: ID
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/CustomField'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Administration: Custom Fields'
- description: 'Delete a single custom field.'
- operationId: deleteCustomField
- parameters:
- -
- name: id
- in: path
- description: ID
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- /admin/permissions:
- get:
- tags:
- - 'Administration: Roles'
- description: 'Return a list of all available permissions.'
- operationId: getPermissions
- responses:
- '200':
- description: Success
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- /admin/roles:
- get:
- tags:
- - 'Administration: Roles'
- description: 'List all current roles in the system.'
- operationId: getRoles
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Role'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Administration: Roles'
- description: 'Create a new role.'
- operationId: addRole
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Role'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Role'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/admin/role/{id}':
- get:
- tags:
- - 'Administration: Roles'
- description: 'Retrieve details for a single current role.'
- operationId: getRole
- parameters:
- -
- name: id
- in: path
- description: 'Role ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Role'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Administration: Roles'
- description: 'Update details of a single role.'
- operationId: editRole
- parameters:
- -
- name: id
- in: path
- description: 'Role ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Role'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Administration: Roles'
- description: 'Delete a single role.'
- operationId: deleteRole
- parameters:
- -
- name: id
- in: path
- description: 'Role ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- /admin/server/stats:
- get:
- tags:
- - 'Administration: CPU stats'
- description: 'Return a list of all CPU usage stats.'
- operationId: getServerStats
- responses:
- '200':
- description: Success
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- /admin/settings:
- get:
- tags:
- - 'Administration: Settings'
- description: 'List the current values of all editable system settings.'
- operationId: getSettings
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Settings'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Administration: Settings'
- description: 'Update settings to modify any settings provided.'
- operationId: editSettings
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Settings'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- /admin/stations:
- get:
- tags:
- - 'Administration: Stations'
- description: 'List all current stations in the system.'
- operationId: adminGetStations
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Station'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Administration: Stations'
- description: 'Create a new station.'
- operationId: adminAddStation
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Station'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Station'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/admin/station/{id}':
- get:
- tags:
- - 'Administration: Stations'
- description: 'Retrieve details for a single station.'
- operationId: adminGetStation
- parameters:
- -
- name: id
- in: path
- description: ID
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Station'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Administration: Stations'
- description: 'Update details of a single station.'
- operationId: adminEditStation
- parameters:
- -
- name: id
- in: path
- description: ID
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Station'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Administration: Stations'
- description: 'Delete a single station.'
- operationId: adminDeleteStation
- parameters:
- -
- name: id
- in: path
- description: ID
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- /admin/storage_locations:
- get:
- tags:
- - 'Administration: Storage Locations'
- description: 'List all current storage locations in the system.'
- operationId: getStorageLocations
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_Admin_StorageLocation'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Administration: Storage Locations'
- description: 'Create a new storage location.'
- operationId: addStorageLocation
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Admin_StorageLocation'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Admin_StorageLocation'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/admin/storage_location/{id}':
- get:
- tags:
- - 'Administration: Storage Locations'
- description: 'Retrieve details for a single storage location.'
- operationId: getStorageLocation
- parameters:
- -
- name: id
- in: path
- description: 'User ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Admin_StorageLocation'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Administration: Storage Locations'
- description: 'Update details of a single storage location.'
- operationId: editStorageLocation
- parameters:
- -
- name: id
- in: path
- description: 'Storage Location ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Admin_StorageLocation'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Administration: Storage Locations'
- description: 'Delete a single storage location.'
- operationId: deleteStorageLocation
- parameters:
- -
- name: id
- in: path
- description: 'Storage Location ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- /admin/users:
- get:
- tags:
- - 'Administration: Users'
- description: 'List all current users in the system.'
- operationId: getUsers
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/User'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Administration: Users'
- description: 'Create a new user.'
- operationId: addUser
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/User'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/User'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/admin/user/{id}':
- get:
- tags:
- - 'Administration: Users'
- description: 'Retrieve details for a single current user.'
- operationId: getUser
- parameters:
- -
- name: id
- in: path
- description: 'User ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/User'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Administration: Users'
- description: 'Update details of a single user.'
- operationId: editUser
- parameters:
- -
- name: id
- in: path
- description: 'User ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/User'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Administration: Users'
- description: 'Delete a single user.'
- operationId: deleteUser
- parameters:
- -
- name: id
- in: path
- description: 'User ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- /status:
- get:
- tags:
- - Miscellaneous
- description: 'Returns an affirmative response if the API is active.'
- operationId: getStatus
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_SystemStatus'
- /time:
- get:
- tags:
- - Miscellaneous
- description: "Returns the time (with formatting) in GMT and the user's local time zone, if logged in."
- operationId: getTime
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Time'
- /internal/relays:
- get:
- tags:
- - 'Administration: Relays'
- description: "Returns all necessary information to relay all 'relayable' stations."
- operationId: internalGetRelayDetails
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_Admin_Relay'
- /nowplaying:
- get:
- tags:
- - 'Now Playing'
- description: "Returns a full summary of all stations' current state."
- operationId: getAllNowPlaying
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_NowPlaying'
- '/nowplaying/{station_id}':
- get:
- tags:
- - 'Now Playing'
- description: "Returns a full summary of the specified station's current state."
- operationId: getStationNowPlaying
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_NowPlaying'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '/station/{station_id}/art/{media_id}':
- get:
- tags:
- - 'Stations: Media'
- description: 'Returns the album art for a song, or a generic image.'
- operationId: getMediaArt
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: media_id
- in: path
- description: 'The station media unique ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- description: 'The requested album artwork'
- '404':
- description: 'Image not found; generic filler image.'
- post:
- tags:
- - 'Stations: Media'
- description: 'Sets the album art for a track.'
- operationId: postMediaArt
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Media ID'
- required: true
- schema:
- anyOf:
- -
- type: integer
- format: int64
- -
- type: string
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Media'
- description: 'Removes the album art for a track.'
- operationId: deleteMediaArt
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Media ID'
- required: true
- schema:
- anyOf:
- -
- type: integer
- format: int64
- -
- type: string
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/fallback':
- get:
- tags:
- - 'Stations: General'
- description: 'Get the custom fallback track for a station.'
- operationId: getStationFallback
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: General'
- description: 'Update the custom fallback track for the station.'
- operationId: postStationFallback
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: General'
- description: 'Removes the custom fallback track for a station.'
- operationId: deleteStationFallback
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/files':
- get:
- tags:
- - 'Stations: Media'
- description: 'List all current uploaded files.'
- operationId: getFiles
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/StationMedia'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Media'
- description: 'Upload a new file.'
- operationId: addFile
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_UploadFile'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMedia'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/file/{id}':
- get:
- tags:
- - 'Stations: Media'
- description: 'Retrieve details for a single file.'
- operationId: getFile
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Media ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMedia'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Stations: Media'
- description: 'Update details of a single file.'
- operationId: editFile
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Media ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMedia'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Media'
- description: 'Delete a single file.'
- operationId: deleteFile
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Media ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/history':
- get:
- tags:
- - 'Stations: History'
- description: 'Return song playback history items for a given station.'
- operationId: getStationHistory
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: start
- in: query
- description: 'The start date for records, in YYYY-MM-DD format.'
- required: false
- schema:
- type: string
- -
- name: end
- in: query
- description: 'The end date for records, in YYYY-MM-DD format.'
- required: false
- schema:
- type: string
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_DetailedSongHistory'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/hls_streams':
- get:
- tags:
- - 'Stations: HLS Streams'
- description: 'List all current HLS streams.'
- operationId: getHlsStreams
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/StationMount'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: HLS Streams'
- description: 'Create a new HLS stream.'
- operationId: addHlsStream
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMount'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMount'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/hls_stream/{id}':
- get:
- tags:
- - 'Stations: HLS Streams'
- description: 'Retrieve details for a single HLS stream.'
- operationId: getHlsStream
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'HLS Stream ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMount'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Stations: HLS Streams'
- description: 'Update details of a single HLS stream.'
- operationId: editHlsStream
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'HLS Stream ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMount'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: HLS Streams'
- description: 'Delete a single HLS stream.'
- operationId: deleteHlsStream
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'HLS Stream ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- /stations:
- get:
- tags:
- - 'Stations: General'
- description: 'Returns a list of stations.'
- operationId: getStations
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_NowPlaying_Station'
- '/station/{station_id}':
- get:
- tags:
- - 'Stations: General'
- description: 'Return information about a single station.'
- operationId: getStation
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_NowPlaying_Station'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '/station/{station_id}/listeners':
- get:
- tags:
- - 'Stations: Listeners'
- description: 'Return detailed information about current listeners.'
- operationId: getStationListeners
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_Listener'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/mount/{id}/intro':
- get:
- tags:
- - 'Stations: Mount Points'
- description: 'Get the intro track for a mount point.'
- operationId: getMountIntro
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Mount Point ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Mount Points'
- description: 'Update the intro track for a mount point.'
- operationId: postMountIntro
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Mount Point ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Mount Points'
- description: 'Removes the intro track for a mount point.'
- operationId: deleteMountIntro
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Mount Point ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/mounts':
- get:
- tags:
- - 'Stations: Mount Points'
- description: 'List all current mount points.'
- operationId: getStationMounts
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/StationMount'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Mount Points'
- description: 'Create a new mount point.'
- operationId: addMount
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMount'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMount'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/mount/{id}':
- get:
- tags:
- - 'Stations: Mount Points'
- description: 'Retrieve details for a single mount point.'
- operationId: getMount
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Streamer ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMount'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Stations: Mount Points'
- description: 'Update details of a single mount point.'
- operationId: editMount
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Streamer ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationMount'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Mount Points'
- description: 'Delete a single mount point.'
- operationId: deleteMount
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'StationMount ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/playlists':
- get:
- tags:
- - 'Stations: Playlists'
- description: 'List all current playlists.'
- operationId: getPlaylists
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/StationPlaylist'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Playlists'
- description: 'Create a new playlist.'
- operationId: addPlaylist
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationPlaylist'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationPlaylist'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/playlist/{id}':
- get:
- tags:
- - 'Stations: Playlists'
- description: 'Retrieve details for a single playlist.'
- operationId: getPlaylist
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Playlist ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationPlaylist'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Stations: Playlists'
- description: 'Update details of a single playlist.'
- operationId: editPlaylist
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Playlist ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationPlaylist'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Playlists'
- description: 'Delete a single playlist relay.'
- operationId: deletePlaylist
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Playlist ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/podcast/{podcast_id}/episodes':
- get:
- tags:
- - 'Stations: Podcasts'
- description: 'List all current episodes for a given podcast ID.'
- operationId: getEpisodes
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_PodcastEpisode'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Podcasts'
- description: 'Create a new podcast episode.'
- operationId: addEpisode
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_PodcastEpisode'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_PodcastEpisode'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/podcast/{podcast_id}/episode/{id}':
- get:
- tags:
- - 'Stations: Podcasts'
- description: 'Retrieve details for a single podcast episode.'
- operationId: getEpisode
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- -
- name: id
- in: path
- description: 'Podcast Episode ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_PodcastEpisode'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Stations: Podcasts'
- description: 'Update details of a single podcast episode.'
- operationId: editEpisode
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- -
- name: id
- in: path
- description: 'Podcast Episode ID'
- required: true
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_PodcastEpisode'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Podcasts'
- description: 'Delete a single podcast episode.'
- operationId: deleteEpisode
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- -
- name: id
- in: path
- description: 'Podcast Episode ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/podcast/{podcast_id}/art':
- get:
- tags:
- - 'Stations: Podcasts'
- description: 'Gets the album art for a podcast.'
- operationId: getPodcastArt
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Success
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Podcasts'
- description: 'Sets the album art for a podcast.'
- operationId: postPodcastArt
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Podcasts'
- description: 'Removes the album art for a podcast.'
- operationId: deletePodcastArt
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/podcast/{podcast_id}/episode/{episode_id}/art':
- get:
- tags:
- - 'Stations: Podcasts'
- description: 'Gets the album art for a podcast episode.'
- operationId: getPodcastEpisodeArt
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- -
- name: episode_id
- in: path
- description: 'Podcast Episode ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Success
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Podcasts'
- description: 'Sets the album art for a podcast episode.'
- operationId: postPodcastEpisodeArt
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- -
- name: episode_id
- in: path
- description: 'Podcast Episode ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Podcasts'
- description: 'Removes the album art for a podcast episode.'
- operationId: deletePodcastEpisodeArt
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- -
- name: episode_id
- in: path
- description: 'Podcast Episode ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Status'
- '404':
- description: 'Record not found'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Error'
- '403':
- description: 'Access denied'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Error'
- security:
- -
- ApiKey: []
- '/station/{station_id}/podcast/{podcast_id}/episode/{episode_id}/media':
- get:
- tags:
- - 'Stations: Podcasts'
- description: 'Gets the media for a podcast episode.'
- operationId: getPodcastEpisodeMedia
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- -
- name: episode_id
- in: path
- description: 'Podcast Episode ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Success
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Podcasts'
- description: 'Sets the media for a podcast episode.'
- operationId: postPodcastEpisodeMedia
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- -
- name: episode_id
- in: path
- description: 'Podcast Episode ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Podcasts'
- description: 'Removes the media for a podcast episode.'
- operationId: deletePodcastEpisodeMedia
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: podcast_id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- -
- name: episode_id
- in: path
- description: 'Podcast Episode ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/podcasts':
- get:
- tags:
- - 'Stations: Podcasts'
- description: 'List all current podcasts.'
- operationId: getPodcasts
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_Podcast'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Podcasts'
- description: 'Create a new podcast.'
- operationId: addPodcast
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Podcast'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Podcast'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/podcast/{id}':
- get:
- tags:
- - 'Stations: Podcasts'
- description: 'Retrieve details for a single podcast.'
- operationId: getPodcast
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Podcast'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Stations: Podcasts'
- description: 'Update details of a single podcast.'
- operationId: editPodcast
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Podcast'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Podcasts'
- description: 'Delete a single podcast.'
- operationId: deletePodcast
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Podcast ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/queue':
- get:
- tags:
- - 'Stations: Queue'
- description: 'Return information about the upcoming song playback queue.'
- operationId: getQueue
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_StationQueueDetailed'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/queue/{id}':
- get:
- tags:
- - 'Stations: Queue'
- description: 'Retrieve details of a single queued item.'
- operationId: getQueueItem
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Queue Item ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_StationQueueDetailed'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Queue'
- description: 'Delete a single queued item.'
- operationId: deleteQueueItem
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Queue Item ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/remotes':
- get:
- tags:
- - 'Stations: Remote Relays'
- description: 'List all current remote relays.'
- operationId: getRelays
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_StationRemote'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Remote Relays'
- description: 'Create a new remote relay.'
- operationId: addRelay
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_StationRemote'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_StationRemote'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/remote/{id}':
- get:
- tags:
- - 'Stations: Remote Relays'
- description: 'Retrieve details for a single remote relay.'
- operationId: getRelay
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Remote Relay ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_StationRemote'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Stations: Remote Relays'
- description: 'Update details of a single remote relay.'
- operationId: editRelay
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Remote Relay ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_StationRemote'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Remote Relays'
- description: 'Delete a single remote relay.'
- operationId: deleteRelay
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Remote Relay ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/requests':
- get:
- tags:
- - 'Stations: Song Requests'
- description: 'Return a list of requestable songs.'
- operationId: getRequestableSongs
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_StationRequest'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- '/station/{station_id}/request/{request_id}':
- post:
- tags:
- - 'Stations: Song Requests'
- description: 'Submit a song request.'
- operationId: submitSongRequest
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: request_id
- in: path
- description: 'The requestable song ID'
- required: true
- schema:
- type: string
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- '/station/{station_id}/schedule':
- get:
- tags:
- - 'Stations: Schedules'
- description: 'Return upcoming and currently ongoing schedule entries.'
- operationId: getSchedule
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: now
- in: query
- description: 'The date/time to compare schedule items to. Defaults to the current date and time.'
- required: false
- schema:
- type: string
- -
- name: rows
- in: query
- description: 'The number of upcoming/ongoing schedule entries to return. Defaults to 5.'
- required: false
- schema:
- type: integer
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Api_StationSchedule'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- '/station/{station_id}/status':
- get:
- tags:
- - 'Stations: Service Control'
- description: 'Retrieve the current status of all serivces associated with the radio broadcast.'
- operationId: getServiceStatus
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_StationServiceStatus'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/restart':
- post:
- tags:
- - 'Stations: Service Control'
- description: 'Restart all services associated with the radio broadcast.'
- operationId: restartServices
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/frontend/{action}':
- post:
- tags:
- - 'Stations: Service Control'
- description: 'Perform service control actions on the radio frontend (Icecast, Shoutcast, etc.)'
- operationId: doFrontendServiceAction
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: action
- in: path
- description: 'The action to perform (start, stop, restart)'
- required: false
- schema:
- type: string
- default: restart
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/backend/{action}':
- post:
- tags:
- - 'Stations: Service Control'
- description: 'Perform service control actions on the radio backend (Liquidsoap)'
- operationId: doBackendServiceAction
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: action
- in: path
- description: 'The action to perform (for all: start, stop, restart, skip, disconnect)'
- required: false
- schema:
- type: string
- default: restart
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/sftp-users':
- get:
- tags:
- - 'Stations: SFTP Users'
- description: 'List all current SFTP users.'
- operationId: getSftpUsers
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/SftpUser'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: SFTP Users'
- description: 'Create a new SFTP user.'
- operationId: addSftpUser
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SftpUser'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SftpUser'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/sftp-user/{id}':
- get:
- tags:
- - 'Stations: SFTP Users'
- description: 'Retrieve details for a single SFTP user.'
- operationId: getSftpUser
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'SFTP User ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SftpUser'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Stations: SFTP Users'
- description: 'Update details of a single SFTP user.'
- operationId: editSftpUser
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Remote Relay ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SftpUser'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: SFTP Users'
- description: 'Delete a single remote relay.'
- operationId: deleteSftpUser
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Remote Relay ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/stereo-tool-configuration':
- get:
- tags:
- - 'Stations: Broadcasting'
- description: 'Get the Stereo Tool configuration file for a station.'
- operationId: getStereoToolConfiguration
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Broadcasting'
- description: 'Update the Stereo Tool configuration file for a station.'
- operationId: postStereoToolConfiguration
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Broadcasting'
- description: 'Removes the Stereo Tool configuration file for a station.'
- operationId: deleteStereoToolConfiguration
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/streamers':
- get:
- tags:
- - 'Stations: Streamers/DJs'
- description: 'List all current Streamer/DJ accounts for the specified station.'
- operationId: getStreamers
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/StationStreamer'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Streamers/DJs'
- description: 'Create a new Streamer/DJ account.'
- operationId: addStreamer
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationStreamer'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationStreamer'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/streamer/{id}':
- get:
- tags:
- - 'Stations: Streamers/DJs'
- description: 'Retrieve details for a single Streamer/DJ account.'
- operationId: getStreamer
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Streamer ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationStreamer'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Stations: Streamers/DJs'
- description: 'Update details of a single Streamer/DJ account.'
- operationId: editStreamer
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Streamer ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationStreamer'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Streamers/DJs'
- description: 'Delete a single Streamer/DJ account.'
- operationId: deleteStreamer
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'StationStreamer ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/webhooks':
- get:
- tags:
- - 'Stations: Web Hooks'
- description: 'List all current web hooks.'
- operationId: getWebhooks
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/StationWebhook'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- post:
- tags:
- - 'Stations: Web Hooks'
- description: 'Create a new web hook.'
- operationId: addWebhook
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationWebhook'
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationWebhook'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- '/station/{station_id}/webhook/{id}':
- get:
- tags:
- - 'Stations: Web Hooks'
- description: 'Retrieve details for a single web hook.'
- operationId: getWebhook
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Web Hook ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationWebhook'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- put:
- tags:
- - 'Stations: Web Hooks'
- description: 'Update details of a single web hook.'
- operationId: editWebhook
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Web Hook ID'
- required: true
- schema:
- type: integer
- format: int64
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/StationWebhook'
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
- delete:
- tags:
- - 'Stations: Web Hooks'
- description: 'Delete a single web hook relay.'
- operationId: deleteWebhook
- parameters:
- -
- $ref: '#/components/parameters/StationIdRequired'
- -
- name: id
- in: path
- description: 'Web Hook ID'
- required: true
- schema:
- type: integer
- format: int64
- responses:
- '200':
- $ref: '#/components/responses/Success'
- '403':
- $ref: '#/components/responses/AccessDenied'
- '404':
- $ref: '#/components/responses/RecordNotFound'
- '500':
- $ref: '#/components/responses/GenericError'
- security:
- -
- ApiKey: []
-components:
- schemas:
- Api_Admin_Relay:
- properties:
- id:
- description: 'Station ID'
- type: integer
- example: 1
- name:
- description: 'Station name'
- type: string
- example: 'AzuraTest Radio'
- nullable: true
- shortcode:
- description: 'Station "short code", used for URL and folder paths'
- type: string
- example: azuratest_radio
- nullable: true
- description:
- description: 'Station description'
- type: string
- example: 'An AzuraCast station!'
- nullable: true
- url:
- description: 'Station homepage URL'
- type: string
- example: 'https://www.azuracast.com/'
- nullable: true
- genre:
- description: 'The genre of the station'
- type: string
- example: Variety
- nullable: true
- type:
- description: 'Which broadcasting software (frontend) the station uses'
- type: string
- example: shoutcast2
- nullable: true
- port:
- description: 'The port used by this station to serve its broadcasts.'
- type: integer
- example: 8000
- nullable: true
- relay_pw:
- description: 'The relay password for the frontend (if applicable).'
- type: string
- example: p4ssw0rd
- admin_pw:
- description: 'The administrator password for the frontend (if applicable).'
- type: string
- example: p4ssw0rd
- mounts:
- type: array
- items:
- $ref: '#/components/schemas/Api_NowPlaying_StationMount'
- type: object
- Api_Admin_StorageLocation:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasLinks'
- -
- properties:
- id:
- type: integer
- example: 1
- type:
- description: 'The type of storage location.'
- type: string
- example: station_media
- adapter:
- description: 'The storage adapter to use for this location.'
- type: string
- example: local
- path:
- description: 'The local path, if the local adapter is used, or path prefix for S3/remote adapters.'
- type: string
- example: /var/azuracast/stations/azuratest_radio/media
- nullable: true
- s3CredentialKey:
- description: 'The credential key for S3 adapters.'
- type: string
- example: your-key-here
- nullable: true
- s3CredentialSecret:
- description: 'The credential secret for S3 adapters.'
- type: string
- example: your-secret-here
- nullable: true
- s3Region:
- description: 'The region for S3 adapters.'
- type: string
- example: your-region
- nullable: true
- s3Version:
- description: 'The API version for S3 adapters.'
- type: string
- example: latest
- nullable: true
- s3Bucket:
- description: 'The S3 bucket name for S3 adapters.'
- type: string
- example: your-bucket-name
- nullable: true
- s3Endpoint:
- description: 'The optional custom S3 endpoint S3 adapters.'
- type: string
- example: 'https://your-region.digitaloceanspaces.com'
- nullable: true
- dropboxAppKey:
- description: 'The optional Dropbox App Key.'
- type: string
- example: ''
- nullable: true
- dropboxAppSecret:
- description: 'The optional Dropbox App Secret.'
- type: string
- example: ''
- nullable: true
- dropboxAuthToken:
- description: 'The optional Dropbox Auth Token.'
- type: string
- example: ''
- nullable: true
- sftpHost:
- description: 'The host for SFTP adapters'
- type: string
- example: 127.0.0.1
- nullable: true
- sftpUsername:
- description: 'The username for SFTP adapters'
- type: string
- example: root
- nullable: true
- sftpPassword:
- description: 'The password for SFTP adapters'
- type: string
- example: abc123
- nullable: true
- sftpPort:
- description: 'The port for SFTP adapters'
- type: integer
- example: 20
- nullable: true
- sftpPrivateKey:
- description: 'The private key for SFTP adapters'
- type: string
- nullable: true
- sftpPrivateKeyPassPhrase:
- description: 'The private key pass phrase for SFTP adapters'
- type: string
- nullable: true
- storageQuota:
- type: string
- example: '50 GB'
- nullable: true
- storageQuotaBytes:
- type: string
- example: '120000'
- nullable: true
- storageUsed:
- type: string
- example: '1 GB'
- nullable: true
- storageUsedBytes:
- type: string
- example: '60000'
- nullable: true
- storageAvailable:
- type: string
- example: '1 GB'
- nullable: true
- storageAvailableBytes:
- type: string
- example: '120000'
- nullable: true
- storageUsedPercent:
- type: integer
- example: '75'
- nullable: true
- isFull:
- type: boolean
- example: 'true'
- uri:
- description: 'The URI associated with the storage location.'
- type: string
- example: /var/azuracast/www
- stations:
- description: 'The stations using this storage location, if any.'
- type: array
- items:
- type: string
- example: 'AzuraTest Radio'
- nullable: true
- Api_DetailedSongHistory:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/Api_NowPlaying_SongHistory'
- -
- properties:
- listeners_start:
- description: 'Number of listeners when the song playback started.'
- type: integer
- example: 94
- listeners_end:
- description: 'Number of listeners when song playback ended.'
- type: integer
- example: 105
- delta_total:
- description: "The sum total change of listeners between the song's start and ending."
- type: integer
- example: 11
- is_visible:
- description: 'Whether the entry is visible on public playlists.'
- type: boolean
- example: true
- Api_Error:
- properties:
- code:
- description: 'The numeric code of the error.'
- type: integer
- example: 500
- type:
- description: 'The programmatic class of error.'
- type: string
- example: NotLoggedInException
- message:
- description: 'The text description of the error.'
- type: string
- example: 'Error description.'
- formatted_message:
- description: 'The HTML-formatted text description of the error.'
- type: string
- example: 'Error description. Detailed error text.'
- nullable: true
- extra_data:
- description: 'Stack traces and other supplemental data.'
- type: array
- items: { }
- success:
- description: 'Used for API calls that expect an \Entity\Api\Status type response.'
- type: boolean
- example: false
- type: object
- Api_Listener:
- properties:
- ip:
- description: "The listener's IP address"
- type: string
- example: 127.0.0.1
- user_agent:
- description: "The listener's HTTP User-Agent"
- type: string
- example: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36'
- hash:
- description: 'A unique identifier for this listener/user agent (used for unique calculations).'
- type: string
- example: ''
- mount_is_local:
- description: 'Whether the user is connected to a local mount point or a remote one.'
- type: boolean
- example: false
- mount_name:
- description: 'The display name of the mount point.'
- type: string
- example: /radio.mp3
- connected_on:
- description: 'UNIX timestamp that the user first connected.'
- type: integer
- example: 1609480800
- connected_until:
- description: 'UNIX timestamp that the user disconnected (or the latest timestamp if they are still connected).'
- type: integer
- example: 1609480800
- connected_time:
- description: 'Number of seconds that the user has been connected.'
- type: integer
- example: 30
- device:
- description: 'Device metadata, if available'
- type: array
- items: { }
- location:
- description: 'Location metadata, if available'
- type: array
- items: { }
- type: object
- Api_NewRecord:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/Api_Status'
- -
- properties:
- links:
- type: array
- items:
- type: string
- example: 'http://localhost/api/record/1'
- Api_NowPlaying_CurrentSong:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/Api_NowPlaying_SongHistory'
- -
- properties:
- elapsed:
- description: "Elapsed time of the song's playback since it started."
- type: integer
- example: 25
- remaining:
- description: 'Remaining time in the song, in seconds.'
- type: integer
- example: 155
- Api_NowPlaying_Listeners:
- properties:
- total:
- description: 'Total non-unique current listeners'
- type: integer
- example: 20
- unique:
- description: 'Total unique current listeners'
- type: integer
- example: 15
- current:
- description: 'Total non-unique current listeners (Legacy field, may be retired in the future.)'
- type: integer
- example: 20
- type: object
- Api_NowPlaying_Live:
- properties:
- is_live:
- description: 'Whether the stream is known to currently have a live DJ.'
- type: boolean
- example: false
- streamer_name:
- description: 'The current active streamer/DJ, if one is available.'
- type: string
- example: 'DJ Jazzy Jeff'
- broadcast_start:
- description: 'The start timestamp of the current broadcast, if one is available.'
- type: integer
- example: '1591548318'
- nullable: true
- art:
- description: 'URL to the streamer artwork (if available).'
- example: 'https://picsum.photos/1200/1200'
- nullable: true
- type: object
- Api_NowPlaying:
- properties:
- station:
- $ref: '#/components/schemas/Api_NowPlaying_Station'
- listeners:
- $ref: '#/components/schemas/Api_NowPlaying_Listeners'
- live:
- $ref: '#/components/schemas/Api_NowPlaying_Live'
- now_playing:
- nullable: true
- oneOf:
- -
- $ref: '#/components/schemas/Api_NowPlaying_CurrentSong'
- playing_next:
- nullable: true
- oneOf:
- -
- $ref: '#/components/schemas/Api_NowPlaying_StationQueue'
- song_history:
- type: array
- items:
- $ref: '#/components/schemas/Api_NowPlaying_SongHistory'
- is_online:
- description: 'Whether the stream is currently online.'
- type: boolean
- example: true
- cache:
- description: 'Debugging information about where the now playing data comes from.'
- type: string
- enum:
- - hit
- - database
- - station
- nullable: true
- type: object
- Api_NowPlaying_SongHistory:
- properties:
- sh_id:
- description: 'Song history unique identifier'
- type: integer
- played_at:
- description: 'UNIX timestamp when playback started.'
- type: integer
- example: 1609480800
- duration:
- description: 'Duration of the song in seconds'
- type: integer
- example: 180
- playlist:
- description: 'Indicates the playlist that the song was played from, if available, or empty string if not.'
- type: string
- example: 'Top 100'
- nullable: true
- streamer:
- description: 'Indicates the current streamer that was connected, if available, or empty string if not.'
- type: string
- example: 'Test DJ'
- nullable: true
- is_request:
- description: 'Indicates whether the song is a listener request.'
- type: boolean
- song:
- $ref: '#/components/schemas/Api_Song'
- type: object
- Api_NowPlaying_Station:
- properties:
- id:
- description: 'Station ID'
- type: integer
- example: 1
- name:
- description: 'Station name'
- type: string
- example: 'AzuraTest Radio'
- shortcode:
- description: 'Station "short code", used for URL and folder paths'
- type: string
- example: azuratest_radio
- description:
- description: 'Station description'
- type: string
- example: 'An AzuraCast station!'
- frontend:
- description: 'Which broadcasting software (frontend) the station uses'
- type: string
- example: shoutcast2
- backend:
- description: 'Which AutoDJ software (backend) the station uses'
- type: string
- example: liquidsoap
- listen_url:
- description: 'The full URL to listen to the default mount of the station'
- example: 'http://localhost:8000/radio.mp3'
- url:
- description: 'The public URL of the station.'
- type: string
- example: 'https://example.com/'
- nullable: true
- public_player_url:
- description: 'The public player URL for the station.'
- example: 'https://example.com/public/example_station'
- playlist_pls_url:
- description: 'The playlist download URL in PLS format.'
- example: 'https://example.com/public/example_station/playlist.pls'
- playlist_m3u_url:
- description: 'The playlist download URL in M3U format.'
- example: 'https://example.com/public/example_station/playlist.m3u'
- is_public:
- description: 'If the station is public (i.e. should be shown in listings of all stations)'
- type: boolean
- example: true
- mounts:
- type: array
- items:
- $ref: '#/components/schemas/Api_NowPlaying_StationMount'
- remotes:
- type: array
- items:
- $ref: '#/components/schemas/Api_NowPlaying_StationRemote'
- hls_enabled:
- description: 'If the station has HLS streaming enabled.'
- type: boolean
- example: true
- hls_url:
- description: 'The full URL to listen to the HLS stream for the station.'
- example: 'https://example.com/hls/azuratest_radio/live.m3u8'
- nullable: true
- hls_listeners:
- description: 'HLS Listeners'
- type: integer
- example: 1
- type: object
- Api_NowPlaying_StationMount:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/Api_NowPlaying_StationRemote'
- -
- properties:
- path:
- description: 'The relative path that corresponds to this mount point'
- type: string
- example: /radio.mp3
- is_default:
- description: 'If the mount is the default mount for the parent station'
- type: boolean
- example: true
- Api_NowPlaying_StationQueue:
- properties:
- cued_at:
- description: 'UNIX timestamp when the AutoDJ is expected to queue the song for playback.'
- type: integer
- example: 1609480800
- played_at:
- description: 'UNIX timestamp when playback is expected to start.'
- type: integer
- example: 1609480800
- duration:
- description: 'Duration of the song in seconds'
- type: integer
- example: 180
- playlist:
- description: 'Indicates the playlist that the song was played from, if available, or empty string if not.'
- type: string
- example: 'Top 100'
- nullable: true
- is_request:
- description: 'Indicates whether the song is a listener request.'
- type: boolean
- song:
- $ref: '#/components/schemas/Api_Song'
- type: object
- Api_NowPlaying_StationRemote:
- properties:
- id:
- description: 'Mount/Remote ID number.'
- type: integer
- example: 1
- name:
- description: 'Mount point name/URL'
- type: string
- example: /radio.mp3
- url:
- description: 'Full listening URL specific to this mount'
- example: 'http://localhost:8000/radio.mp3'
- bitrate:
- description: 'Bitrate (kbps) of the broadcasted audio (if known)'
- type: integer
- example: 128
- nullable: true
- format:
- description: 'Audio encoding format of broadcasted audio (if known)'
- type: string
- example: mp3
- nullable: true
- listeners:
- $ref: '#/components/schemas/Api_NowPlaying_Listeners'
- type: object
- Api_Podcast:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasLinks'
- -
- properties:
- id:
- type: string
- nullable: true
- storage_location_id:
- type: integer
- nullable: true
- title:
- type: string
- nullable: true
- link:
- type: string
- nullable: true
- description:
- type: string
- nullable: true
- language:
- type: string
- nullable: true
- author:
- type: string
- nullable: true
- email:
- type: string
- nullable: true
- has_custom_art:
- type: boolean
- art:
- type: string
- nullable: true
- art_updated_at:
- type: integer
- categories:
- type: array
- items:
- type: string
- episodes:
- type: array
- items:
- type: string
- Api_PodcastEpisode:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasLinks'
- -
- properties:
- id:
- type: string
- nullable: true
- title:
- type: string
- nullable: true
- description:
- type: string
- nullable: true
- explicit:
- type: boolean
- publish_at:
- type: integer
- nullable: true
- has_media:
- type: boolean
- media:
- $ref: '#/components/schemas/Api_PodcastMedia'
- has_custom_art:
- type: boolean
- art:
- type: string
- nullable: true
- art_updated_at:
- type: integer
- Api_PodcastMedia:
- properties:
- id:
- type: string
- nullable: true
- original_name:
- type: string
- nullable: true
- length:
- type: number
- format: float
- length_text:
- type: string
- nullable: true
- path:
- type: string
- nullable: true
- type: object
- Api_Song:
- properties:
- id:
- description: "The song's 32-character unique identifier hash"
- type: string
- example: 9f33bbc912c19603e51be8e0987d076b
- text:
- description: 'The song title, usually "Artist - Title"'
- type: string
- example: 'Chet Porter - Aluko River'
- artist:
- description: 'The song artist.'
- type: string
- example: 'Chet Porter'
- title:
- description: 'The song title.'
- type: string
- example: 'Aluko River'
- album:
- description: 'The song album.'
- type: string
- example: 'Moving Castle'
- genre:
- description: 'The song genre.'
- type: string
- example: Rock
- isrc:
- description: 'The International Standard Recording Code (ISRC) of the file.'
- type: string
- example: US28E1600021
- lyrics:
- description: 'Lyrics to the song.'
- type: string
- example: ''
- art:
- description: 'URL to the album artwork (if available).'
- example: 'https://picsum.photos/1200/1200'
- custom_fields:
- type: array
- items:
- type: string
- example: custom_field_value
- type: object
- Api_StationOnDemand:
- properties:
- track_id:
- description: 'Track ID unique identifier'
- type: string
- example: 1
- download_url:
- description: 'URL to download/play track.'
- type: string
- example: /api/station/1/ondemand/download/1
- media:
- $ref: '#/components/schemas/Api_Song'
- playlist:
- type: string
- type: object
- Api_StationPlaylistQueue:
- properties:
- spm_id:
- description: 'ID of the StationPlaylistMedia record associating this track with the playlist'
- type: integer
- example: 1
- nullable: true
- media_id:
- description: 'ID of the StationPlaylistMedia record associating this track with the playlist'
- type: integer
- example: 1
- song_id:
- description: "The song's 32-character unique identifier hash"
- type: string
- example: 9f33bbc912c19603e51be8e0987d076b
- artist:
- description: 'The song artist.'
- type: string
- example: 'Chet Porter'
- title:
- description: 'The song title.'
- type: string
- example: 'Aluko River'
- type: object
- Api_StationQueueDetailed:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/Api_NowPlaying_StationQueue'
- -
- $ref: '#/components/schemas/HasLinks'
- -
- properties:
- sent_to_autodj:
- description: 'Indicates whether the song has been sent to the AutoDJ.'
- type: boolean
- is_played:
- description: 'Indicates whether the song has already been marked as played.'
- type: boolean
- autodj_custom_uri:
- description: 'Custom AutoDJ playback URI, if it exists.'
- type: string
- example: ''
- nullable: true
- log:
- description: 'Log entries on how the specific queue item was picked by the AutoDJ.'
- type: array
- items: { }
- nullable: true
- Api_StationRemote:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasLinks'
- -
- properties:
- id:
- type: integer
- nullable: true
- display_name:
- type: string
- example: '128kbps MP3'
- nullable: true
- is_visible_on_public_pages:
- type: boolean
- example: true
- type:
- type: string
- example: icecast
- is_editable:
- type: boolean
- example: 'true'
- enable_autodj:
- type: boolean
- example: false
- autodj_format:
- type: string
- example: mp3
- nullable: true
- autodj_bitrate:
- type: integer
- example: 128
- nullable: true
- custom_listen_url:
- type: string
- example: 'https://custom-listen-url.example.com/stream.mp3'
- nullable: true
- url:
- type: string
- example: 'https://custom-url.example.com'
- mount:
- type: string
- example: /stream.mp3
- nullable: true
- admin_password:
- type: string
- example: password
- nullable: true
- source_port:
- type: integer
- example: 8000
- nullable: true
- source_mount:
- type: string
- example: /
- nullable: true
- source_username:
- type: string
- example: source
- nullable: true
- source_password:
- type: string
- example: password
- nullable: true
- is_public:
- type: boolean
- example: false
- listeners_unique:
- description: 'The most recent number of unique listeners.'
- type: integer
- example: 10
- listeners_total:
- description: 'The most recent number of total (non-unique) listeners.'
- type: integer
- example: 12
- Api_StationRequest:
- properties:
- request_id:
- description: 'Requestable ID unique identifier'
- type: string
- example: 1
- request_url:
- description: 'URL to directly submit request'
- type: string
- example: /api/station/1/request/1
- song:
- $ref: '#/components/schemas/Api_Song'
- type: object
- Api_StationSchedule:
- properties:
- id:
- description: 'Unique identifier for this schedule entry.'
- type: integer
- example: 1
- type:
- description: 'The type of this schedule entry.'
- type: string
- enum:
- - playlist
- - streamer
- example: playlist
- name:
- description: "Either the playlist or streamer's display name."
- type: string
- example: 'Example Schedule Entry'
- title:
- description: 'The name of the event.'
- type: string
- example: 'Example Schedule Entry'
- description:
- description: 'The full name of the type and name combined.'
- type: string
- example: 'Playlist: Example Schedule Entry'
- start_timestamp:
- description: 'The start time of the schedule entry, in UNIX format.'
- type: integer
- example: 1609480800
- start:
- description: 'The start time of the schedule entry, in ISO 8601 format.'
- type: string
- example: '020-02-19T03:00:00-06:00'
- end_timestamp:
- description: 'The end time of the schedule entry, in UNIX format.'
- type: integer
- example: 1609480800
- end:
- description: 'The start time of the schedule entry, in ISO 8601 format.'
- type: string
- example: '020-02-19T05:00:00-06:00'
- is_now:
- description: 'Whether the event is currently ongoing.'
- type: boolean
- example: true
- type: object
- Api_StationServiceStatus:
- properties:
- backend_running:
- type: boolean
- example: true
- frontend_running:
- type: boolean
- example: true
- station_has_started:
- type: boolean
- example: true
- station_needs_restart:
- type: boolean
- example: true
- type: object
- Api_Status:
- properties:
- success:
- type: boolean
- example: true
- message:
- type: string
- example: 'Changes saved successfully.'
- formatted_message:
- type: string
- example: 'Changes saved successfully. '
- type: object
- Api_SystemStatus:
- properties:
- online:
- description: 'Whether the service is online or not (should always be true)'
- type: boolean
- example: true
- timestamp:
- description: 'The current UNIX timestamp'
- type: integer
- example: 1609480800
- type: object
- Api_Time:
- properties:
- timestamp:
- description: 'The current UNIX timestamp'
- type: integer
- example: 1497652397
- utc_datetime:
- type: string
- example: '2017-06-16 10:33:17'
- utc_date:
- type: string
- example: 'June 16, 2017'
- utc_time:
- type: string
- example: '10:33pm'
- utc_json:
- type: string
- example: '2012-12-25T16:30:00.000000Z'
- type: object
- HasLinks:
- properties:
- links:
- type: array
- items:
- type: string
- example: 'http://localhost/api/stations/1/queue/1'
- type: object
- Api_UploadFile:
- properties:
- path:
- description: 'The destination path of the uploaded file.'
- type: string
- example: relative/path/to/file.mp3
- file:
- description: 'The base64-encoded contents of the file to upload.'
- type: string
- example: ''
- type: object
- CustomField:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- name:
- type: string
- short_name:
- description: 'The programmatic name for the field. Can be auto-generated from the full name.'
- type: string
- auto_assign:
- description: 'An ID3v2 field to automatically assign to this value, if it exists in the media file.'
- type: string
- nullable: true
- Relay:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- base_url:
- type: string
- example: 'https://custom-url.example.com'
- name:
- type: string
- example: Relay
- nullable: true
- is_visible_on_public_pages:
- type: boolean
- example: true
- created_at:
- type: integer
- example: 1609480800
- updated_at:
- type: integer
- example: 1609480800
- Role:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- name:
- type: string
- example: 'Super Administrator'
- permissions:
- description: RolePermission>
- type: array
- items: { }
- Settings:
- properties:
- app_unique_identifier:
- type: string
- base_url:
- description: 'Site Base URL'
- type: string
- example: 'https://your.azuracast.site'
- nullable: true
- instance_name:
- description: 'AzuraCast Instance Name'
- type: string
- example: 'My AzuraCast Instance'
- nullable: true
- prefer_browser_url:
- description: 'Prefer Browser URL (If Available)'
- type: boolean
- example: 'false'
- use_radio_proxy:
- description: 'Use Web Proxy for Radio'
- type: boolean
- example: 'false'
- history_keep_days:
- description: 'Days of Playback History to Keep'
- type: integer
- always_use_ssl:
- description: 'Always Use HTTPS'
- type: boolean
- example: 'false'
- api_access_control:
- description: "API 'Access-Control-Allow-Origin' header"
- type: string
- example: '*'
- nullable: true
- enable_static_nowplaying:
- description: 'Whether to use high-performance static JSON for Now Playing data updates.'
- type: boolean
- example: 'false'
- analytics:
- description: 'Listener Analytics Collection'
- nullable: true
- check_for_updates:
- description: 'Check for Updates and Announcements'
- type: boolean
- example: 'true'
- update_results:
- description: 'Results of the latest update check.'
- type: array
- items: { }
- example: ''
- nullable: true
- update_last_run:
- description: 'The UNIX timestamp when updates were last checked.'
- type: integer
- example: 1609480800
- public_theme:
- description: 'Base Theme for Public Pages'
- example: light
- nullable: true
- hide_album_art:
- description: 'Hide Album Art on Public Pages'
- type: boolean
- example: 'false'
- homepage_redirect_url:
- description: 'Homepage Redirect URL'
- type: string
- example: 'https://example.com/'
- nullable: true
- default_album_art_url:
- description: 'Default Album Art URL'
- type: string
- example: 'https://example.com/image.jpg'
- nullable: true
- use_external_album_art_when_processing_media:
- description: 'Attempt to fetch album art from external sources when processing media.'
- type: boolean
- example: 'false'
- use_external_album_art_in_apis:
- description: 'Attempt to fetch album art from external sources in API requests.'
- type: boolean
- example: 'false'
- last_fm_api_key:
- description: 'An API key to connect to Last.fm services, if provided.'
- type: string
- example: SAMPLE-API-KEY
- nullable: true
- hide_product_name:
- description: 'Hide AzuraCast Branding on Public Pages'
- type: boolean
- example: 'false'
- public_custom_css:
- description: 'Custom CSS for Public Pages'
- type: string
- example: ''
- nullable: true
- public_custom_js:
- description: 'Custom JS for Public Pages'
- type: string
- example: ''
- nullable: true
- internal_custom_css:
- description: 'Custom CSS for Internal Pages'
- type: string
- example: ''
- nullable: true
- backup_enabled:
- description: 'Whether backup is enabled.'
- type: boolean
- example: 'false'
- backup_time_code:
- description: 'The timecode (i.e. 400 for 4:00AM) when automated backups should run.'
- type: string
- example: 400
- nullable: true
- backup_exclude_media:
- description: 'Whether to exclude media in automated backups.'
- type: boolean
- example: 'false'
- backup_keep_copies:
- description: 'Number of backups to keep, or infinite if zero/null.'
- type: integer
- example: 2
- backup_storage_location:
- description: 'The storage location ID for automated backups.'
- type: integer
- example: 1
- nullable: true
- backup_format:
- description: 'The output format for the automated backup.'
- type: string
- example: zip
- nullable: true
- backup_last_run:
- description: 'The UNIX timestamp when automated backup was last run.'
- type: integer
- example: 1609480800
- backup_last_output:
- description: 'The output of the latest automated backup task.'
- type: string
- example: ''
- nullable: true
- setup_complete_time:
- description: 'The UNIX timestamp when setup was last completed.'
- type: integer
- example: 1609480800
- sync_disabled:
- description: 'Temporarily disable all sync tasks.'
- type: boolean
- example: 'false'
- sync_last_run:
- description: 'The last run timestamp for the unified sync task.'
- type: integer
- example: 1609480800
- external_ip:
- description: "This installation's external IP."
- type: string
- example: 192.168.1.1
- nullable: true
- geolite_license_key:
- description: 'The license key for the Maxmind Geolite download.'
- type: string
- example: ''
- nullable: true
- geolite_last_run:
- description: 'The UNIX timestamp when the Maxmind Geolite was last downloaded.'
- type: integer
- example: 1609480800
- enable_advanced_features:
- description: "Whether to enable 'advanced' functionality in the system that is intended for power users."
- type: boolean
- example: false
- mail_enabled:
- description: 'Enable e-mail delivery across the application.'
- type: boolean
- example: 'true'
- mail_sender_name:
- description: 'The name of the sender of system e-mails.'
- type: string
- example: AzuraCast
- nullable: true
- mail_sender_email:
- description: 'The e-mail address of the sender of system e-mails.'
- type: string
- example: example@example.com
- nullable: true
- mail_smtp_host:
- description: 'The host to send outbound SMTP mail.'
- type: string
- example: smtp.example.com
- nullable: true
- mail_smtp_port:
- description: 'The port for sending outbound SMTP mail.'
- type: integer
- example: 465
- mail_smtp_username:
- description: 'The username when connecting to SMTP mail.'
- type: string
- example: username
- nullable: true
- mail_smtp_password:
- description: 'The password when connecting to SMTP mail.'
- type: string
- example: password
- nullable: true
- mail_smtp_secure:
- description: 'Whether to use a secure (TLS) connection when sending SMTP mail.'
- type: boolean
- example: 'true'
- avatar_service:
- description: 'The external avatar service to use when fetching avatars.'
- type: string
- example: libravatar
- nullable: true
- avatar_default_url:
- description: 'The default avatar URL.'
- type: string
- example: ''
- nullable: true
- acme_email:
- description: 'ACME (LetsEncrypt) e-mail address.'
- type: string
- example: ''
- nullable: true
- acme_domains:
- description: 'ACME (LetsEncrypt) domain name(s).'
- type: string
- example: ''
- nullable: true
- ip_source:
- description: 'IP Address Source'
- nullable: true
- type: object
- SftpUser:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- username:
- type: string
- password:
- type: string
- publicKeys:
- type: string
- nullable: true
- Station:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- name:
- description: 'The full display name of the station.'
- type: string
- example: 'AzuraTest Radio'
- short_name:
- description: 'The URL-friendly name for the station, typically auto-generated from the full station name.'
- type: string
- example: azuratest_radio
- is_enabled:
- description: "If set to 'false', prevents the station from broadcasting but leaves it in the database."
- type: boolean
- example: true
- frontend_type:
- description: 'The frontend adapter (icecast,shoutcast,remote,etc)'
- example: icecast
- frontend_config:
- description: 'An array containing station-specific frontend configuration'
- type: array
- items: { }
- backend_type:
- description: 'The backend adapter (liquidsoap,etc)'
- example: liquidsoap
- backend_config:
- description: 'An array containing station-specific backend configuration'
- type: array
- items: { }
- description:
- type: string
- example: 'A sample radio station.'
- nullable: true
- url:
- type: string
- example: 'https://demo.azuracast.com/'
- nullable: true
- genre:
- type: string
- example: Various
- nullable: true
- radio_base_dir:
- type: string
- example: /var/azuracast/stations/azuratest_radio
- nullable: true
- enable_requests:
- description: 'Whether listeners can request songs to play on this station.'
- type: boolean
- example: true
- request_delay:
- type: integer
- example: 5
- nullable: true
- request_threshold:
- type: integer
- example: 15
- nullable: true
- disconnect_deactivate_streamer:
- type: integer
- example: 0
- nullable: true
- enable_streamers:
- description: 'Whether streamers are allowed to broadcast to this station at all.'
- type: boolean
- example: false
- is_streamer_live:
- description: 'Whether a streamer is currently active on the station.'
- type: boolean
- example: false
- enable_public_page:
- description: 'Whether this station is visible as a public page and in a now-playing API response.'
- type: boolean
- example: true
- enable_on_demand:
- description: "Whether this station has a public 'on-demand' streaming and download page."
- type: boolean
- example: true
- enable_on_demand_download:
- description: "Whether the 'on-demand' page offers download capability."
- type: boolean
- example: true
- enable_hls:
- description: 'Whether HLS streaming is enabled.'
- type: boolean
- example: true
- api_history_items:
- description: "The number of 'last played' history items to show for a station in API responses."
- type: integer
- example: 5
- timezone:
- description: 'The time zone that station operations should take place in.'
- type: string
- example: UTC
- nullable: true
- branding_config:
- description: 'An array containing station-specific branding configuration'
- type: array
- items: { }
- StationHlsStream:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- name:
- type: string
- example: aac_lofi
- format:
- example: aac
- nullable: true
- bitrate:
- type: integer
- example: 128
- nullable: true
- StationMedia:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- $ref: '#/components/schemas/HasSongFields'
- -
- properties:
- unique_id:
- description: 'A unique identifier associated with this record.'
- type: string
- example: 69b536afc7ebbf16457b8645
- nullable: true
- album:
- description: "The name of the media file's album."
- type: string
- example: 'Test Album'
- nullable: true
- genre:
- description: 'The genre of the media file.'
- type: string
- example: Rock
- nullable: true
- lyrics:
- description: 'Full lyrics of the track, if available.'
- type: string
- example: '...Never gonna give you up...'
- nullable: true
- isrc:
- description: 'The track ISRC (International Standard Recording Code), used for licensing purposes.'
- type: string
- example: GBARL0600786
- nullable: true
- length:
- description: 'The song duration in seconds.'
- type: number
- format: float
- example: 240
- nullable: true
- length_text:
- description: 'The formatted song duration (in mm:ss format)'
- type: string
- example: '4:00'
- nullable: true
- path:
- description: 'The relative path of the media file.'
- type: string
- example: test.mp3
- mtime:
- description: 'The UNIX timestamp when the database was last modified.'
- type: integer
- example: 1609480800
- nullable: true
- amplify:
- description: 'The amount of amplification (in dB) to be applied to the radio source (liq_amplify)'
- type: number
- format: float
- example: -14
- nullable: true
- fade_overlap:
- description: 'The length of time (in seconds) before the next song starts in the fade (liq_start_next)'
- type: number
- format: float
- example: 2
- nullable: true
- fade_in:
- description: 'The length of time (in seconds) to fade in the next track (liq_fade_in)'
- type: number
- format: float
- example: 3
- nullable: true
- fade_out:
- description: 'The length of time (in seconds) to fade out the previous track (liq_fade_out)'
- type: number
- format: float
- example: 3
- nullable: true
- cue_in:
- description: 'The length of time (in seconds) from the start of the track to start playing (liq_cue_in)'
- type: number
- format: float
- example: 30
- nullable: true
- cue_out:
- description: 'The length of time (in seconds) from the CUE-IN of the track to stop playing (liq_cue_out)'
- type: number
- format: float
- example: 30
- nullable: true
- art_updated_at:
- description: 'The latest time (UNIX timestamp) when album art was updated.'
- type: integer
- example: 1609480800
- playlists:
- description: StationPlaylistMedia>
- type: array
- items: { }
- StationMount:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- name:
- type: string
- example: /radio.mp3
- display_name:
- type: string
- example: '128kbps MP3'
- nullable: true
- is_visible_on_public_pages:
- type: boolean
- example: true
- is_default:
- type: boolean
- example: false
- is_public:
- type: boolean
- example: false
- fallback_mount:
- type: string
- example: /error.mp3
- nullable: true
- relay_url:
- type: string
- example: 'https://radio.example.com:8000/radio.mp3'
- nullable: true
- authhash:
- type: string
- example: ''
- nullable: true
- max_listener_duration:
- type: integer
- example: 43200
- enable_autodj:
- type: boolean
- example: true
- autodj_format:
- example: mp3
- nullable: true
- autodj_bitrate:
- type: integer
- example: 128
- nullable: true
- custom_listen_url:
- type: string
- example: 'https://custom-listen-url.example.com/stream.mp3'
- nullable: true
- frontend_config:
- type: array
- items: { }
- listeners_unique:
- description: 'The most recent number of unique listeners.'
- type: integer
- example: 10
- listeners_total:
- description: 'The most recent number of total (non-unique) listeners.'
- type: integer
- example: 12
- StationPlaylist:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- name:
- type: string
- example: 'Test Playlist'
- type:
- example: default
- source:
- example: songs
- order:
- example: shuffle
- remote_url:
- type: string
- example: 'https://remote-url.example.com/stream.mp3'
- nullable: true
- remote_type:
- example: stream
- nullable: true
- remote_buffer:
- description: 'The total time (in seconds) that Liquidsoap should buffer remote URL streams.'
- type: integer
- example: 0
- is_enabled:
- type: boolean
- example: true
- is_jingle:
- description: 'If yes, do not send jingle metadata to AutoDJ or trigger web hooks.'
- type: boolean
- example: false
- play_per_songs:
- type: integer
- example: 5
- play_per_minutes:
- type: integer
- example: 120
- play_per_hour_minute:
- type: integer
- example: 15
- weight:
- type: integer
- example: 3
- include_in_requests:
- type: boolean
- example: true
- include_in_on_demand:
- description: "Whether this playlist's media is included in 'on demand' download/streaming if enabled."
- type: boolean
- example: true
- backend_options:
- type: string
- example: 'interrupt,loop_once,single_track,merge'
- nullable: true
- avoid_duplicates:
- type: boolean
- example: true
- schedule_items:
- description: StationSchedule>
- type: array
- items: { }
- StationSchedule:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- start_time:
- type: integer
- example: 900
- end_time:
- type: integer
- example: 2200
- days:
- description: 'Array of ISO-8601 days (1 for Monday, 7 for Sunday)'
- type: string
- example: '0,1,2,3'
- nullable: true
- loop_once:
- type: boolean
- example: false
- StationStreamer:
- description: 'Station streamers (DJ accounts) allowed to broadcast to a station.'
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- streamer_username:
- type: string
- example: dj_test
- streamer_password:
- type: string
- example: ''
- display_name:
- type: string
- example: 'Test DJ'
- nullable: true
- comments:
- type: string
- example: 'This is a test DJ account.'
- nullable: true
- is_active:
- type: boolean
- example: true
- enforce_schedule:
- type: boolean
- example: false
- reactivate_at:
- type: integer
- example: 1609480800
- nullable: true
- schedule_items:
- description: StationSchedule>
- type: array
- items: { }
- StationStreamerBroadcast:
- description: 'Each individual broadcast associated with a streamer.'
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- StationWebhook:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- name:
- description: 'The nickname of the webhook connector.'
- type: string
- example: 'Twitter Post'
- nullable: true
- type:
- description: 'The type of webhook connector to use.'
- example: twitter
- is_enabled:
- type: boolean
- example: true
- triggers:
- description: 'List of events that should trigger the webhook notification.'
- type: array
- items: { }
- config:
- description: 'Detailed webhook configuration (if applicable)'
- type: array
- items: { }
- metadata:
- description: 'Internal details used by the webhook to preserve state.'
- type: array
- items: { }
- HasAutoIncrementId:
- properties:
- id:
- type: integer
- nullable: true
- type: object
- HasSongFields:
- properties:
- song_id:
- type: string
- text:
- type: string
- nullable: true
- artist:
- type: string
- nullable: true
- title:
- type: string
- nullable: true
- type: object
- HasUniqueId:
- properties:
- id:
- type: string
- nullable: true
- type: object
- User:
- type: object
- allOf:
- -
- $ref: '#/components/schemas/HasAutoIncrementId'
- -
- properties:
- email:
- type: string
- example: demo@azuracast.com
- new_password:
- type: string
- example: ''
- nullable: true
- name:
- type: string
- example: 'Demo Account'
- nullable: true
- locale:
- type: string
- example: en_US
- nullable: true
- show_24_hour_time:
- type: boolean
- example: true
- nullable: true
- two_factor_secret:
- type: string
- example: A1B2C3D4
- nullable: true
- created_at:
- type: integer
- example: 1609480800
- updated_at:
- type: integer
- example: 1609480800
- roles:
- description: Role>
- type: array
- items: { }
- responses:
- Success:
- description: Success
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Status'
- AccessDenied:
- description: 'Access denied.'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Error'
- RecordNotFound:
- description: 'Record not found.'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Error'
- GenericError:
- description: 'A generic exception has occurred.'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Api_Error'
- parameters:
- StationIdRequired:
- name: station_id
- in: path
- required: true
- schema:
- anyOf:
- -
- type: integer
- format: int64
- -
- type: string
- format: string
- securitySchemes:
- ApiKey:
- type: apiKey
- name: X-API-Key
- in: header
-tags:
- -
- name: 'Now Playing'
- description: 'Endpoints that provide full summaries of the current state of stations.'
- -
- name: 'Stations: General'
- -
- name: 'Stations: Broadcasting'
- -
- name: 'Stations: Song Requests'
- -
- name: 'Stations: Service Control'
- -
- name: 'Stations: Automation'
- -
- name: 'Stations: History'
- -
- name: 'Stations: HLS Streams'
- -
- name: 'Stations: Listeners'
- -
- name: 'Stations: Schedules'
- -
- name: 'Stations: Media'
- -
- name: 'Stations: Mount Points'
- -
- name: 'Stations: Playlists'
- -
- name: 'Stations: Podcasts'
- -
- name: 'Stations: Queue'
- -
- name: 'Stations: Remote Relays'
- -
- name: 'Stations: SFTP Users'
- -
- name: 'Stations: Streamers/DJs'
- -
- name: 'Stations: Web Hooks'
- -
- name: 'Administration: Custom Fields'
- -
- name: 'Administration: Users'
- -
- name: 'Administration: Relays'
- -
- name: 'Administration: Roles'
- -
- name: 'Administration: Settings'
- -
- name: 'Administration: Stations'
- -
- name: 'Administration: Storage Locations'
- -
- name: Miscellaneous
-externalDocs:
- description: 'AzuraCast on GitHub'
- url: 'https://github.com/AzuraCast/AzuraCast'
diff --git a/web/static/api/swagger-ui-bundle.js b/web/static/api/swagger-ui-bundle.js
deleted file mode 100644
index 2cbe107db..000000000
--- a/web/static/api/swagger-ui-bundle.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}(this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist",n(n.s=481)}([function(e,t,n){"use strict";e.exports=n(555)},function(e,t,n){e.exports=function(){"use strict";var e=Array.prototype.slice;function t(e,t){t&&(e.prototype=Object.create(t.prototype)),e.prototype.constructor=e}function n(e){return i(e)?e:J(e)}function r(e){return u(e)?e:K(e)}function o(e){return s(e)?e:Y(e)}function a(e){return i(e)&&!c(e)?e:G(e)}function i(e){return!(!e||!e[f])}function u(e){return!(!e||!e[p])}function s(e){return!(!e||!e[h])}function c(e){return u(e)||s(e)}function l(e){return!(!e||!e[d])}t(r,n),t(o,n),t(a,n),n.isIterable=i,n.isKeyed=u,n.isIndexed=s,n.isAssociative=c,n.isOrdered=l,n.Keyed=r,n.Indexed=o,n.Set=a;var f="@@__IMMUTABLE_ITERABLE__@@",p="@@__IMMUTABLE_KEYED__@@",h="@@__IMMUTABLE_INDEXED__@@",d="@@__IMMUTABLE_ORDERED__@@",m="delete",v=5,g=1<>>0;if(""+n!==t||4294967295===n)return NaN;t=n}return t<0?A(e)+t:t}function C(){return!0}function j(e,t,n){return(0===e||void 0!==n&&e<=-n)&&(void 0===t||void 0!==n&&t>=n)}function T(e,t){return N(e,t,0)}function I(e,t){return N(e,t,t)}function N(e,t,n){return void 0===e?n:e<0?Math.max(0,t+e):void 0===t?e:Math.min(t,e)}var P=0,M=1,R=2,D="function"==typeof Symbol&&Symbol.iterator,L="@@iterator",B=D||L;function F(e){this.next=e}function z(e,t,n,r){var o=0===e?t:1===e?n:[t,n];return r?r.value=o:r={value:o,done:!1},r}function q(){return{value:void 0,done:!0}}function U(e){return!!H(e)}function V(e){return e&&"function"==typeof e.next}function W(e){var t=H(e);return t&&t.call(e)}function H(e){var t=e&&(D&&e[D]||e[L]);if("function"==typeof t)return t}function $(e){return e&&"number"==typeof e.length}function J(e){return null==e?ie():i(e)?e.toSeq():ce(e)}function K(e){return null==e?ie().toKeyedSeq():i(e)?u(e)?e.toSeq():e.fromEntrySeq():ue(e)}function Y(e){return null==e?ie():i(e)?u(e)?e.entrySeq():e.toIndexedSeq():se(e)}function G(e){return(null==e?ie():i(e)?u(e)?e.entrySeq():e:se(e)).toSetSeq()}F.prototype.toString=function(){return"[Iterator]"},F.KEYS=P,F.VALUES=M,F.ENTRIES=R,F.prototype.inspect=F.prototype.toSource=function(){return this.toString()},F.prototype[B]=function(){return this},t(J,n),J.of=function(){return J(arguments)},J.prototype.toSeq=function(){return this},J.prototype.toString=function(){return this.__toString("Seq {","}")},J.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},J.prototype.__iterate=function(e,t){return fe(this,e,t,!0)},J.prototype.__iterator=function(e,t){return pe(this,e,t,!0)},t(K,J),K.prototype.toKeyedSeq=function(){return this},t(Y,J),Y.of=function(){return Y(arguments)},Y.prototype.toIndexedSeq=function(){return this},Y.prototype.toString=function(){return this.__toString("Seq [","]")},Y.prototype.__iterate=function(e,t){return fe(this,e,t,!1)},Y.prototype.__iterator=function(e,t){return pe(this,e,t,!1)},t(G,J),G.of=function(){return G(arguments)},G.prototype.toSetSeq=function(){return this},J.isSeq=ae,J.Keyed=K,J.Set=G,J.Indexed=Y;var Q,Z,X,ee="@@__IMMUTABLE_SEQ__@@";function te(e){this._array=e,this.size=e.length}function ne(e){var t=Object.keys(e);this._object=e,this._keys=t,this.size=t.length}function re(e){this._iterable=e,this.size=e.length||e.size}function oe(e){this._iterator=e,this._iteratorCache=[]}function ae(e){return!(!e||!e[ee])}function ie(){return Q||(Q=new te([]))}function ue(e){var t=Array.isArray(e)?new te(e).fromEntrySeq():V(e)?new oe(e).fromEntrySeq():U(e)?new re(e).fromEntrySeq():"object"==typeof e?new ne(e):void 0;if(!t)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+e);return t}function se(e){var t=le(e);if(!t)throw new TypeError("Expected Array or iterable object of values: "+e);return t}function ce(e){var t=le(e)||"object"==typeof e&&new ne(e);if(!t)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+e);return t}function le(e){return $(e)?new te(e):V(e)?new oe(e):U(e)?new re(e):void 0}function fe(e,t,n,r){var o=e._cache;if(o){for(var a=o.length-1,i=0;i<=a;i++){var u=o[n?a-i:i];if(!1===t(u[1],r?u[0]:i,e))return i+1}return i}return e.__iterateUncached(t,n)}function pe(e,t,n,r){var o=e._cache;if(o){var a=o.length-1,i=0;return new F((function(){var e=o[n?a-i:i];return i++>a?q():z(t,r?e[0]:i-1,e[1])}))}return e.__iteratorUncached(t,n)}function he(e,t){return t?de(t,e,"",{"":e}):me(e)}function de(e,t,n,r){return Array.isArray(t)?e.call(r,n,Y(t).map((function(n,r){return de(e,n,r,t)}))):ve(t)?e.call(r,n,K(t).map((function(n,r){return de(e,n,r,t)}))):t}function me(e){return Array.isArray(e)?Y(e).map(me).toList():ve(e)?K(e).map(me).toMap():e}function ve(e){return e&&(e.constructor===Object||void 0===e.constructor)}function ge(e,t){if(e===t||e!=e&&t!=t)return!0;if(!e||!t)return!1;if("function"==typeof e.valueOf&&"function"==typeof t.valueOf){if((e=e.valueOf())===(t=t.valueOf())||e!=e&&t!=t)return!0;if(!e||!t)return!1}return!("function"!=typeof e.equals||"function"!=typeof t.equals||!e.equals(t))}function ye(e,t){if(e===t)return!0;if(!i(t)||void 0!==e.size&&void 0!==t.size&&e.size!==t.size||void 0!==e.__hash&&void 0!==t.__hash&&e.__hash!==t.__hash||u(e)!==u(t)||s(e)!==s(t)||l(e)!==l(t))return!1;if(0===e.size&&0===t.size)return!0;var n=!c(e);if(l(e)){var r=e.entries();return t.every((function(e,t){var o=r.next().value;return o&&ge(o[1],e)&&(n||ge(o[0],t))}))&&r.next().done}var o=!1;if(void 0===e.size)if(void 0===t.size)"function"==typeof e.cacheResult&&e.cacheResult();else{o=!0;var a=e;e=t,t=a}var f=!0,p=t.__iterate((function(t,r){if(n?!e.has(t):o?!ge(t,e.get(r,b)):!ge(e.get(r,b),t))return f=!1,!1}));return f&&e.size===p}function be(e,t){if(!(this instanceof be))return new be(e,t);if(this._value=e,this.size=void 0===t?1/0:Math.max(0,t),0===this.size){if(Z)return Z;Z=this}}function we(e,t){if(!e)throw new Error(t)}function xe(e,t,n){if(!(this instanceof xe))return new xe(e,t,n);if(we(0!==n,"Cannot step a Range by 0"),e=e||0,void 0===t&&(t=1/0),n=void 0===n?1:Math.abs(n),tr?q():z(e,o,n[t?r-o++:o++])}))},t(ne,K),ne.prototype.get=function(e,t){return void 0===t||this.has(e)?this._object[e]:t},ne.prototype.has=function(e){return this._object.hasOwnProperty(e)},ne.prototype.__iterate=function(e,t){for(var n=this._object,r=this._keys,o=r.length-1,a=0;a<=o;a++){var i=r[t?o-a:a];if(!1===e(n[i],i,this))return a+1}return a},ne.prototype.__iterator=function(e,t){var n=this._object,r=this._keys,o=r.length-1,a=0;return new F((function(){var i=r[t?o-a:a];return a++>o?q():z(e,i,n[i])}))},ne.prototype[d]=!0,t(re,Y),re.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);var n=W(this._iterable),r=0;if(V(n))for(var o;!(o=n.next()).done&&!1!==e(o.value,r++,this););return r},re.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var n=W(this._iterable);if(!V(n))return new F(q);var r=0;return new F((function(){var t=n.next();return t.done?t:z(e,r++,t.value)}))},t(oe,Y),oe.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);for(var n,r=this._iterator,o=this._iteratorCache,a=0;a=r.length){var t=n.next();if(t.done)return t;r[o]=t.value}return z(e,o,r[o++])}))},t(be,Y),be.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},be.prototype.get=function(e,t){return this.has(e)?this._value:t},be.prototype.includes=function(e){return ge(this._value,e)},be.prototype.slice=function(e,t){var n=this.size;return j(e,t,n)?this:new be(this._value,I(t,n)-T(e,n))},be.prototype.reverse=function(){return this},be.prototype.indexOf=function(e){return ge(this._value,e)?0:-1},be.prototype.lastIndexOf=function(e){return ge(this._value,e)?this.size:-1},be.prototype.__iterate=function(e,t){for(var n=0;n=0&&t=0&&nn?q():z(e,a++,i)}))},xe.prototype.equals=function(e){return e instanceof xe?this._start===e._start&&this._end===e._end&&this._step===e._step:ye(this,e)},t(_e,n),t(Ee,_e),t(Se,_e),t(ke,_e),_e.Keyed=Ee,_e.Indexed=Se,_e.Set=ke;var Ae="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(e,t){var n=65535&(e|=0),r=65535&(t|=0);return n*r+((e>>>16)*r+n*(t>>>16)<<16>>>0)|0};function Oe(e){return e>>>1&1073741824|3221225471&e}function Ce(e){if(!1===e||null==e)return 0;if("function"==typeof e.valueOf&&(!1===(e=e.valueOf())||null==e))return 0;if(!0===e)return 1;var t=typeof e;if("number"===t){if(e!=e||e===1/0)return 0;var n=0|e;for(n!==e&&(n^=4294967295*e);e>4294967295;)n^=e/=4294967295;return Oe(n)}if("string"===t)return e.length>Fe?je(e):Te(e);if("function"==typeof e.hashCode)return e.hashCode();if("object"===t)return Ie(e);if("function"==typeof e.toString)return Te(e.toString());throw new Error("Value type "+t+" cannot be hashed.")}function je(e){var t=Ue[e];return void 0===t&&(t=Te(e),qe===ze&&(qe=0,Ue={}),qe++,Ue[e]=t),t}function Te(e){for(var t=0,n=0;n0)switch(e.nodeType){case 1:return e.uniqueID;case 9:return e.documentElement&&e.documentElement.uniqueID}}var Re,De="function"==typeof WeakMap;De&&(Re=new WeakMap);var Le=0,Be="__immutablehash__";"function"==typeof Symbol&&(Be=Symbol(Be));var Fe=16,ze=255,qe=0,Ue={};function Ve(e){we(e!==1/0,"Cannot perform this action with an infinite size.")}function We(e){return null==e?ot():He(e)&&!l(e)?e:ot().withMutations((function(t){var n=r(e);Ve(n.size),n.forEach((function(e,n){return t.set(n,e)}))}))}function He(e){return!(!e||!e[Je])}t(We,Ee),We.of=function(){var t=e.call(arguments,0);return ot().withMutations((function(e){for(var n=0;n=t.length)throw new Error("Missing value for key: "+t[n]);e.set(t[n],t[n+1])}}))},We.prototype.toString=function(){return this.__toString("Map {","}")},We.prototype.get=function(e,t){return this._root?this._root.get(0,void 0,e,t):t},We.prototype.set=function(e,t){return at(this,e,t)},We.prototype.setIn=function(e,t){return this.updateIn(e,b,(function(){return t}))},We.prototype.remove=function(e){return at(this,e,b)},We.prototype.deleteIn=function(e){return this.updateIn(e,(function(){return b}))},We.prototype.update=function(e,t,n){return 1===arguments.length?e(this):this.updateIn([e],t,n)},We.prototype.updateIn=function(e,t,n){n||(n=t,t=void 0);var r=vt(this,_n(e),t,n);return r===b?void 0:r},We.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):ot()},We.prototype.merge=function(){return pt(this,void 0,arguments)},We.prototype.mergeWith=function(t){return pt(this,t,e.call(arguments,1))},We.prototype.mergeIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return"function"==typeof e.merge?e.merge.apply(e,n):n[n.length-1]}))},We.prototype.mergeDeep=function(){return pt(this,ht,arguments)},We.prototype.mergeDeepWith=function(t){var n=e.call(arguments,1);return pt(this,dt(t),n)},We.prototype.mergeDeepIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return"function"==typeof e.mergeDeep?e.mergeDeep.apply(e,n):n[n.length-1]}))},We.prototype.sort=function(e){return Ut(fn(this,e))},We.prototype.sortBy=function(e,t){return Ut(fn(this,t,e))},We.prototype.withMutations=function(e){var t=this.asMutable();return e(t),t.wasAltered()?t.__ensureOwner(this.__ownerID):this},We.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new S)},We.prototype.asImmutable=function(){return this.__ensureOwner()},We.prototype.wasAltered=function(){return this.__altered},We.prototype.__iterator=function(e,t){return new et(this,e,t)},We.prototype.__iterate=function(e,t){var n=this,r=0;return this._root&&this._root.iterate((function(t){return r++,e(t[1],t[0],n)}),t),r},We.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?rt(this.size,this._root,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},We.isMap=He;var $e,Je="@@__IMMUTABLE_MAP__@@",Ke=We.prototype;function Ye(e,t){this.ownerID=e,this.entries=t}function Ge(e,t,n){this.ownerID=e,this.bitmap=t,this.nodes=n}function Qe(e,t,n){this.ownerID=e,this.count=t,this.nodes=n}function Ze(e,t,n){this.ownerID=e,this.keyHash=t,this.entries=n}function Xe(e,t,n){this.ownerID=e,this.keyHash=t,this.entry=n}function et(e,t,n){this._type=t,this._reverse=n,this._stack=e._root&&nt(e._root)}function tt(e,t){return z(e,t[0],t[1])}function nt(e,t){return{node:e,index:0,__prev:t}}function rt(e,t,n,r){var o=Object.create(Ke);return o.size=e,o._root=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function ot(){return $e||($e=rt(0))}function at(e,t,n){var r,o;if(e._root){var a=_(w),i=_(x);if(r=it(e._root,e.__ownerID,0,void 0,t,n,a,i),!i.value)return e;o=e.size+(a.value?n===b?-1:1:0)}else{if(n===b)return e;o=1,r=new Ye(e.__ownerID,[[t,n]])}return e.__ownerID?(e.size=o,e._root=r,e.__hash=void 0,e.__altered=!0,e):r?rt(o,r):ot()}function it(e,t,n,r,o,a,i,u){return e?e.update(t,n,r,o,a,i,u):a===b?e:(E(u),E(i),new Xe(t,r,[o,a]))}function ut(e){return e.constructor===Xe||e.constructor===Ze}function st(e,t,n,r,o){if(e.keyHash===r)return new Ze(t,r,[e.entry,o]);var a,i=(0===n?e.keyHash:e.keyHash>>>n)&y,u=(0===n?r:r>>>n)&y;return new Ge(t,1<>>=1)i[u]=1&n?t[a++]:void 0;return i[r]=o,new Qe(e,a+1,i)}function pt(e,t,n){for(var o=[],a=0;a>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135,e+=e>>8,127&(e+=e>>16)}function yt(e,t,n,r){var o=r?e:k(e);return o[t]=n,o}function bt(e,t,n,r){var o=e.length+1;if(r&&t+1===o)return e[t]=n,e;for(var a=new Array(o),i=0,u=0;u=xt)return ct(e,s,r,o);var p=e&&e===this.ownerID,h=p?s:k(s);return f?u?c===l-1?h.pop():h[c]=h.pop():h[c]=[r,o]:h.push([r,o]),p?(this.entries=h,this):new Ye(e,h)}},Ge.prototype.get=function(e,t,n,r){void 0===t&&(t=Ce(n));var o=1<<((0===e?t:t>>>e)&y),a=this.bitmap;return 0==(a&o)?r:this.nodes[gt(a&o-1)].get(e+v,t,n,r)},Ge.prototype.update=function(e,t,n,r,o,a,i){void 0===n&&(n=Ce(r));var u=(0===t?n:n>>>t)&y,s=1<=_t)return ft(e,p,c,u,d);if(l&&!d&&2===p.length&&ut(p[1^f]))return p[1^f];if(l&&d&&1===p.length&&ut(d))return d;var m=e&&e===this.ownerID,g=l?d?c:c^s:c|s,w=l?d?yt(p,f,d,m):wt(p,f,m):bt(p,f,d,m);return m?(this.bitmap=g,this.nodes=w,this):new Ge(e,g,w)},Qe.prototype.get=function(e,t,n,r){void 0===t&&(t=Ce(n));var o=(0===e?t:t>>>e)&y,a=this.nodes[o];return a?a.get(e+v,t,n,r):r},Qe.prototype.update=function(e,t,n,r,o,a,i){void 0===n&&(n=Ce(r));var u=(0===t?n:n>>>t)&y,s=o===b,c=this.nodes,l=c[u];if(s&&!l)return this;var f=it(l,e,t+v,n,r,o,a,i);if(f===l)return this;var p=this.count;if(l){if(!f&&--p0&&r=0&&e>>t&y;if(r>=this.array.length)return new Ct([],e);var o,a=0===r;if(t>0){var i=this.array[r];if((o=i&&i.removeBefore(e,t-v,n))===i&&a)return this}if(a&&!o)return this;var u=Lt(this,e);if(!a)for(var s=0;s>>t&y;if(o>=this.array.length)return this;if(t>0){var a=this.array[o];if((r=a&&a.removeAfter(e,t-v,n))===a&&o===this.array.length-1)return this}var i=Lt(this,e);return i.array.splice(o+1),r&&(i.array[o]=r),i};var jt,Tt,It={};function Nt(e,t){var n=e._origin,r=e._capacity,o=qt(r),a=e._tail;return i(e._root,e._level,0);function i(e,t,n){return 0===t?u(e,n):s(e,t,n)}function u(e,i){var u=i===o?a&&a.array:e&&e.array,s=i>n?0:n-i,c=r-i;return c>g&&(c=g),function(){if(s===c)return It;var e=t?--c:s++;return u&&u[e]}}function s(e,o,a){var u,s=e&&e.array,c=a>n?0:n-a>>o,l=1+(r-a>>o);return l>g&&(l=g),function(){for(;;){if(u){var e=u();if(e!==It)return e;u=null}if(c===l)return It;var n=t?--l:c++;u=i(s&&s[n],o-v,a+(n<=e.size||t<0)return e.withMutations((function(e){t<0?Ft(e,t).set(0,n):Ft(e,0,t+1).set(t,n)}));t+=e._origin;var r=e._tail,o=e._root,a=_(x);return t>=qt(e._capacity)?r=Dt(r,e.__ownerID,0,t,n,a):o=Dt(o,e.__ownerID,e._level,t,n,a),a.value?e.__ownerID?(e._root=o,e._tail=r,e.__hash=void 0,e.__altered=!0,e):Pt(e._origin,e._capacity,e._level,o,r):e}function Dt(e,t,n,r,o,a){var i,u=r>>>n&y,s=e&&u0){var c=e&&e.array[u],l=Dt(c,t,n-v,r,o,a);return l===c?e:((i=Lt(e,t)).array[u]=l,i)}return s&&e.array[u]===o?e:(E(a),i=Lt(e,t),void 0===o&&u===i.array.length-1?i.array.pop():i.array[u]=o,i)}function Lt(e,t){return t&&e&&t===e.ownerID?e:new Ct(e?e.array.slice():[],t)}function Bt(e,t){if(t>=qt(e._capacity))return e._tail;if(t<1<0;)n=n.array[t>>>r&y],r-=v;return n}}function Ft(e,t,n){void 0!==t&&(t|=0),void 0!==n&&(n|=0);var r=e.__ownerID||new S,o=e._origin,a=e._capacity,i=o+t,u=void 0===n?a:n<0?a+n:o+n;if(i===o&&u===a)return e;if(i>=u)return e.clear();for(var s=e._level,c=e._root,l=0;i+l<0;)c=new Ct(c&&c.array.length?[void 0,c]:[],r),l+=1<<(s+=v);l&&(i+=l,o+=l,u+=l,a+=l);for(var f=qt(a),p=qt(u);p>=1<f?new Ct([],r):h;if(h&&p>f&&iv;g-=v){var b=f>>>g&y;m=m.array[b]=Lt(m.array[b],r)}m.array[f>>>v&y]=h}if(u =p)i-=p,u-=p,s=v,c=null,d=d&&d.removeBefore(r,0,i);else if(i>o||p>>s&y;if(w!==p>>>s&y)break;w&&(l+=(1<o&&(c=c.removeBefore(r,s,i-l)),c&&pa&&(a=c.size),i(s)||(c=c.map((function(e){return he(e)}))),r.push(c)}return a>e.size&&(e=e.setSize(a)),mt(e,t,r)}function qt(e){return e>>v<=g&&i.size>=2*a.size?(r=(o=i.filter((function(e,t){return void 0!==e&&u!==t}))).toKeyedSeq().map((function(e){return e[0]})).flip().toMap(),e.__ownerID&&(r.__ownerID=o.__ownerID=e.__ownerID)):(r=a.remove(t),o=u===i.size-1?i.pop():i.set(u,void 0))}else if(s){if(n===i.get(u)[1])return e;r=a,o=i.set(u,[t,n])}else r=a.set(t,i.size),o=i.set(i.size,[t,n]);return e.__ownerID?(e.size=r.size,e._map=r,e._list=o,e.__hash=void 0,e):Wt(r,o)}function Jt(e,t){this._iter=e,this._useKeys=t,this.size=e.size}function Kt(e){this._iter=e,this.size=e.size}function Yt(e){this._iter=e,this.size=e.size}function Gt(e){this._iter=e,this.size=e.size}function Qt(e){var t=bn(e);return t._iter=e,t.size=e.size,t.flip=function(){return e},t.reverse=function(){var t=e.reverse.apply(this);return t.flip=function(){return e.reverse()},t},t.has=function(t){return e.includes(t)},t.includes=function(t){return e.has(t)},t.cacheResult=wn,t.__iterateUncached=function(t,n){var r=this;return e.__iterate((function(e,n){return!1!==t(n,e,r)}),n)},t.__iteratorUncached=function(t,n){if(t===R){var r=e.__iterator(t,n);return new F((function(){var e=r.next();if(!e.done){var t=e.value[0];e.value[0]=e.value[1],e.value[1]=t}return e}))}return e.__iterator(t===M?P:M,n)},t}function Zt(e,t,n){var r=bn(e);return r.size=e.size,r.has=function(t){return e.has(t)},r.get=function(r,o){var a=e.get(r,b);return a===b?o:t.call(n,a,r,e)},r.__iterateUncached=function(r,o){var a=this;return e.__iterate((function(e,o,i){return!1!==r(t.call(n,e,o,i),o,a)}),o)},r.__iteratorUncached=function(r,o){var a=e.__iterator(R,o);return new F((function(){var o=a.next();if(o.done)return o;var i=o.value,u=i[0];return z(r,u,t.call(n,i[1],u,e),o)}))},r}function Xt(e,t){var n=bn(e);return n._iter=e,n.size=e.size,n.reverse=function(){return e},e.flip&&(n.flip=function(){var t=Qt(e);return t.reverse=function(){return e.flip()},t}),n.get=function(n,r){return e.get(t?n:-1-n,r)},n.has=function(n){return e.has(t?n:-1-n)},n.includes=function(t){return e.includes(t)},n.cacheResult=wn,n.__iterate=function(t,n){var r=this;return e.__iterate((function(e,n){return t(e,n,r)}),!n)},n.__iterator=function(t,n){return e.__iterator(t,!n)},n}function en(e,t,n,r){var o=bn(e);return r&&(o.has=function(r){var o=e.get(r,b);return o!==b&&!!t.call(n,o,r,e)},o.get=function(r,o){var a=e.get(r,b);return a!==b&&t.call(n,a,r,e)?a:o}),o.__iterateUncached=function(o,a){var i=this,u=0;return e.__iterate((function(e,a,s){if(t.call(n,e,a,s))return u++,o(e,r?a:u-1,i)}),a),u},o.__iteratorUncached=function(o,a){var i=e.__iterator(R,a),u=0;return new F((function(){for(;;){var a=i.next();if(a.done)return a;var s=a.value,c=s[0],l=s[1];if(t.call(n,l,c,e))return z(o,r?c:u++,l,a)}}))},o}function tn(e,t,n){var r=We().asMutable();return e.__iterate((function(o,a){r.update(t.call(n,o,a,e),0,(function(e){return e+1}))})),r.asImmutable()}function nn(e,t,n){var r=u(e),o=(l(e)?Ut():We()).asMutable();e.__iterate((function(a,i){o.update(t.call(n,a,i,e),(function(e){return(e=e||[]).push(r?[i,a]:a),e}))}));var a=yn(e);return o.map((function(t){return mn(e,a(t))}))}function rn(e,t,n,r){var o=e.size;if(void 0!==t&&(t|=0),void 0!==n&&(n===1/0?n=o:n|=0),j(t,n,o))return e;var a=T(t,o),i=I(n,o);if(a!=a||i!=i)return rn(e.toSeq().cacheResult(),t,n,r);var u,s=i-a;s==s&&(u=s<0?0:s);var c=bn(e);return c.size=0===u?u:e.size&&u||void 0,!r&&ae(e)&&u>=0&&(c.get=function(t,n){return(t=O(this,t))>=0&&tu)return q();var e=o.next();return r||t===M?e:z(t,s-1,t===P?void 0:e.value[1],e)}))},c}function on(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var a=this;if(o)return this.cacheResult().__iterate(r,o);var i=0;return e.__iterate((function(e,o,u){return t.call(n,e,o,u)&&++i&&r(e,o,a)})),i},r.__iteratorUncached=function(r,o){var a=this;if(o)return this.cacheResult().__iterator(r,o);var i=e.__iterator(R,o),u=!0;return new F((function(){if(!u)return q();var e=i.next();if(e.done)return e;var o=e.value,s=o[0],c=o[1];return t.call(n,c,s,a)?r===R?e:z(r,s,c,e):(u=!1,q())}))},r}function an(e,t,n,r){var o=bn(e);return o.__iterateUncached=function(o,a){var i=this;if(a)return this.cacheResult().__iterate(o,a);var u=!0,s=0;return e.__iterate((function(e,a,c){if(!u||!(u=t.call(n,e,a,c)))return s++,o(e,r?a:s-1,i)})),s},o.__iteratorUncached=function(o,a){var i=this;if(a)return this.cacheResult().__iterator(o,a);var u=e.__iterator(R,a),s=!0,c=0;return new F((function(){var e,a,l;do{if((e=u.next()).done)return r||o===M?e:z(o,c++,o===P?void 0:e.value[1],e);var f=e.value;a=f[0],l=f[1],s&&(s=t.call(n,l,a,i))}while(s);return o===R?e:z(o,a,l,e)}))},o}function un(e,t){var n=u(e),o=[e].concat(t).map((function(e){return i(e)?n&&(e=r(e)):e=n?ue(e):se(Array.isArray(e)?e:[e]),e})).filter((function(e){return 0!==e.size}));if(0===o.length)return e;if(1===o.length){var a=o[0];if(a===e||n&&u(a)||s(e)&&s(a))return a}var c=new te(o);return n?c=c.toKeyedSeq():s(e)||(c=c.toSetSeq()),(c=c.flatten(!0)).size=o.reduce((function(e,t){if(void 0!==e){var n=t.size;if(void 0!==n)return e+n}}),0),c}function sn(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var a=0,u=!1;function s(e,c){var l=this;e.__iterate((function(e,o){return(!t||c0}function dn(e,t,r){var o=bn(e);return o.size=new te(r).map((function(e){return e.size})).min(),o.__iterate=function(e,t){for(var n,r=this.__iterator(M,t),o=0;!(n=r.next()).done&&!1!==e(n.value,o++,this););return o},o.__iteratorUncached=function(e,o){var a=r.map((function(e){return e=n(e),W(o?e.reverse():e)})),i=0,u=!1;return new F((function(){var n;return u||(n=a.map((function(e){return e.next()})),u=n.some((function(e){return e.done}))),u?q():z(e,i++,t.apply(null,n.map((function(e){return e.value}))))}))},o}function mn(e,t){return ae(e)?t:e.constructor(t)}function vn(e){if(e!==Object(e))throw new TypeError("Expected [K, V] tuple: "+e)}function gn(e){return Ve(e.size),A(e)}function yn(e){return u(e)?r:s(e)?o:a}function bn(e){return Object.create((u(e)?K:s(e)?Y:G).prototype)}function wn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):J.prototype.cacheResult.call(this)}function xn(e,t){return e>t?1:e=0;n--)t={value:arguments[n],next:t};return this.__ownerID?(this.size=e,this._head=t,this.__hash=void 0,this.__altered=!0,this):Kn(e,t)},Vn.prototype.pushAll=function(e){if(0===(e=o(e)).size)return this;Ve(e.size);var t=this.size,n=this._head;return e.reverse().forEach((function(e){t++,n={value:e,next:n}})),this.__ownerID?(this.size=t,this._head=n,this.__hash=void 0,this.__altered=!0,this):Kn(t,n)},Vn.prototype.pop=function(){return this.slice(1)},Vn.prototype.unshift=function(){return this.push.apply(this,arguments)},Vn.prototype.unshiftAll=function(e){return this.pushAll(e)},Vn.prototype.shift=function(){return this.pop.apply(this,arguments)},Vn.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Yn()},Vn.prototype.slice=function(e,t){if(j(e,t,this.size))return this;var n=T(e,this.size);if(I(t,this.size)!==this.size)return Se.prototype.slice.call(this,e,t);for(var r=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=r,this._head=o,this.__hash=void 0,this.__altered=!0,this):Kn(r,o)},Vn.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?Kn(this.size,this._head,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},Vn.prototype.__iterate=function(e,t){if(t)return this.reverse().__iterate(e);for(var n=0,r=this._head;r&&!1!==e(r.value,n++,this);)r=r.next;return n},Vn.prototype.__iterator=function(e,t){if(t)return this.reverse().__iterator(e);var n=0,r=this._head;return new F((function(){if(r){var t=r.value;return r=r.next,z(e,n++,t)}return q()}))},Vn.isStack=Wn;var Hn,$n="@@__IMMUTABLE_STACK__@@",Jn=Vn.prototype;function Kn(e,t,n,r){var o=Object.create(Jn);return o.size=e,o._head=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function Yn(){return Hn||(Hn=Kn(0))}function Gn(e,t){var n=function(n){e.prototype[n]=t[n]};return Object.keys(t).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach(n),e}Jn[$n]=!0,Jn.withMutations=Ke.withMutations,Jn.asMutable=Ke.asMutable,Jn.asImmutable=Ke.asImmutable,Jn.wasAltered=Ke.wasAltered,n.Iterator=F,Gn(n,{toArray:function(){Ve(this.size);var e=new Array(this.size||0);return this.valueSeq().__iterate((function(t,n){e[n]=t})),e},toIndexedSeq:function(){return new Kt(this)},toJS:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJS?e.toJS():e})).__toJS()},toJSON:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJSON?e.toJSON():e})).__toJS()},toKeyedSeq:function(){return new Jt(this,!0)},toMap:function(){return We(this.toKeyedSeq())},toObject:function(){Ve(this.size);var e={};return this.__iterate((function(t,n){e[n]=t})),e},toOrderedMap:function(){return Ut(this.toKeyedSeq())},toOrderedSet:function(){return Ln(u(this)?this.valueSeq():this)},toSet:function(){return jn(u(this)?this.valueSeq():this)},toSetSeq:function(){return new Yt(this)},toSeq:function(){return s(this)?this.toIndexedSeq():u(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Vn(u(this)?this.valueSeq():this)},toList:function(){return St(u(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(e,t){return 0===this.size?e+t:e+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+t},concat:function(){return mn(this,un(this,e.call(arguments,0)))},includes:function(e){return this.some((function(t){return ge(t,e)}))},entries:function(){return this.__iterator(R)},every:function(e,t){Ve(this.size);var n=!0;return this.__iterate((function(r,o,a){if(!e.call(t,r,o,a))return n=!1,!1})),n},filter:function(e,t){return mn(this,en(this,e,t,!0))},find:function(e,t,n){var r=this.findEntry(e,t);return r?r[1]:n},forEach:function(e,t){return Ve(this.size),this.__iterate(t?e.bind(t):e)},join:function(e){Ve(this.size),e=void 0!==e?""+e:",";var t="",n=!0;return this.__iterate((function(r){n?n=!1:t+=e,t+=null!=r?r.toString():""})),t},keys:function(){return this.__iterator(P)},map:function(e,t){return mn(this,Zt(this,e,t))},reduce:function(e,t,n){var r,o;return Ve(this.size),arguments.length<2?o=!0:r=t,this.__iterate((function(t,a,i){o?(o=!1,r=t):r=e.call(n,r,t,a,i)})),r},reduceRight:function(e,t,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return mn(this,Xt(this,!0))},slice:function(e,t){return mn(this,rn(this,e,t,!0))},some:function(e,t){return!this.every(tr(e),t)},sort:function(e){return mn(this,fn(this,e))},values:function(){return this.__iterator(M)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(e,t){return A(e?this.toSeq().filter(e,t):this)},countBy:function(e,t){return tn(this,e,t)},equals:function(e){return ye(this,e)},entrySeq:function(){var e=this;if(e._cache)return new te(e._cache);var t=e.toSeq().map(er).toIndexedSeq();return t.fromEntrySeq=function(){return e.toSeq()},t},filterNot:function(e,t){return this.filter(tr(e),t)},findEntry:function(e,t,n){var r=n;return this.__iterate((function(n,o,a){if(e.call(t,n,o,a))return r=[o,n],!1})),r},findKey:function(e,t){var n=this.findEntry(e,t);return n&&n[0]},findLast:function(e,t,n){return this.toKeyedSeq().reverse().find(e,t,n)},findLastEntry:function(e,t,n){return this.toKeyedSeq().reverse().findEntry(e,t,n)},findLastKey:function(e,t){return this.toKeyedSeq().reverse().findKey(e,t)},first:function(){return this.find(C)},flatMap:function(e,t){return mn(this,cn(this,e,t))},flatten:function(e){return mn(this,sn(this,e,!0))},fromEntrySeq:function(){return new Gt(this)},get:function(e,t){return this.find((function(t,n){return ge(n,e)}),void 0,t)},getIn:function(e,t){for(var n,r=this,o=_n(e);!(n=o.next()).done;){var a=n.value;if((r=r&&r.get?r.get(a,b):b)===b)return t}return r},groupBy:function(e,t){return nn(this,e,t)},has:function(e){return this.get(e,b)!==b},hasIn:function(e){return this.getIn(e,b)!==b},isSubset:function(e){return e="function"==typeof e.includes?e:n(e),this.every((function(t){return e.includes(t)}))},isSuperset:function(e){return(e="function"==typeof e.isSubset?e:n(e)).isSubset(this)},keyOf:function(e){return this.findKey((function(t){return ge(t,e)}))},keySeq:function(){return this.toSeq().map(Xn).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(e){return this.toKeyedSeq().reverse().keyOf(e)},max:function(e){return pn(this,e)},maxBy:function(e,t){return pn(this,t,e)},min:function(e){return pn(this,e?nr(e):ar)},minBy:function(e,t){return pn(this,t?nr(t):ar,e)},rest:function(){return this.slice(1)},skip:function(e){return this.slice(Math.max(0,e))},skipLast:function(e){return mn(this,this.toSeq().reverse().skip(e).reverse())},skipWhile:function(e,t){return mn(this,an(this,e,t,!0))},skipUntil:function(e,t){return this.skipWhile(tr(e),t)},sortBy:function(e,t){return mn(this,fn(this,t,e))},take:function(e){return this.slice(0,Math.max(0,e))},takeLast:function(e){return mn(this,this.toSeq().reverse().take(e).reverse())},takeWhile:function(e,t){return mn(this,on(this,e,t))},takeUntil:function(e,t){return this.takeWhile(tr(e),t)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=ir(this))}});var Qn=n.prototype;Qn[f]=!0,Qn[B]=Qn.values,Qn.__toJS=Qn.toArray,Qn.__toStringMapper=rr,Qn.inspect=Qn.toSource=function(){return this.toString()},Qn.chain=Qn.flatMap,Qn.contains=Qn.includes,Gn(r,{flip:function(){return mn(this,Qt(this))},mapEntries:function(e,t){var n=this,r=0;return mn(this,this.toSeq().map((function(o,a){return e.call(t,[a,o],r++,n)})).fromEntrySeq())},mapKeys:function(e,t){var n=this;return mn(this,this.toSeq().flip().map((function(r,o){return e.call(t,r,o,n)})).flip())}});var Zn=r.prototype;function Xn(e,t){return t}function er(e,t){return[t,e]}function tr(e){return function(){return!e.apply(this,arguments)}}function nr(e){return function(){return-e.apply(this,arguments)}}function rr(e){return"string"==typeof e?JSON.stringify(e):String(e)}function or(){return k(arguments)}function ar(e,t){return et?-1:0}function ir(e){if(e.size===1/0)return 0;var t=l(e),n=u(e),r=t?1:0;return ur(e.__iterate(n?t?function(e,t){r=31*r+sr(Ce(e),Ce(t))|0}:function(e,t){r=r+sr(Ce(e),Ce(t))|0}:t?function(e){r=31*r+Ce(e)|0}:function(e){r=r+Ce(e)|0}),r)}function ur(e,t){return t=Ae(t,3432918353),t=Ae(t<<15|t>>>-15,461845907),t=Ae(t<<13|t>>>-13,5),t=Ae((t=(t+3864292196|0)^e)^t>>>16,2246822507),t=Oe((t=Ae(t^t>>>13,3266489909))^t>>>16)}function sr(e,t){return e^t+2654435769+(e<<6)+(e>>2)|0}return Zn[p]=!0,Zn[B]=Qn.entries,Zn.__toJS=Qn.toObject,Zn.__toStringMapper=function(e,t){return JSON.stringify(t)+": "+rr(e)},Gn(o,{toKeyedSeq:function(){return new Jt(this,!1)},filter:function(e,t){return mn(this,en(this,e,t,!1))},findIndex:function(e,t){var n=this.findEntry(e,t);return n?n[0]:-1},indexOf:function(e){var t=this.keyOf(e);return void 0===t?-1:t},lastIndexOf:function(e){var t=this.lastKeyOf(e);return void 0===t?-1:t},reverse:function(){return mn(this,Xt(this,!1))},slice:function(e,t){return mn(this,rn(this,e,t,!1))},splice:function(e,t){var n=arguments.length;if(t=Math.max(0|t,0),0===n||2===n&&!t)return this;e=T(e,e<0?this.count():this.size);var r=this.slice(0,e);return mn(this,1===n?r:r.concat(k(arguments,2),this.slice(e+t)))},findLastIndex:function(e,t){var n=this.findLastEntry(e,t);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(e){return mn(this,sn(this,e,!1))},get:function(e,t){return(e=O(this,e))<0||this.size===1/0||void 0!==this.size&&e>this.size?t:this.find((function(t,n){return n===e}),void 0,t)},has:function(e){return(e=O(this,e))>=0&&(void 0!==this.size?this.size===1/0||e1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function Ne(e){return t=e.replace(/\.[^./]*$/,""),Y()(J()(t));var t}function Pe(e,t,n,r,a){if(!t)return[];var u=[],s=t.get("nullable"),c=t.get("required"),f=t.get("maximum"),h=t.get("minimum"),d=t.get("type"),m=t.get("format"),g=t.get("maxLength"),b=t.get("minLength"),x=t.get("uniqueItems"),_=t.get("maxItems"),E=t.get("minItems"),S=t.get("pattern"),k=n||!0===c,A=null!=e;if(s&&null===e||!d||!(k||A&&"array"===d||!(!k&&!A)))return[];var O="string"===d&&e,C="array"===d&&l()(e)&&e.length,j="array"===d&&W.a.List.isList(e)&&e.count(),T=[O,C,j,"array"===d&&"string"==typeof e&&e,"file"===d&&e instanceof ue.a.File,"boolean"===d&&(e||!1===e),"number"===d&&(e||0===e),"integer"===d&&(e||0===e),"object"===d&&"object"===i()(e)&&null!==e,"object"===d&&"string"==typeof e&&e],I=N()(T).call(T,(function(e){return!!e}));if(k&&!I&&!r)return u.push("Required field is not provided"),u;if("object"===d&&(null===a||"application/json"===a)){var P,M=e;if("string"==typeof e)try{M=JSON.parse(e)}catch(e){return u.push("Parameter string value must be valid JSON"),u}if(t&&t.has("required")&&Ee(c.isList)&&c.isList()&&y()(c).call(c,(function(e){void 0===M[e]&&u.push({propKey:e,error:"Required property not found"})})),t&&t.has("properties"))y()(P=t.get("properties")).call(P,(function(e,t){var n=Pe(M[t],e,!1,r,a);u.push.apply(u,o()(p()(n).call(n,(function(e){return{propKey:t,error:e}}))))}))}if(S){var R=function(e,t){if(!new RegExp(t).test(e))return"Value must follow pattern "+t}(e,S);R&&u.push(R)}if(E&&"array"===d){var D=function(e,t){var n;if(!e&&t>=1||e&&e.lengtht)return v()(n="Array must not contain more then ".concat(t," item")).call(n,1===t?"":"s")}(e,_);L&&u.push({needRemove:!0,error:L})}if(x&&"array"===d){var B=function(e,t){if(e&&("true"===t||!0===t)){var n=Object(V.fromJS)(e),r=n.toSet();if(e.length>r.size){var o=Object(V.Set)();if(y()(n).call(n,(function(e,t){w()(n).call(n,(function(t){return Ee(t.equals)?t.equals(e):t===e})).size>1&&(o=o.add(t))})),0!==o.size)return p()(o).call(o,(function(e){return{index:e,error:"No duplicates allowed."}})).toArray()}}}(e,x);B&&u.push.apply(u,o()(B))}if(g||0===g){var F=function(e,t){var n;if(e.length>t)return v()(n="Value must be no longer than ".concat(t," character")).call(n,1!==t?"s":"")}(e,g);F&&u.push(F)}if(b){var z=function(e,t){var n;if(e.lengtht)return"Value must be less than ".concat(t)}(e,f);q&&u.push(q)}if(h||0===h){var U=function(e,t){if(e2&&void 0!==arguments[2]?arguments[2]:{},r=n.isOAS3,o=void 0!==r&&r,a=n.bypassRequiredCheck,i=void 0!==a&&a,u=e.get("required"),s=Object(le.a)(e,{isOAS3:o}),c=s.schema,l=s.parameterContentMediaType;return Pe(t,c,u,i,l)},Re=function(e,t,n){if(e&&(!e.xml||!e.xml.name)){if(e.xml=e.xml||{},!e.$$ref)return e.type||e.items||e.properties||e.additionalProperties?'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e':null;var r=e.$$ref.match(/\S*\/(\S+)$/);e.xml.name=r[1]}return Object(ie.memoizedCreateXMLExample)(e,t,n)},De=[{when:/json/,shouldStringifyTypes:["string"]}],Le=["object"],Be=function(e,t,n,r){var a=Object(ie.memoizedSampleFromSchema)(e,t,r),u=i()(a),s=S()(De).call(De,(function(e,t){var r;return t.when.test(n)?v()(r=[]).call(r,o()(e),o()(t.shouldStringifyTypes)):e}),Le);return te()(s,(function(e){return e===u}))?M()(a,null,2):a},Fe=function(e,t,n,r){var o,a=Be(e,t,n,r);try{"\n"===(o=me.a.dump(me.a.load(a),{lineWidth:-1}))[o.length-1]&&(o=T()(o).call(o,0,o.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return o.replace(/\t/g," ")},ze=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return e&&Ee(e.toJS)&&(e=e.toJS()),r&&Ee(r.toJS)&&(r=r.toJS()),/xml/.test(t)?Re(e,n,r):/(yaml|yml)/.test(t)?Fe(e,n,t,r):Be(e,n,t,r)},qe=function(){var e={},t=ue.a.location.search;if(!t)return{};if(""!=t){var n=t.substr(1).split("&");for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(r=n[r].split("="),e[decodeURIComponent(r[0])]=r[1]&&decodeURIComponent(r[1])||"")}return e},Ue=function(t){return(t instanceof e?t:e.from(t.toString(),"utf-8")).toString("base64")},Ve={operationsSorter:{alpha:function(e,t){return e.get("path").localeCompare(t.get("path"))},method:function(e,t){return e.get("method").localeCompare(t.get("method"))}},tagsSorter:{alpha:function(e,t){return e.localeCompare(t)}}},We=function(e){var t=[];for(var n in e){var r=e[n];void 0!==r&&""!==r&&t.push([n,"=",encodeURIComponent(r).replace(/%20/g,"+")].join(""))}return t.join("&")},He=function(e,t,n){return!!X()(n,(function(n){return re()(e[n],t[n])}))};function $e(e){return"string"!=typeof e||""===e?"":Object(H.sanitizeUrl)(e)}function Je(e){return!(!e||D()(e).call(e,"localhost")>=0||D()(e).call(e,"127.0.0.1")>=0||"none"===e)}function Ke(e){if(!W.a.OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;var t=B()(e).call(e,(function(e,t){return z()(t).call(t,"2")&&_()(e.get("content")||{}).length>0})),n=e.get("default")||W.a.OrderedMap(),r=(n.get("content")||W.a.OrderedMap()).keySeq().toJS().length?n:null;return t||r}var Ye=function(e){return"string"==typeof e||e instanceof String?U()(e).call(e).replace(/\s/g,"%20"):""},Ge=function(e){return ce()(Ye(e).replace(/%20/g,"_"))},Qe=function(e){return w()(e).call(e,(function(e,t){return/^x-/.test(t)}))},Ze=function(e){return w()(e).call(e,(function(e,t){return/^pattern|maxLength|minLength|maximum|minimum/.test(t)}))};function Xe(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return!0};if("object"!==i()(e)||l()(e)||null===e||!t)return e;var o=A()({},e);return y()(n=_()(o)).call(n,(function(e){e===t&&r(o[e],e)?delete o[e]:o[e]=Xe(o[e],t,r)})),o}function et(e){if("string"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),"object"===i()(e)&&null!==e)try{return M()(e,null,2)}catch(t){return String(e)}return null==e?"":e.toString()}function tt(e){return"number"==typeof e?e.toString():e}function nt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.returnAll,r=void 0!==n&&n,o=t.allowHashes,a=void 0===o||o;if(!W.a.Map.isMap(e))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");var i,u,s,c=e.get("name"),l=e.get("in"),f=[];e&&e.hashCode&&l&&c&&a&&f.push(v()(i=v()(u="".concat(l,".")).call(u,c,".hash-")).call(i,e.hashCode()));l&&c&&f.push(v()(s="".concat(l,".")).call(s,c));return f.push(c),r?f:f[0]||""}function rt(e,t){var n,r=nt(e,{returnAll:!0});return w()(n=p()(r).call(r,(function(e){return t[e]}))).call(n,(function(e){return void 0!==e}))[0]}function ot(){return it(pe()(32).toString("base64"))}function at(e){return it(de()("sha256").update(e).digest("base64"))}function it(e){return e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}var ut=function(e){return!e||!(!ge(e)||!e.isEmpty())}}).call(this,n(132).Buffer)},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){var r=n(226);function o(e,t){for(var n=0;n1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:r,n=null,a=null;return function(){return o(t,n,arguments)||(a=e.apply(null,arguments)),n=arguments,a}}))},function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||function(){return this}()||Function("return this")()}).call(this,n(57))},function(e,t,n){e.exports=n(385)},function(e,t,n){var r=n(166),o=n(515);function a(t){return"function"==typeof r&&"symbol"==typeof o?(e.exports=a=function(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=a=function(e){return e&&"function"==typeof r&&e.constructor===r&&e!==r.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),a(t)}e.exports=a,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){e.exports=n(351)},function(e,t,n){e.exports=n(349)},function(e,t,n){"use strict";var r=n(17),o=n(93),a=n(27),i=n(41),u=n(111).f,s=n(331),c=n(34),l=n(84),f=n(85),p=n(44),h=function(e){var t=function(n,r,a){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,r)}return new e(n,r,a)}return o(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var n,o,d,m,v,g,y,b,w=e.target,x=e.global,_=e.stat,E=e.proto,S=x?r:_?r[w]:(r[w]||{}).prototype,k=x?c:c[w]||f(c,w,{})[w],A=k.prototype;for(d in t)n=!s(x?d:w+(_?".":"#")+d,e.forced)&&S&&p(S,d),v=k[d],n&&(g=e.noTargetGet?(b=u(S,d))&&b.value:S[d]),m=n&&g?g:t[d],n&&typeof v==typeof m||(y=e.bind&&n?l(m,r):e.wrap&&n?h(m):E&&i(m)?a(m):m,(e.sham||m&&m.sham||v&&v.sham)&&f(y,"sham",!0),f(k,d,y),E&&(p(c,o=w+"Prototype")||f(c,o,{}),f(c[o],d,m),e.real&&A&&!A[d]&&f(A,d,m)))}},function(e,t,n){e.exports=n(381)},function(e,t,n){e.exports=n(352)},function(e,t,n){var r=n(420),o=n(421),a=n(800),i=n(802),u=n(807),s=n(809),c=n(814),l=n(226),f=n(3);function p(e,t){var n=r(e);if(o){var u=o(e);t&&(u=a(u).call(u,(function(t){return i(e,t).enumerable}))),n.push.apply(n,u)}return n}e.exports=function(e){for(var t=1;t>",i=function(){invariant(!1,"ImmutablePropTypes type checking code is stripped in production.")};i.isRequired=i;var u=function(){return i};function s(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":e instanceof o.Iterable?"Immutable."+e.toSource().split(" ")[0]:t}function c(e){function t(t,n,r,o,i,u){for(var s=arguments.length,c=Array(s>6?s-6:0),l=6;l4)}function l(e){var t=e.get("swagger");return"string"==typeof t&&i()(t).call(t,"2.0")}function f(e){return function(t,n){return function(r){return n&&n.specSelectors&&n.specSelectors.specJson?c(n.specSelectors.specJson())?s.a.createElement(e,o()({},r,n,{Ori:t})):s.a.createElement(t,r):(console.warn("OAS3 wrapper: couldn't get spec"),null)}}}},function(e,t,n){e.exports=n(535)},function(e,t,n){var r=n(17),o=n(212),a=n(44),i=n(171),u=n(210),s=n(329),c=o("wks"),l=r.Symbol,f=l&&l.for,p=s?l:l&&l.withoutSetter||i;e.exports=function(e){if(!a(c,e)||!u&&"string"!=typeof c[e]){var t="Symbol."+e;u&&a(l,e)?c[e]=l[e]:c[e]=s&&f?f(t):p(t)}return c[e]}},function(e,t,n){var r=n(242);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},function(e,t,n){e.exports=n(840)},function(e,t){e.exports=function(e){return"function"==typeof e}},function(e,t,n){var r=n(34);e.exports=function(e){return r[e+"Prototype"]}},function(e,t,n){var r=n(41);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},function(e,t,n){var r=n(27),o=n(62),a=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(o(e),t)}},function(e,t,n){var r=n(34),o=n(44),a=n(223),i=n(63).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||i(t,e,{value:a.f(e)})}},function(e,t,n){"use strict";n.r(t),n.d(t,"UPDATE_SPEC",(function(){return ee})),n.d(t,"UPDATE_URL",(function(){return te})),n.d(t,"UPDATE_JSON",(function(){return ne})),n.d(t,"UPDATE_PARAM",(function(){return re})),n.d(t,"UPDATE_EMPTY_PARAM_INCLUSION",(function(){return oe})),n.d(t,"VALIDATE_PARAMS",(function(){return ae})),n.d(t,"SET_RESPONSE",(function(){return ie})),n.d(t,"SET_REQUEST",(function(){return ue})),n.d(t,"SET_MUTATED_REQUEST",(function(){return se})),n.d(t,"LOG_REQUEST",(function(){return ce})),n.d(t,"CLEAR_RESPONSE",(function(){return le})),n.d(t,"CLEAR_REQUEST",(function(){return fe})),n.d(t,"CLEAR_VALIDATE_PARAMS",(function(){return pe})),n.d(t,"UPDATE_OPERATION_META_VALUE",(function(){return he})),n.d(t,"UPDATE_RESOLVED",(function(){return de})),n.d(t,"UPDATE_RESOLVED_SUBTREE",(function(){return me})),n.d(t,"SET_SCHEME",(function(){return ve})),n.d(t,"updateSpec",(function(){return ge})),n.d(t,"updateResolved",(function(){return ye})),n.d(t,"updateUrl",(function(){return be})),n.d(t,"updateJsonSpec",(function(){return we})),n.d(t,"parseToJson",(function(){return xe})),n.d(t,"resolveSpec",(function(){return Ee})),n.d(t,"requestResolvedSubtree",(function(){return Ae})),n.d(t,"changeParam",(function(){return Oe})),n.d(t,"changeParamByIdentity",(function(){return Ce})),n.d(t,"updateResolvedSubtree",(function(){return je})),n.d(t,"invalidateResolvedSubtreeCache",(function(){return Te})),n.d(t,"validateParams",(function(){return Ie})),n.d(t,"updateEmptyParamInclusion",(function(){return Ne})),n.d(t,"clearValidateParams",(function(){return Pe})),n.d(t,"changeConsumesValue",(function(){return Me})),n.d(t,"changeProducesValue",(function(){return Re})),n.d(t,"setResponse",(function(){return De})),n.d(t,"setRequest",(function(){return Le})),n.d(t,"setMutatedRequest",(function(){return Be})),n.d(t,"logRequest",(function(){return Fe})),n.d(t,"executeRequest",(function(){return ze})),n.d(t,"execute",(function(){return qe})),n.d(t,"clearResponse",(function(){return Ue})),n.d(t,"clearRequest",(function(){return Ve})),n.d(t,"setScheme",(function(){return We}));var r=n(25),o=n.n(r),a=n(54),i=n.n(a),u=n(72),s=n.n(u),c=n(19),l=n.n(c),f=n(40),p=n.n(f),h=n(24),d=n.n(h),m=n(4),v=n.n(m),g=n(319),y=n.n(g),b=n(30),w=n.n(b),x=n(197),_=n.n(x),E=n(66),S=n.n(E),k=n(12),A=n.n(k),O=n(198),C=n.n(O),j=n(18),T=n.n(j),I=n(23),N=n.n(I),P=n(2),M=n.n(P),R=n(15),D=n.n(R),L=n(21),B=n.n(L),F=n(320),z=n.n(F),q=n(70),U=n(1),V=n(89),W=n.n(V),H=n(141),$=n(457),J=n.n($),K=n(458),Y=n.n(K),G=n(321),Q=n.n(G),Z=n(5),X=["path","method"],ee="spec_update_spec",te="spec_update_url",ne="spec_update_json",re="spec_update_param",oe="spec_update_empty_param_inclusion",ae="spec_validate_param",ie="spec_set_response",ue="spec_set_request",se="spec_set_mutated_request",ce="spec_log_request",le="spec_clear_response",fe="spec_clear_request",pe="spec_clear_validate_param",he="spec_update_operation_meta_value",de="spec_update_resolved",me="spec_update_resolved_subtree",ve="set_scheme";function ge(e){var t,n=(t=e,J()(t)?t:"").replace(/\t/g," ");if("string"==typeof e)return{type:ee,payload:n}}function ye(e){return{type:de,payload:e}}function be(e){return{type:te,payload:e}}function we(e){return{type:ne,payload:e}}var xe=function(e){return function(t){var n=t.specActions,r=t.specSelectors,o=t.errActions,a=r.specStr,i=null;try{e=e||a(),o.clear({source:"parser"}),i=q.a.load(e)}catch(e){return console.error(e),o.newSpecErr({source:"parser",level:"error",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return i&&"object"===l()(i)?n.updateJsonSpec(i):{}}},_e=!1,Ee=function(e,t){return function(n){var r=n.specActions,o=n.specSelectors,a=n.errActions,i=n.fn,u=i.fetch,s=i.resolve,c=i.AST,l=void 0===c?{}:c,f=n.getConfigs;_e||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),_e=!0);var p=f(),h=p.modelPropertyMacro,m=p.parameterMacro,g=p.requestInterceptor,b=p.responseInterceptor;void 0===e&&(e=o.specJson()),void 0===t&&(t=o.url());var w=l.getLineNumberForPath?l.getLineNumberForPath:function(){},x=o.specStr();return s({fetch:u,spec:e,baseDoc:t,modelPropertyMacro:h,parameterMacro:m,requestInterceptor:g,responseInterceptor:b}).then((function(e){var t=e.spec,n=e.errors;if(a.clear({type:"thrown"}),d()(n)&&n.length>0){var o=v()(n).call(n,(function(e){return console.error(e),e.line=e.fullPath?w(x,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",y()(e,"message",{enumerable:!0,value:e.message}),e}));a.newThrownErrBatch(o)}return r.updateResolved(t)}))}},Se=[],ke=Y()(s()(p.a.mark((function e(){var t,n,r,o,a,i,u,c,l,f,h,m,g,b,x,E,k,O;return p.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=Se.system){e.next=4;break}return console.error("debResolveSubtrees: don't have a system to operate on, aborting."),e.abrupt("return");case 4:if(n=t.errActions,r=t.errSelectors,o=t.fn,a=o.resolveSubtree,i=o.fetch,u=o.AST,c=void 0===u?{}:u,l=t.specSelectors,f=t.specActions,a){e.next=8;break}return console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing."),e.abrupt("return");case 8:return h=c.getLineNumberForPath?c.getLineNumberForPath:function(){},m=l.specStr(),g=t.getConfigs(),b=g.modelPropertyMacro,x=g.parameterMacro,E=g.requestInterceptor,k=g.responseInterceptor,e.prev=11,e.next=14,w()(Se).call(Se,function(){var e=s()(p.a.mark((function e(t,o){var u,c,f,g,w,O,j,T,I;return p.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t;case 2:return u=e.sent,c=u.resultMap,f=u.specWithCurrentSubtrees,e.next=7,a(f,o,{baseDoc:l.url(),modelPropertyMacro:b,parameterMacro:x,requestInterceptor:E,responseInterceptor:k});case 7:if(g=e.sent,w=g.errors,O=g.spec,r.allErrors().size&&n.clearBy((function(e){var t;return"thrown"!==e.get("type")||"resolver"!==e.get("source")||!_()(t=e.get("fullPath")).call(t,(function(e,t){return e===o[t]||void 0===o[t]}))})),d()(w)&&w.length>0&&(j=v()(w).call(w,(function(e){return e.line=e.fullPath?h(m,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",y()(e,"message",{enumerable:!0,value:e.message}),e})),n.newThrownErrBatch(j)),!O||!l.isOAS3()||"components"!==o[0]||"securitySchemes"!==o[1]){e.next=15;break}return e.next=15,S.a.all(v()(T=A()(I=C()(O)).call(I,(function(e){return"openIdConnect"===e.type}))).call(T,function(){var e=s()(p.a.mark((function e(t){var n,r;return p.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n={url:t.openIdConnectUrl,requestInterceptor:E,responseInterceptor:k},e.prev=1,e.next=4,i(n);case 4:(r=e.sent)instanceof Error||r.status>=400?console.error(r.statusText+" "+n.url):t.openIdConnectData=JSON.parse(r.text),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(1),console.error(e.t0);case 11:case"end":return e.stop()}}),e,null,[[1,8]])})));return function(t){return e.apply(this,arguments)}}()));case 15:return Q()(c,o,O),Q()(f,o,O),e.abrupt("return",{resultMap:c,specWithCurrentSubtrees:f});case 18:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),S.a.resolve({resultMap:(l.specResolvedSubtree([])||Object(U.Map)()).toJS(),specWithCurrentSubtrees:l.specJson().toJS()}));case 14:O=e.sent,delete Se.system,Se=[],e.next=22;break;case 19:e.prev=19,e.t0=e.catch(11),console.error(e.t0);case 22:f.updateResolvedSubtree([],O.resultMap);case 23:case"end":return e.stop()}}),e,null,[[11,19]])}))),35),Ae=function(e){return function(t){var n;T()(n=v()(Se).call(Se,(function(e){return e.join("@@")}))).call(n,e.join("@@"))>-1||(Se.push(e),Se.system=t,ke())}};function Oe(e,t,n,r,o){return{type:re,payload:{path:e,value:r,paramName:t,paramIn:n,isXml:o}}}function Ce(e,t,n,r){return{type:re,payload:{path:e,param:t,value:n,isXml:r}}}var je=function(e,t){return{type:me,payload:{path:e,value:t}}},Te=function(){return{type:me,payload:{path:[],value:Object(U.Map)()}}},Ie=function(e,t){return{type:ae,payload:{pathMethod:e,isOAS3:t}}},Ne=function(e,t,n,r){return{type:oe,payload:{pathMethod:e,paramName:t,paramIn:n,includeEmptyValue:r}}};function Pe(e){return{type:pe,payload:{pathMethod:e}}}function Me(e,t){return{type:he,payload:{path:e,value:t,key:"consumes_value"}}}function Re(e,t){return{type:he,payload:{path:e,value:t,key:"produces_value"}}}var De=function(e,t,n){return{payload:{path:e,method:t,res:n},type:ie}},Le=function(e,t,n){return{payload:{path:e,method:t,req:n},type:ue}},Be=function(e,t,n){return{payload:{path:e,method:t,req:n},type:se}},Fe=function(e){return{payload:e,type:ce}},ze=function(e){return function(t){var n,r,o=t.fn,a=t.specActions,i=t.specSelectors,u=t.getConfigs,c=t.oas3Selectors,l=e.pathName,f=e.method,h=e.operation,m=u(),g=m.requestInterceptor,y=m.responseInterceptor,b=h.toJS();h&&h.get("parameters")&&N()(n=A()(r=h.get("parameters")).call(r,(function(e){return e&&!0===e.get("allowEmptyValue")}))).call(n,(function(t){if(i.parameterInclusionSettingFor([l,f],t.get("name"),t.get("in"))){e.parameters=e.parameters||{};var n=Object(Z.B)(t,e.parameters);(!n||n&&0===n.size)&&(e.parameters[t.get("name")]="")}}));if(e.contextUrl=W()(i.url()).toString(),b&&b.operationId?e.operationId=b.operationId:b&&l&&f&&(e.operationId=o.opId(b,l,f)),i.isOAS3()){var w,x=M()(w="".concat(l,":")).call(w,f);e.server=c.selectedServer(x)||c.selectedServer();var _=c.serverVariables({server:e.server,namespace:x}).toJS(),E=c.serverVariables({server:e.server}).toJS();e.serverVariables=D()(_).length?_:E,e.requestContentType=c.requestContentType(l,f),e.responseContentType=c.responseContentType(l,f)||"*/*";var S,k=c.requestBodyValue(l,f),O=c.requestBodyInclusionSetting(l,f);if(k&&k.toJS)e.requestBody=A()(S=v()(k).call(k,(function(e){return U.Map.isMap(e)?e.get("value"):e}))).call(S,(function(e,t){return(d()(e)?0!==e.length:!Object(Z.q)(e))||O.get(t)})).toJS();else e.requestBody=k}var C=B()({},e);C=o.buildRequest(C),a.setRequest(e.pathName,e.method,C);var j=function(){var t=s()(p.a.mark((function t(n){var r,o;return p.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,g.apply(undefined,[n]);case 2:return r=t.sent,o=B()({},r),a.setMutatedRequest(e.pathName,e.method,o),t.abrupt("return",r);case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}();e.requestInterceptor=j,e.responseInterceptor=y;var T=z()();return o.execute(e).then((function(t){t.duration=z()()-T,a.setResponse(e.pathName,e.method,t)})).catch((function(t){"Failed to fetch"===t.message&&(t.name="",t.message='**Failed to fetch.** \n**Possible Reasons:** \n - CORS \n - Network Failure \n - URL scheme must be "http" or "https" for CORS request.'),a.setResponse(e.pathName,e.method,{error:!0,err:Object(H.serializeError)(t)})}))}},qe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.path,n=e.method,r=i()(e,X);return function(e){var a=e.fn.fetch,i=e.specSelectors,u=e.specActions,s=i.specJsonWithResolvedSubtrees().toJS(),c=i.operationScheme(t,n),l=i.contentTypeValues([t,n]).toJS(),f=l.requestContentType,p=l.responseContentType,h=/xml/i.test(f),d=i.parameterValues([t,n],h).toJS();return u.executeRequest(o()(o()({},r),{},{fetch:a,spec:s,pathName:t,method:n,parameters:d,requestContentType:f,scheme:c,responseContentType:p}))}};function Ue(e,t){return{type:le,payload:{path:e,method:t}}}function Ve(e,t){return{type:fe,payload:{path:e,method:t}}}function We(e,t,n){return{type:ve,payload:{scheme:e,path:t,method:n}}}},function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t=e.length?{done:!0}:{done:!1,value:e[u++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var c,l=!0,f=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){f=!0,c=e},f:function(){try{l||null==n.return||n.return()}finally{if(f)throw c}}}},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){var n=Function.prototype.call;e.exports=n.bind?n.bind(n):function(){return n.apply(n,arguments)}},function(e,t,n){var r=n(17),o=n(43),a=r.String,i=r.TypeError;e.exports=function(e){if(o(e))return e;throw i(a(e)+" is not an object")}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){var r=n(421),o=n(423),a=n(820);e.exports=function(e,t){if(null==e)return{};var n,i,u=a(e,t);if(r){var s=r(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(u[n]=e[n])}return u},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){"use strict";n.r(t),n.d(t,"UPDATE_SELECTED_SERVER",(function(){return r})),n.d(t,"UPDATE_REQUEST_BODY_VALUE",(function(){return o})),n.d(t,"UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG",(function(){return a})),n.d(t,"UPDATE_REQUEST_BODY_INCLUSION",(function(){return i})),n.d(t,"UPDATE_ACTIVE_EXAMPLES_MEMBER",(function(){return u})),n.d(t,"UPDATE_REQUEST_CONTENT_TYPE",(function(){return s})),n.d(t,"UPDATE_RESPONSE_CONTENT_TYPE",(function(){return c})),n.d(t,"UPDATE_SERVER_VARIABLE_VALUE",(function(){return l})),n.d(t,"SET_REQUEST_BODY_VALIDATE_ERROR",(function(){return f})),n.d(t,"CLEAR_REQUEST_BODY_VALIDATE_ERROR",(function(){return p})),n.d(t,"CLEAR_REQUEST_BODY_VALUE",(function(){return h})),n.d(t,"setSelectedServer",(function(){return d})),n.d(t,"setRequestBodyValue",(function(){return m})),n.d(t,"setRetainRequestBodyValueFlag",(function(){return v})),n.d(t,"setRequestBodyInclusion",(function(){return g})),n.d(t,"setActiveExamplesMember",(function(){return y})),n.d(t,"setRequestContentType",(function(){return b})),n.d(t,"setResponseContentType",(function(){return w})),n.d(t,"setServerVariableValue",(function(){return x})),n.d(t,"setRequestBodyValidateError",(function(){return _})),n.d(t,"clearRequestBodyValidateError",(function(){return E})),n.d(t,"initRequestBodyValidateError",(function(){return S})),n.d(t,"clearRequestBodyValue",(function(){return k}));var r="oas3_set_servers",o="oas3_set_request_body_value",a="oas3_set_request_body_retain_flag",i="oas3_set_request_body_inclusion",u="oas3_set_active_examples_member",s="oas3_set_request_content_type",c="oas3_set_response_content_type",l="oas3_set_server_variable_value",f="oas3_set_request_body_validate_error",p="oas3_clear_request_body_validate_error",h="oas3_clear_request_body_value";function d(e,t){return{type:r,payload:{selectedServerUrl:e,namespace:t}}}function m(e){var t=e.value,n=e.pathMethod;return{type:o,payload:{value:t,pathMethod:n}}}var v=function(e){var t=e.value,n=e.pathMethod;return{type:a,payload:{value:t,pathMethod:n}}};function g(e){var t=e.value,n=e.pathMethod,r=e.name;return{type:i,payload:{value:t,pathMethod:n,name:r}}}function y(e){var t=e.name,n=e.pathMethod,r=e.contextType,o=e.contextName;return{type:u,payload:{name:t,pathMethod:n,contextType:r,contextName:o}}}function b(e){var t=e.value,n=e.pathMethod;return{type:s,payload:{value:t,pathMethod:n}}}function w(e){var t=e.value,n=e.path,r=e.method;return{type:c,payload:{value:t,path:n,method:r}}}function x(e){var t=e.server,n=e.namespace,r=e.key,o=e.val;return{type:l,payload:{server:t,namespace:n,key:r,val:o}}}var _=function(e){var t=e.path,n=e.method,r=e.validationErrors;return{type:f,payload:{path:t,method:n,validationErrors:r}}},E=function(e){var t=e.path,n=e.method;return{type:p,payload:{path:t,method:n}}},S=function(e){var t=e.pathMethod;return{type:p,payload:{path:t[0],method:t[1]}}},k=function(e){var t=e.pathMethod;return{type:h,payload:{pathMethod:t}}}},function(e,t,n){e.exports=n(647)},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var r=n(34),o=n(17),a=n(41),i=function(e){return a(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},function(e,t,n){"use strict";n.d(t,"b",(function(){return m})),n.d(t,"e",(function(){return v})),n.d(t,"c",(function(){return y})),n.d(t,"a",(function(){return b})),n.d(t,"d",(function(){return w}));var r=n(49),o=n.n(r),a=n(19),i=n.n(a),u=n(108),s=n.n(u),c=n(2),l=n.n(c),f=n(53),p=n.n(f),h=function(e){return String.prototype.toLowerCase.call(e)},d=function(e){return e.replace(/[^\w]/gi,"_")};function m(e){var t=e.openapi;return!!t&&s()(t).call(t,"3")}function v(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=r.v2OperationIdCompatibilityMode;if(!e||"object"!==i()(e))return null;var a=(e.operationId||"").replace(/\s/g,"");return a.length?d(e.operationId):g(t,n,{v2OperationIdCompatibilityMode:o})}function g(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=r.v2OperationIdCompatibilityMode;if(o){var a,i,u=l()(a="".concat(t.toLowerCase(),"_")).call(a,e).replace(/[\s!@#$%^&*()_+=[{\]};:<>|./?,\\'""-]/g,"_");return(u=u||l()(i="".concat(e.substring(1),"_")).call(i,t)).replace(/((_){2,})/g,"_").replace(/^(_)*/g,"").replace(/([_])*$/g,"")}return l()(n="".concat(h(t))).call(n,d(e))}function y(e,t){var n;return l()(n="".concat(h(t),"-")).call(n,e)}function b(e,t){return e&&e.paths?function(e,t){return function(e,t,n){if(!e||"object"!==i()(e)||!e.paths||"object"!==i()(e.paths))return null;var r=e.paths;for(var o in r)for(var a in r[o])if("PARAMETERS"!==a.toUpperCase()){var u=r[o][a];if(u&&"object"===i()(u)){var s={spec:e,pathName:o,method:a.toUpperCase(),operation:u},c=t(s);if(n&&c)return s}}return}(e,t,!0)||null}(e,(function(e){var n=e.pathName,r=e.method,o=e.operation;if(!o||"object"!==i()(o))return!1;var a=o.operationId;return[v(o,n,r),y(n,r),a].some((function(e){return e&&e===t}))})):null}function w(e){var t=e.spec,n=t.paths,r={};if(!n||t.$$normalized)return e;for(var a in n){var i=n[a];if(p()(i)){var u=i.parameters,s=function(e){var n=i[e];if(!p()(n))return"continue";var s=v(n,a,e);if(s){r[s]?r[s].push(n):r[s]=[n];var c=r[s];if(c.length>1)c.forEach((function(e,t){var n;e.__originalOperationId=e.__originalOperationId||e.operationId,e.operationId=l()(n="".concat(s)).call(n,t+1)}));else if(void 0!==n.operationId){var f=c[0];f.__originalOperationId=f.__originalOperationId||n.operationId,f.operationId=s}}if("parameters"!==e){var h=[],d={};for(var m in t)"produces"!==m&&"consumes"!==m&&"security"!==m||(d[m]=t[m],h.push(d));if(u&&(d.parameters=u,h.push(d)),h.length){var g,y=o()(h);try{for(y.s();!(g=y.n()).done;){var b=g.value;for(var w in b)if(n[w]){if("parameters"===w){var x,_=o()(b[w]);try{var E=function(){var e=x.value;n[w].some((function(t){return t.name&&t.name===e.name||t.$ref&&t.$ref===e.$ref||t.$$ref&&t.$$ref===e.$$ref||t===e}))||n[w].push(e)};for(_.s();!(x=_.n()).done;)E()}catch(e){_.e(e)}finally{_.f()}}}else n[w]=b[w]}}catch(e){y.e(e)}finally{y.f()}}}};for(var c in i)s(c)}}return t.$$normalized=!0,e}},function(e,t,n){"use strict";n.r(t),n.d(t,"NEW_THROWN_ERR",(function(){return o})),n.d(t,"NEW_THROWN_ERR_BATCH",(function(){return a})),n.d(t,"NEW_SPEC_ERR",(function(){return i})),n.d(t,"NEW_SPEC_ERR_BATCH",(function(){return u})),n.d(t,"NEW_AUTH_ERR",(function(){return s})),n.d(t,"CLEAR",(function(){return c})),n.d(t,"CLEAR_BY",(function(){return l})),n.d(t,"newThrownErr",(function(){return f})),n.d(t,"newThrownErrBatch",(function(){return p})),n.d(t,"newSpecErr",(function(){return h})),n.d(t,"newSpecErrBatch",(function(){return d})),n.d(t,"newAuthErr",(function(){return m})),n.d(t,"clear",(function(){return v})),n.d(t,"clearBy",(function(){return g}));var r=n(141),o="err_new_thrown_err",a="err_new_thrown_err_batch",i="err_new_spec_err",u="err_new_spec_err_batch",s="err_new_auth_err",c="err_clear",l="err_clear_by";function f(e){return{type:o,payload:Object(r.serializeError)(e)}}function p(e){return{type:a,payload:e}}function h(e){return{type:i,payload:e}}function d(e){return{type:u,payload:e}}function m(e){return{type:s,payload:e}}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{type:c,payload:e}}function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!0};return{type:l,payload:e}}},function(e,t,n){var r=n(168),o=n(113);e.exports=function(e){return r(o(e))}},function(e,t,n){var r=n(17),o=n(113),a=r.Object;e.exports=function(e){return a(o(e))}},function(e,t,n){var r=n(17),o=n(48),a=n(330),i=n(51),u=n(169),s=r.TypeError,c=Object.defineProperty;t.f=o?c:function(e,t,n){if(i(e),t=u(t),i(n),a)try{return c(e,t,n)}catch(e){}if("get"in n||"set"in n)throw s("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t){"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},function(e,t,n){var r=n(132),o=r.Buffer;function a(e,t){for(var n in e)t[n]=e[n]}function i(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(a(r,t),t.Buffer=i),a(o,i),i.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},i.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},i.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},i.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){e.exports=n(424)},function(e,t,n){var r=n(17),o=n(75),a=r.String;e.exports=function(e){if("Symbol"===o(e))throw TypeError("Cannot convert a Symbol value to a string");return a(e)}},function(e,t,n){n(77);var r=n(507),o=n(17),a=n(75),i=n(85),u=n(130),s=n(38)("toStringTag");for(var c in r){var l=o[c],f=l&&l.prototype;f&&a(f)!==s&&i(f,s,c),u[c]=u.Array}},function(e,t,n){var r=n(355),o="object"==typeof self&&self&&self.Object===Object&&self,a=r||o||Function("return this")();e.exports=a},function(e,t,n){"use strict";function r(e){return null==e}var o={isNothing:r,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:r(e)?[]:[e]},repeat:function(e,t){var n,r="";for(n=0;nu&&(t=r-u+(a=" ... ").length),n-r>u&&(n=r+u-(i=" ...").length),{str:a+e.slice(t,n).replace(/\t/g,"→")+i,pos:r-t+a.length}}function c(e,t){return o.repeat(" ",t-e.length)+e}var l=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var n,r=/\r?\n|\r|\0/g,a=[0],i=[],u=-1;n=r.exec(e.buffer);)i.push(n.index),a.push(n.index+n[0].length),e.position<=n.index&&u<0&&(u=a.length-2);u<0&&(u=a.length-1);var l,f,p="",h=Math.min(e.line+t.linesAfter,i.length).toString().length,d=t.maxLength-(t.indent+h+3);for(l=1;l<=t.linesBefore&&!(u-l<0);l++)f=s(e.buffer,a[u-l],i[u-l],e.position-(a[u]-a[u-l]),d),p=o.repeat(" ",t.indent)+c((e.line-l+1).toString(),h)+" | "+f.str+"\n"+p;for(f=s(e.buffer,a[u],i[u],e.position,d),p+=o.repeat(" ",t.indent)+c((e.line+1).toString(),h)+" | "+f.str+"\n",p+=o.repeat("-",t.indent+h+3+f.pos)+"^\n",l=1;l<=t.linesAfter&&!(u+l>=i.length);l++)f=s(e.buffer,a[u+l],i[u+l],e.position-(a[u]-a[u+l]),d),p+=o.repeat(" ",t.indent)+c((e.line+l+1).toString(),h)+" | "+f.str+"\n";return p.replace(/\n$/,"")},f=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],p=["scalar","sequence","mapping"];var h=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===f.indexOf(t))throw new u('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===p.indexOf(this.kind))throw new u('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function d(e,t){var n=[];return e[t].forEach((function(e){var t=n.length;n.forEach((function(n,r){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=r)})),n[t]=e})),n}function m(e){return this.extend(e)}m.prototype.extend=function(e){var t=[],n=[];if(e instanceof h)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new u("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof h))throw new u("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new u("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new u("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof h))throw new u("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(m.prototype);return r.implicit=(this.implicit||[]).concat(t),r.explicit=(this.explicit||[]).concat(n),r.compiledImplicit=d(r,"implicit"),r.compiledExplicit=d(r,"explicit"),r.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),A=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var O=/^[-+]?[0-9]+e/;var C=new h("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!A.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||o.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(o.isNegativeZero(e))return"-0.0";return n=e.toString(10),O.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),j=w.extend({implicit:[x,_,k,C]}),T=j,I=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),N=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var P=new h("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==I.exec(e)||null!==N.exec(e))},construct:function(e){var t,n,r,o,a,i,u,s,c=0,l=null;if(null===(t=I.exec(e))&&(t=N.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],r=+t[2]-1,o=+t[3],!t[4])return new Date(Date.UTC(n,r,o));if(a=+t[4],i=+t[5],u=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(l=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(l=-l)),s=new Date(Date.UTC(n,r,o,a,i,u,c)),l&&s.setTime(s.getTime()-l),s},instanceOf:Date,represent:function(e){return e.toISOString()}});var M=new h("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),R="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var D=new h("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,r=0,o=e.length,a=R;for(n=0;n64)){if(t<0)return!1;r+=6}return r%8==0},construct:function(e){var t,n,r=e.replace(/[\r\n=]/g,""),o=r.length,a=R,i=0,u=[];for(t=0;t>16&255),u.push(i>>8&255),u.push(255&i)),i=i<<6|a.indexOf(r.charAt(t));return 0===(n=o%4*6)?(u.push(i>>16&255),u.push(i>>8&255),u.push(255&i)):18===n?(u.push(i>>10&255),u.push(i>>2&255)):12===n&&u.push(i>>4&255),new Uint8Array(u)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,r="",o=0,a=e.length,i=R;for(t=0;t>18&63],r+=i[o>>12&63],r+=i[o>>6&63],r+=i[63&o]),o=(o<<8)+e[t];return 0===(n=a%3)?(r+=i[o>>18&63],r+=i[o>>12&63],r+=i[o>>6&63],r+=i[63&o]):2===n?(r+=i[o>>10&63],r+=i[o>>4&63],r+=i[o<<2&63],r+=i[64]):1===n&&(r+=i[o>>2&63],r+=i[o<<4&63],r+=i[64],r+=i[64]),r}}),L=Object.prototype.hasOwnProperty,B=Object.prototype.toString;var F=new h("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,r,o,a,i=[],u=e;for(t=0,n=u.length;t>10),56320+(e-65536&1023))}for(var ae=new Array(256),ie=new Array(256),ue=0;ue<256;ue++)ae[ue]=re(ue)?1:0,ie[ue]=re(ue);function se(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||W,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function ce(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=l(n),new u(t,n)}function le(e,t){throw ce(e,t)}function fe(e,t){e.onWarning&&e.onWarning.call(null,ce(e,t))}var pe={YAML:function(e,t,n){var r,o,a;null!==e.version&&le(e,"duplication of %YAML directive"),1!==n.length&&le(e,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&le(e,"ill-formed argument of the YAML directive"),o=parseInt(r[1],10),a=parseInt(r[2],10),1!==o&&le(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=a<2,1!==a&&2!==a&&fe(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var r,o;2!==n.length&&le(e,"TAG directive accepts exactly two arguments"),r=n[0],o=n[1],Y.test(r)||le(e,"ill-formed tag handle (first argument) of the TAG directive"),H.call(e.tagMap,r)&&le(e,'there is a previously declared suffix for "'+r+'" tag handle'),G.test(o)||le(e,"ill-formed tag prefix (second argument) of the TAG directive");try{o=decodeURIComponent(o)}catch(t){le(e,"tag prefix is malformed: "+o)}e.tagMap[r]=o}};function he(e,t,n,r){var o,a,i,u;if(t1&&(e.result+=o.repeat("\n",t-1))}function we(e,t){var n,r,o=e.tag,a=e.anchor,i=[],u=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=i),r=e.input.charCodeAt(e.position);0!==r&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,le(e,"tab characters must not be used in indentation")),45===r)&&ee(e.input.charCodeAt(e.position+1));)if(u=!0,e.position++,ge(e,!0,-1)&&e.lineIndent<=t)i.push(null),r=e.input.charCodeAt(e.position);else if(n=e.line,Ee(e,t,3,!1,!0),i.push(e.result),ge(e,!0,-1),r=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==r)le(e,"bad indentation of a sequence entry");else if(e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt)&&(g&&(i=e.line,u=e.lineStart,s=e.position),Ee(e,t,4,!0,o)&&(g?m=e.result:v=e.result),g||(me(e,p,h,d,m,v,i,u,s),d=m=v=null),ge(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===a||e.lineIndent>t)&&0!==c)le(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===a?le(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?le(e,"repeat of an indentation width identifier"):(f=t+a-1,l=!0)}if(X(i)){do{i=e.input.charCodeAt(++e.position)}while(X(i));if(35===i)do{i=e.input.charCodeAt(++e.position)}while(!Z(i)&&0!==i)}for(;0!==i;){for(ve(e),e.lineIndent=0,i=e.input.charCodeAt(e.position);(!l||e.lineIndentf&&(f=e.lineIndent),Z(i))p++;else{if(e.lineIndent0){for(o=i,a=0;o>0;o--)(i=ne(u=e.input.charCodeAt(++e.position)))>=0?a=(a<<4)+i:le(e,"expected hexadecimal character");e.result+=oe(a),e.position++}else le(e,"unknown escape sequence");n=r=e.position}else Z(u)?(he(e,n,r,!0),be(e,ge(e,!1,t)),n=r=e.position):e.position===e.lineStart&&ye(e)?le(e,"unexpected end of the document within a double quoted scalar"):(e.position++,r=e.position)}le(e,"unexpected end of the stream within a double quoted scalar")}(e,h)?g=!0:!function(e){var t,n,r;if(42!==(r=e.input.charCodeAt(e.position)))return!1;for(r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!ee(r)&&!te(r);)r=e.input.charCodeAt(++e.position);return e.position===t&&le(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),H.call(e.anchorMap,n)||le(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],ge(e,!0,-1),!0}(e)?function(e,t,n){var r,o,a,i,u,s,c,l,f=e.kind,p=e.result;if(ee(l=e.input.charCodeAt(e.position))||te(l)||35===l||38===l||42===l||33===l||124===l||62===l||39===l||34===l||37===l||64===l||96===l)return!1;if((63===l||45===l)&&(ee(r=e.input.charCodeAt(e.position+1))||n&&te(r)))return!1;for(e.kind="scalar",e.result="",o=a=e.position,i=!1;0!==l;){if(58===l){if(ee(r=e.input.charCodeAt(e.position+1))||n&&te(r))break}else if(35===l){if(ee(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&ye(e)||n&&te(l))break;if(Z(l)){if(u=e.line,s=e.lineStart,c=e.lineIndent,ge(e,!1,-1),e.lineIndent>=t){i=!0,l=e.input.charCodeAt(e.position);continue}e.position=a,e.line=u,e.lineStart=s,e.lineIndent=c;break}}i&&(he(e,o,a,!1),be(e,e.line-u),o=a=e.position,i=!1),X(l)||(a=e.position+1),l=e.input.charCodeAt(++e.position)}return he(e,o,a,!1),!!e.result||(e.kind=f,e.result=p,!1)}(e,h,1===n)&&(g=!0,null===e.tag&&(e.tag="?")):(g=!0,null===e.tag&&null===e.anchor||le(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(g=s&&we(e,d))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&le(e,'unacceptable node kind for !> tag; it should be "scalar", not "'+e.kind+'"'),c=0,l=e.implicitTypes.length;c"),null!==e.result&&p.kind!==e.kind&&le(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+p.kind+'", not "'+e.kind+'"'),p.resolve(e.result,e.tag)?(e.result=p.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):le(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||g}function Se(e){var t,n,r,o,a=e.position,i=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(o=e.input.charCodeAt(e.position))&&(ge(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==o));){for(i=!0,o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!ee(o);)o=e.input.charCodeAt(++e.position);for(r=[],(n=e.input.slice(t,e.position)).length<1&&le(e,"directive name must not be less than one character in length");0!==o;){for(;X(o);)o=e.input.charCodeAt(++e.position);if(35===o){do{o=e.input.charCodeAt(++e.position)}while(0!==o&&!Z(o));break}if(Z(o))break;for(t=e.position;0!==o&&!ee(o);)o=e.input.charCodeAt(++e.position);r.push(e.input.slice(t,e.position))}0!==o&&ve(e),H.call(pe,n)?pe[n](e,n,r):fe(e,'unknown document directive "'+n+'"')}ge(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,ge(e,!0,-1)):i&&le(e,"directives end mark is expected"),Ee(e,e.lineIndent-1,4,!1,!0),ge(e,!0,-1),e.checkLineBreaks&&J.test(e.input.slice(a,e.position))&&fe(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&ye(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,ge(e,!0,-1)):e.position=55296&&r<=56319&&t+1=56320&&n<=57343?1024*(r-55296)+n-56320+65536:r}function Ue(e){return/^\n* /.test(e)}function Ve(e,t,n,r,o,a,i,u){var s,c,l=0,f=null,p=!1,h=!1,d=-1!==r,m=-1,v=Be(c=qe(e,0))&&c!==je&&!Le(c)&&45!==c&&63!==c&&58!==c&&44!==c&&91!==c&&93!==c&&123!==c&&125!==c&&35!==c&&38!==c&&42!==c&&33!==c&&124!==c&&61!==c&&62!==c&&39!==c&&34!==c&&37!==c&&64!==c&&96!==c&&function(e){return!Le(e)&&58!==e}(qe(e,e.length-1));if(t||i)for(s=0;s=65536?s+=2:s++){if(!Be(l=qe(e,s)))return 5;v=v&&ze(l,f,u),f=l}else{for(s=0;s=65536?s+=2:s++){if(10===(l=qe(e,s)))p=!0,d&&(h=h||s-m-1>r&&" "!==e[m+1],m=s);else if(!Be(l))return 5;v=v&&ze(l,f,u),f=l}h=h||d&&s-m-1>r&&" "!==e[m+1]}return p||h?n>9&&Ue(e)?5:i?2===a?5:2:h?4:3:!v||i||o(e)?2===a?5:2:1}function We(e,t,n,r,o){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==Ie.indexOf(t)||Ne.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,n),i=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),s=r||e.flowLevel>-1&&n>=e.flowLevel;switch(Ve(t,s,e.indent,i,(function(t){return function(e,t){var n,r;for(n=0,r=e.implicitTypes.length;n"+He(t,e.indent)+$e(Re(function(e,t){var n,r,o=/(\n+)([^\n]*)/g,a=(u=e.indexOf("\n"),u=-1!==u?u:e.length,o.lastIndex=u,Je(e.slice(0,u),t)),i="\n"===e[0]||" "===e[0];var u;for(;r=o.exec(e);){var s=r[1],c=r[2];n=" "===c[0],a+=s+(i||n||""===c?"":"\n")+Je(c,t),i=n}return a}(t,i),a));case 5:return'"'+function(e){for(var t,n="",r=0,o=0;o=65536?o+=2:o++)r=qe(e,o),!(t=Te[r])&&Be(r)?(n+=e[o],r>=65536&&(n+=e[o+1])):n+=t||Pe(r);return n}(t)+'"';default:throw new u("impossible error: invalid scalar style")}}()}function He(e,t){var n=Ue(e)?String(t):"",r="\n"===e[e.length-1];return n+(r&&("\n"===e[e.length-2]||"\n"===e)?"+":r?"":"-")+"\n"}function $e(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function Je(e,t){if(""===e||" "===e[0])return e;for(var n,r,o=/ [^ ]/g,a=0,i=0,u=0,s="";n=o.exec(e);)(u=n.index)-a>t&&(r=i>a?i:u,s+="\n"+e.slice(a,r),a=r+1),i=u;return s+="\n",e.length-a>t&&i>a?s+=e.slice(a,i)+"\n"+e.slice(i+1):s+=e.slice(a),s.slice(1)}function Ke(e,t,n,r){var o,a,i,u="",s=e.tag;for(o=0,a=n.length;o tag resolver accepts not "'+c+'" style');r=s.represent[c](t,c)}e.dump=r}return!0}return!1}function Ge(e,t,n,r,o,a,i){e.tag=null,e.dump=n,Ye(e,n,!1)||Ye(e,n,!0);var s,c=Oe.call(e.dump),l=r;r&&(r=e.flowLevel<0||e.flowLevel>t);var f,p,h="[object Object]"===c||"[object Array]"===c;if(h&&(p=-1!==(f=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||p||2!==e.indent&&t>0)&&(o=!1),p&&e.usedDuplicates[f])e.dump="*ref_"+f;else{if(h&&p&&!e.usedDuplicates[f]&&(e.usedDuplicates[f]=!0),"[object Object]"===c)r&&0!==Object.keys(e.dump).length?(!function(e,t,n,r){var o,a,i,s,c,l,f="",p=e.tag,h=Object.keys(n);if(!0===e.sortKeys)h.sort();else if("function"==typeof e.sortKeys)h.sort(e.sortKeys);else if(e.sortKeys)throw new u("sortKeys must be a boolean or a function");for(o=0,a=h.length;o 1024)&&(e.dump&&10===e.dump.charCodeAt(0)?l+="?":l+="? "),l+=e.dump,c&&(l+=De(e,t)),Ge(e,t+1,s,!0,c)&&(e.dump&&10===e.dump.charCodeAt(0)?l+=":":l+=": ",f+=l+=e.dump));e.tag=p,e.dump=f||"{}"}(e,t,e.dump,o),p&&(e.dump="&ref_"+f+e.dump)):(!function(e,t,n){var r,o,a,i,u,s="",c=e.tag,l=Object.keys(n);for(r=0,o=l.length;r1024&&(u+="? "),u+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ge(e,t,i,!1,!1)&&(s+=u+=e.dump));e.tag=c,e.dump="{"+s+"}"}(e,t,e.dump),p&&(e.dump="&ref_"+f+" "+e.dump));else if("[object Array]"===c)r&&0!==e.dump.length?(e.noArrayIndent&&!i&&t>0?Ke(e,t-1,e.dump,o):Ke(e,t,e.dump,o),p&&(e.dump="&ref_"+f+e.dump)):(!function(e,t,n){var r,o,a,i="",u=e.tag;for(r=0,o=n.length;r",e.dump=s+" "+e.dump)}return!0}function Qe(e,t){var n,r,o=[],a=[];for(Ze(e,o,a),n=0,r=a.length;n=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values"),a.Arguments=a.Array,o("keys"),o("values"),o("entries")},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){"use strict";(function(t){function n(e){return e instanceof t||e instanceof Date||e instanceof RegExp}function r(e){if(e instanceof t){var n=t.alloc?t.alloc(e.length):new t(e.length);return e.copy(n),n}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function o(e){var t=[];return e.forEach((function(e,a){"object"==typeof e&&null!==e?Array.isArray(e)?t[a]=o(e):n(e)?t[a]=r(e):t[a]=i({},e):t[a]=e})),t}function a(e,t){return"__proto__"===t?void 0:e[t]}var i=e.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,u=arguments[0],s=Array.prototype.slice.call(arguments,1);return s.forEach((function(s){"object"!=typeof s||null===s||Array.isArray(s)||Object.keys(s).forEach((function(c){return t=a(u,c),(e=a(s,c))===u?void 0:"object"!=typeof e||null===e?void(u[c]=e):Array.isArray(e)?void(u[c]=o(e)):n(e)?void(u[c]=r(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(u[c]=i({},e)):void(u[c]=i(t,e))}))})),u}}).call(this,n(132).Buffer)},function(e,t,n){e.exports=n(619)},function(e,t,n){"use strict";var r=n(946),o=n(947);function a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=b,t.resolve=function(e,t){return b(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?b(e,!1,!0).resolveObject(t):t},t.format=function(e){o.isString(e)&&(e=b(e));return e instanceof a?e.format():a.prototype.format.call(e)},t.Url=a;var i=/^([a-z0-9.+-]+:)/i,u=/:[0-9]*$/,s=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,c=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),l=["'"].concat(c),f=["%","/","?",";","#"].concat(l),p=["/","?","#"],h=/^[+a-z0-9A-Z_-]{0,63}$/,d=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,m={javascript:!0,"javascript:":!0},v={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},y=n(948);function b(e,t,n){if(e&&o.isObject(e)&&e instanceof a)return e;var r=new a;return r.parse(e,t,n),r}a.prototype.parse=function(e,t,n){if(!o.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var a=e.indexOf("?"),u=-1!==a&&a127?P+="x":P+=N[M];if(!P.match(h)){var D=T.slice(0,O),L=T.slice(O+1),B=N.match(d);B&&(D.push(B[1]),L.unshift(B[2])),L.length&&(b="/"+L.join(".")+b),this.hostname=D.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),j||(this.hostname=r.toASCII(this.hostname));var F=this.port?":"+this.port:"",z=this.hostname||"";this.host=z+F,this.href+=this.host,j&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==b[0]&&(b="/"+b))}if(!m[_])for(O=0,I=l.length;O0)&&n.host.split("@"))&&(n.auth=j.shift(),n.host=n.hostname=j.shift());return n.search=e.search,n.query=e.query,o.isNull(n.pathname)&&o.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!E.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var k=E.slice(-1)[0],A=(n.host||e.host||E.length>1)&&("."===k||".."===k)||""===k,O=0,C=E.length;C>=0;C--)"."===(k=E[C])?E.splice(C,1):".."===k?(E.splice(C,1),O++):O&&(E.splice(C,1),O--);if(!x&&!_)for(;O--;O)E.unshift("..");!x||""===E[0]||E[0]&&"/"===E[0].charAt(0)||E.unshift(""),A&&"/"!==E.join("/").substr(-1)&&E.push("");var j,T=""===E[0]||E[0]&&"/"===E[0].charAt(0);S&&(n.hostname=n.host=T?"":E.length?E.shift():"",(j=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=j.shift(),n.host=n.hostname=j.shift()));return(x=x||n.host&&E.length)&&!T&&E.unshift(""),E.length?n.pathname=E.join("/"):(n.pathname=null,n.path=null),o.isNull(n.pathname)&&o.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},a.prototype.parseHost=function(){var e=this.host,t=u.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){"use strict";n.r(t),n.d(t,"SHOW_AUTH_POPUP",(function(){return h})),n.d(t,"AUTHORIZE",(function(){return d})),n.d(t,"LOGOUT",(function(){return m})),n.d(t,"PRE_AUTHORIZE_OAUTH2",(function(){return v})),n.d(t,"AUTHORIZE_OAUTH2",(function(){return g})),n.d(t,"VALIDATE",(function(){return y})),n.d(t,"CONFIGURE_AUTH",(function(){return b})),n.d(t,"RESTORE_AUTHORIZATION",(function(){return w})),n.d(t,"showDefinitions",(function(){return x})),n.d(t,"authorize",(function(){return _})),n.d(t,"authorizeWithPersistOption",(function(){return E})),n.d(t,"logout",(function(){return S})),n.d(t,"logoutWithPersistOption",(function(){return k})),n.d(t,"preAuthorizeImplicit",(function(){return A})),n.d(t,"authorizeOauth2",(function(){return O})),n.d(t,"authorizeOauth2WithPersistOption",(function(){return C})),n.d(t,"authorizePassword",(function(){return j})),n.d(t,"authorizeApplication",(function(){return T})),n.d(t,"authorizeAccessCodeWithFormParams",(function(){return I})),n.d(t,"authorizeAccessCodeWithBasicAuthentication",(function(){return N})),n.d(t,"authorizeRequest",(function(){return P})),n.d(t,"configureAuth",(function(){return M})),n.d(t,"restoreAuthorization",(function(){return R})),n.d(t,"persistAuthorizationIfNeeded",(function(){return D}));var r=n(19),o=n.n(r),a=n(32),i=n.n(a),u=n(21),s=n.n(u),c=n(89),l=n.n(c),f=n(26),p=n(5),h="show_popup",d="authorize",m="logout",v="pre_authorize_oauth2",g="authorize_oauth2",y="validate",b="configure_auth",w="restore_authorization";function x(e){return{type:h,payload:e}}function _(e){return{type:d,payload:e}}var E=function(e){return function(t){var n=t.authActions;n.authorize(e),n.persistAuthorizationIfNeeded()}};function S(e){return{type:m,payload:e}}var k=function(e){return function(t){var n=t.authActions;n.logout(e),n.persistAuthorizationIfNeeded()}},A=function(e){return function(t){var n=t.authActions,r=t.errActions,o=e.auth,a=e.token,u=e.isValid,s=o.schema,c=o.name,l=s.get("flow");delete f.a.swaggerUIRedirectOauth2,"accessCode"===l||u||r.newAuthErr({authId:c,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),a.error?r.newAuthErr({authId:c,source:"auth",level:"error",message:i()(a)}):n.authorizeOauth2WithPersistOption({auth:o,token:a})}};function O(e){return{type:g,payload:e}}var C=function(e){return function(t){var n=t.authActions;n.authorizeOauth2(e),n.persistAuthorizationIfNeeded()}},j=function(e){return function(t){var n=t.authActions,r=e.schema,o=e.name,a=e.username,i=e.password,u=e.passwordType,c=e.clientId,l=e.clientSecret,f={grant_type:"password",scope:e.scopes.join(" "),username:a,password:i},h={};switch(u){case"request-body":!function(e,t,n){t&&s()(e,{client_id:t});n&&s()(e,{client_secret:n})}(f,c,l);break;case"basic":h.Authorization="Basic "+Object(p.a)(c+":"+l);break;default:console.warn("Warning: invalid passwordType ".concat(u," was passed, not including client id and secret"))}return n.authorizeRequest({body:Object(p.b)(f),url:r.get("tokenUrl"),name:o,headers:h,query:{},auth:e})}};var T=function(e){return function(t){var n=t.authActions,r=e.schema,o=e.scopes,a=e.name,i=e.clientId,u=e.clientSecret,s={Authorization:"Basic "+Object(p.a)(i+":"+u)},c={grant_type:"client_credentials",scope:o.join(" ")};return n.authorizeRequest({body:Object(p.b)(c),name:a,url:r.get("tokenUrl"),auth:e,headers:s})}},I=function(e){var t=e.auth,n=e.redirectUrl;return function(e){var r=e.authActions,o=t.schema,a=t.name,i=t.clientId,u=t.clientSecret,s=t.codeVerifier,c={grant_type:"authorization_code",code:t.code,client_id:i,client_secret:u,redirect_uri:n,code_verifier:s};return r.authorizeRequest({body:Object(p.b)(c),name:a,url:o.get("tokenUrl"),auth:t})}},N=function(e){var t=e.auth,n=e.redirectUrl;return function(e){var r=e.authActions,o=t.schema,a=t.name,i=t.clientId,u=t.clientSecret,s=t.codeVerifier,c={Authorization:"Basic "+Object(p.a)(i+":"+u)},l={grant_type:"authorization_code",code:t.code,client_id:i,redirect_uri:n,code_verifier:s};return r.authorizeRequest({body:Object(p.b)(l),name:a,url:o.get("tokenUrl"),auth:t,headers:c})}},P=function(e){return function(t){var n,r=t.fn,a=t.getConfigs,u=t.authActions,c=t.errActions,f=t.oas3Selectors,p=t.specSelectors,h=t.authSelectors,d=e.body,m=e.query,v=void 0===m?{}:m,g=e.headers,y=void 0===g?{}:g,b=e.name,w=e.url,x=e.auth,_=(h.getConfigs()||{}).additionalQueryStringParams;if(p.isOAS3()){var E=f.serverEffectiveValue(f.selectedServer());n=l()(w,E,!0)}else n=l()(w,p.url(),!0);"object"===o()(_)&&(n.query=s()({},n.query,_));var S=n.toString(),k=s()({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},y);r.fetch({url:S,method:"post",headers:k,query:v,body:d,requestInterceptor:a().requestInterceptor,responseInterceptor:a().responseInterceptor}).then((function(e){var t=JSON.parse(e.data),n=t&&(t.error||""),r=t&&(t.parseError||"");e.ok?n||r?c.newAuthErr({authId:b,level:"error",source:"auth",message:i()(t)}):u.authorizeOauth2WithPersistOption({auth:x,token:t}):c.newAuthErr({authId:b,level:"error",source:"auth",message:e.statusText})})).catch((function(e){var t=new Error(e).message;if(e.response&&e.response.data){var n=e.response.data;try{var r="string"==typeof n?JSON.parse(n):n;r.error&&(t+=", error: ".concat(r.error)),r.error_description&&(t+=", description: ".concat(r.error_description))}catch(e){}}c.newAuthErr({authId:b,level:"error",source:"auth",message:t})}))}};function M(e){return{type:b,payload:e}}function R(e){return{type:w,payload:e}}var D=function(){return function(e){var t=e.authSelectors;if((0,e.getConfigs)().persistAuthorization){var n=t.authorized();localStorage.setItem("authorized",i()(n.toJS()))}}}},function(e,t,n){var r=n(919);e.exports=function(e){for(var t=1;tS;S++)if((h||S in x)&&(b=_(y=x[S],S,w),e))if(t)A[S]=b;else if(b)switch(e){case 3:return!0;case 5:return y;case 6:return S;case 2:c(A,y)}else switch(e){case 4:return!1;case 7:c(A,y)}return f?-1:o||l?l:A}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},function(e,t,n){"use strict";n.r(t),n.d(t,"lastError",(function(){return M})),n.d(t,"url",(function(){return R})),n.d(t,"specStr",(function(){return D})),n.d(t,"specSource",(function(){return L})),n.d(t,"specJson",(function(){return B})),n.d(t,"specResolved",(function(){return F})),n.d(t,"specResolvedSubtree",(function(){return z})),n.d(t,"specJsonWithResolvedSubtrees",(function(){return U})),n.d(t,"spec",(function(){return V})),n.d(t,"isOAS3",(function(){return W})),n.d(t,"info",(function(){return H})),n.d(t,"externalDocs",(function(){return $})),n.d(t,"version",(function(){return J})),n.d(t,"semver",(function(){return K})),n.d(t,"paths",(function(){return Y})),n.d(t,"operations",(function(){return G})),n.d(t,"consumes",(function(){return Q})),n.d(t,"produces",(function(){return Z})),n.d(t,"security",(function(){return X})),n.d(t,"securityDefinitions",(function(){return ee})),n.d(t,"findDefinition",(function(){return te})),n.d(t,"definitions",(function(){return ne})),n.d(t,"basePath",(function(){return re})),n.d(t,"host",(function(){return oe})),n.d(t,"schemes",(function(){return ae})),n.d(t,"operationsWithRootInherited",(function(){return ie})),n.d(t,"tags",(function(){return ue})),n.d(t,"tagDetails",(function(){return se})),n.d(t,"operationsWithTags",(function(){return ce})),n.d(t,"taggedOperations",(function(){return le})),n.d(t,"responses",(function(){return fe})),n.d(t,"requests",(function(){return pe})),n.d(t,"mutatedRequests",(function(){return he})),n.d(t,"responseFor",(function(){return de})),n.d(t,"requestFor",(function(){return me})),n.d(t,"mutatedRequestFor",(function(){return ve})),n.d(t,"allowTryItOutFor",(function(){return ge})),n.d(t,"parameterWithMetaByIdentity",(function(){return ye})),n.d(t,"parameterInclusionSettingFor",(function(){return be})),n.d(t,"parameterWithMeta",(function(){return we})),n.d(t,"operationWithMeta",(function(){return xe})),n.d(t,"getParameter",(function(){return _e})),n.d(t,"hasHost",(function(){return Ee})),n.d(t,"parameterValues",(function(){return Se})),n.d(t,"parametersIncludeIn",(function(){return ke})),n.d(t,"parametersIncludeType",(function(){return Ae})),n.d(t,"contentTypeValues",(function(){return Oe})),n.d(t,"currentProducesFor",(function(){return Ce})),n.d(t,"producesOptionsFor",(function(){return je})),n.d(t,"consumesOptionsFor",(function(){return Te})),n.d(t,"operationScheme",(function(){return Ie})),n.d(t,"canExecuteScheme",(function(){return Ne})),n.d(t,"validateBeforeExecute",(function(){return Pe})),n.d(t,"getOAS3RequiredRequestBodyContentType",(function(){return Me})),n.d(t,"isMediaTypeSchemaPropertiesEqual",(function(){return Re}));var r=n(13),o=n.n(r),a=n(14),i=n.n(a),u=n(2),s=n.n(u),c=n(20),l=n.n(c),f=n(23),p=n.n(f),h=n(18),d=n.n(h),m=n(4),v=n.n(m),g=n(12),y=n.n(g),b=n(56),w=n.n(b),x=n(30),_=n.n(x),E=n(196),S=n.n(E),k=n(71),A=n.n(k),O=n(24),C=n.n(O),j=n(16),T=n(5),I=n(1),N=["get","put","post","delete","options","head","patch","trace"],P=function(e){return e||Object(I.Map)()},M=Object(j.a)(P,(function(e){return e.get("lastError")})),R=Object(j.a)(P,(function(e){return e.get("url")})),D=Object(j.a)(P,(function(e){return e.get("spec")||""})),L=Object(j.a)(P,(function(e){return e.get("specSource")||"not-editor"})),B=Object(j.a)(P,(function(e){return e.get("json",Object(I.Map)())})),F=Object(j.a)(P,(function(e){return e.get("resolved",Object(I.Map)())})),z=function(e,t){var n;return e.getIn(s()(n=["resolvedSubtrees"]).call(n,i()(t)),void 0)},q=function e(t,n){return I.Map.isMap(t)&&I.Map.isMap(n)?n.get("$$ref")?n:Object(I.OrderedMap)().mergeWith(e,t,n):n},U=Object(j.a)(P,(function(e){return Object(I.OrderedMap)().mergeWith(q,e.get("json"),e.get("resolvedSubtrees"))})),V=function(e){return B(e)},W=Object(j.a)(V,(function(){return!1})),H=Object(j.a)(V,(function(e){return De(e&&e.get("info"))})),$=Object(j.a)(V,(function(e){return De(e&&e.get("externalDocs"))})),J=Object(j.a)(H,(function(e){return e&&e.get("version")})),K=Object(j.a)(J,(function(e){var t;return l()(t=/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(e)).call(t,1)})),Y=Object(j.a)(U,(function(e){return e.get("paths")})),G=Object(j.a)(Y,(function(e){if(!e||e.size<1)return Object(I.List)();var t=Object(I.List)();return e&&p()(e)?(p()(e).call(e,(function(e,n){if(!e||!p()(e))return{};p()(e).call(e,(function(e,r){var o;d()(N).call(N,r)<0||(t=t.push(Object(I.fromJS)({path:n,method:r,operation:e,id:s()(o="".concat(r,"-")).call(o,n)})))}))})),t):Object(I.List)()})),Q=Object(j.a)(V,(function(e){return Object(I.Set)(e.get("consumes"))})),Z=Object(j.a)(V,(function(e){return Object(I.Set)(e.get("produces"))})),X=Object(j.a)(V,(function(e){return e.get("security",Object(I.List)())})),ee=Object(j.a)(V,(function(e){return e.get("securityDefinitions")})),te=function(e,t){var n=e.getIn(["resolvedSubtrees","definitions",t],null),r=e.getIn(["json","definitions",t],null);return n||r||null},ne=Object(j.a)(V,(function(e){var t=e.get("definitions");return I.Map.isMap(t)?t:Object(I.Map)()})),re=Object(j.a)(V,(function(e){return e.get("basePath")})),oe=Object(j.a)(V,(function(e){return e.get("host")})),ae=Object(j.a)(V,(function(e){return e.get("schemes",Object(I.Map)())})),ie=Object(j.a)(G,Q,Z,(function(e,t,n){return v()(e).call(e,(function(e){return e.update("operation",(function(e){if(e){if(!I.Map.isMap(e))return;return e.withMutations((function(e){return e.get("consumes")||e.update("consumes",(function(e){return Object(I.Set)(e).merge(t)})),e.get("produces")||e.update("produces",(function(e){return Object(I.Set)(e).merge(n)})),e}))}return Object(I.Map)()}))}))})),ue=Object(j.a)(V,(function(e){var t=e.get("tags",Object(I.List)());return I.List.isList(t)?y()(t).call(t,(function(e){return I.Map.isMap(e)})):Object(I.List)()})),se=function(e,t){var n,r=ue(e)||Object(I.List)();return w()(n=y()(r).call(r,I.Map.isMap)).call(n,(function(e){return e.get("name")===t}),Object(I.Map)())},ce=Object(j.a)(ie,ue,(function(e,t){return _()(e).call(e,(function(e,t){var n=Object(I.Set)(t.getIn(["operation","tags"]));return n.count()<1?e.update("default",Object(I.List)(),(function(e){return e.push(t)})):_()(n).call(n,(function(e,n){return e.update(n,Object(I.List)(),(function(e){return e.push(t)}))}),e)}),_()(t).call(t,(function(e,t){return e.set(t.get("name"),Object(I.List)())}),Object(I.OrderedMap)()))})),le=function(e){return function(t){var n,r=(0,t.getConfigs)(),o=r.tagsSorter,a=r.operationsSorter;return v()(n=ce(e).sortBy((function(e,t){return t}),(function(e,t){var n="function"==typeof o?o:T.H.tagsSorter[o];return n?n(e,t):null}))).call(n,(function(t,n){var r="function"==typeof a?a:T.H.operationsSorter[a],o=r?S()(t).call(t,r):t;return Object(I.Map)({tagDetails:se(e,n),operations:o})}))}},fe=Object(j.a)(P,(function(e){return e.get("responses",Object(I.Map)())})),pe=Object(j.a)(P,(function(e){return e.get("requests",Object(I.Map)())})),he=Object(j.a)(P,(function(e){return e.get("mutatedRequests",Object(I.Map)())})),de=function(e,t,n){return fe(e).getIn([t,n],null)},me=function(e,t,n){return pe(e).getIn([t,n],null)},ve=function(e,t,n){return he(e).getIn([t,n],null)},ge=function(){return!0},ye=function(e,t,n){var r,o,a=U(e).getIn(s()(r=["paths"]).call(r,i()(t),["parameters"]),Object(I.OrderedMap)()),u=e.getIn(s()(o=["meta","paths"]).call(o,i()(t),["parameters"]),Object(I.OrderedMap)()),c=v()(a).call(a,(function(e){var t,r,o,a=u.get(s()(t="".concat(n.get("in"),".")).call(t,n.get("name"))),i=u.get(s()(r=s()(o="".concat(n.get("in"),".")).call(o,n.get("name"),".hash-")).call(r,n.hashCode()));return Object(I.OrderedMap)().merge(e,a,i)}));return w()(c).call(c,(function(e){return e.get("in")===n.get("in")&&e.get("name")===n.get("name")}),Object(I.OrderedMap)())},be=function(e,t,n,r){var o,a,u=s()(o="".concat(r,".")).call(o,n);return e.getIn(s()(a=["meta","paths"]).call(a,i()(t),["parameter_inclusions",u]),!1)},we=function(e,t,n,r){var o,a=U(e).getIn(s()(o=["paths"]).call(o,i()(t),["parameters"]),Object(I.OrderedMap)()),u=w()(a).call(a,(function(e){return e.get("in")===r&&e.get("name")===n}),Object(I.OrderedMap)());return ye(e,t,u)},xe=function(e,t,n){var r,o=U(e).getIn(["paths",t,n],Object(I.OrderedMap)()),a=e.getIn(["meta","paths",t,n],Object(I.OrderedMap)()),i=v()(r=o.get("parameters",Object(I.List)())).call(r,(function(r){return ye(e,[t,n],r)}));return Object(I.OrderedMap)().merge(o,a).set("parameters",i)};function _e(e,t,n,r){var o;t=t||[];var a=e.getIn(s()(o=["meta","paths"]).call(o,i()(t),["parameters"]),Object(I.fromJS)([]));return w()(a).call(a,(function(e){return I.Map.isMap(e)&&e.get("name")===n&&e.get("in")===r}))||Object(I.Map)()}var Ee=Object(j.a)(V,(function(e){var t=e.get("host");return"string"==typeof t&&t.length>0&&"/"!==t[0]}));function Se(e,t,n){var r;t=t||[];var o=xe.apply(void 0,s()(r=[e]).call(r,i()(t))).get("parameters",Object(I.List)());return _()(o).call(o,(function(e,t){var r=n&&"body"===t.get("in")?t.get("value_xml"):t.get("value");return e.set(Object(T.A)(t,{allowHashes:!1}),r)}),Object(I.fromJS)({}))}function ke(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(I.List.isList(e))return A()(e).call(e,(function(e){return I.Map.isMap(e)&&e.get("in")===t}))}function Ae(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(I.List.isList(e))return A()(e).call(e,(function(e){return I.Map.isMap(e)&&e.get("type")===t}))}function Oe(e,t){var n,r;t=t||[];var o=U(e).getIn(s()(n=["paths"]).call(n,i()(t)),Object(I.fromJS)({})),a=e.getIn(s()(r=["meta","paths"]).call(r,i()(t)),Object(I.fromJS)({})),u=Ce(e,t),c=o.get("parameters")||new I.List,l=a.get("consumes_value")?a.get("consumes_value"):Ae(c,"file")?"multipart/form-data":Ae(c,"formData")?"application/x-www-form-urlencoded":void 0;return Object(I.fromJS)({requestContentType:l,responseContentType:u})}function Ce(e,t){var n,r;t=t||[];var o=U(e).getIn(s()(n=["paths"]).call(n,i()(t)),null);if(null!==o){var a=e.getIn(s()(r=["meta","paths"]).call(r,i()(t),["produces_value"]),null),u=o.getIn(["produces",0],null);return a||u||"application/json"}}function je(e,t){var n;t=t||[];var r=U(e),a=r.getIn(s()(n=["paths"]).call(n,i()(t)),null);if(null!==a){var u=t,c=o()(u,1)[0],l=a.get("produces",null),f=r.getIn(["paths",c,"produces"],null),p=r.getIn(["produces"],null);return l||f||p}}function Te(e,t){var n;t=t||[];var r=U(e),a=r.getIn(s()(n=["paths"]).call(n,i()(t)),null);if(null!==a){var u=t,c=o()(u,1)[0],l=a.get("consumes",null),f=r.getIn(["paths",c,"consumes"],null),p=r.getIn(["consumes"],null);return l||f||p}}var Ie=function(e,t,n){var r=e.get("url").match(/^([a-z][a-z0-9+\-.]*):/),o=C()(r)?r[1]:null;return e.getIn(["scheme",t,n])||e.getIn(["scheme","_defaultScheme"])||o||""},Ne=function(e,t,n){var r;return d()(r=["http","https"]).call(r,Ie(e,t,n))>-1},Pe=function(e,t){var n;t=t||[];var r=e.getIn(s()(n=["meta","paths"]).call(n,i()(t),["parameters"]),Object(I.fromJS)([])),o=!0;return p()(r).call(r,(function(e){var t=e.get("errors");t&&t.count()&&(o=!1)})),o},Me=function(e,t){var n,r,o={requestBody:!1,requestContentType:{}},a=e.getIn(s()(n=["resolvedSubtrees","paths"]).call(n,i()(t),["requestBody"]),Object(I.fromJS)([]));return a.size<1||(a.getIn(["required"])&&(o.requestBody=a.getIn(["required"])),p()(r=a.getIn(["content"]).entrySeq()).call(r,(function(e){var t=e[0];if(e[1].getIn(["schema","required"])){var n=e[1].getIn(["schema","required"]).toJS();o.requestContentType[t]=n}}))),o},Re=function(e,t,n,r){var o;if((n||r)&&n===r)return!0;var a=e.getIn(s()(o=["resolvedSubtrees","paths"]).call(o,i()(t),["requestBody","content"]),Object(I.fromJS)([]));if(a.size<2||!n||!r)return!1;var u=a.getIn([n,"schema","properties"],Object(I.fromJS)([])),c=a.getIn([r,"schema","properties"],Object(I.fromJS)([]));return!!u.equals(c)};function De(e){return I.Map.isMap(e)?e:new I.Map}},function(e,t,n){"use strict";(function(t){var r=n(847),o=n(848),a=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,i=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,u=/^[a-zA-Z]:/,s=new RegExp("^[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+");function c(e){return(e||"").toString().replace(s,"")}var l=[["#","hash"],["?","query"],function(e,t){return h(t.protocol)?e.replace(/\\/g,"/"):e},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d+)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],f={hash:1,query:1};function p(e){var n,r=("undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{}).location||{},o={},i=typeof(e=e||r);if("blob:"===e.protocol)o=new m(unescape(e.pathname),{});else if("string"===i)for(n in o=new m(e,{}),f)delete o[n];else if("object"===i){for(n in e)n in f||(o[n]=e[n]);void 0===o.slashes&&(o.slashes=a.test(e.href))}return o}function h(e){return"file:"===e||"ftp:"===e||"http:"===e||"https:"===e||"ws:"===e||"wss:"===e}function d(e,t){e=c(e),t=t||{};var n,r=i.exec(e),o=r[1]?r[1].toLowerCase():"",a=!!r[2],u=!!r[3],s=0;return a?u?(n=r[2]+r[3]+r[4],s=r[2].length+r[3].length):(n=r[2]+r[4],s=r[2].length):u?(n=r[3]+r[4],s=r[3].length):n=r[4],"file:"===o?s>=2&&(n=n.slice(2)):h(o)?n=r[4]:o?a&&(n=n.slice(2)):s>=2&&h(t.protocol)&&(n=r[4]),{protocol:o,slashes:a||h(o),slashesCount:s,rest:n}}function m(e,t,n){if(e=c(e),!(this instanceof m))return new m(e,t,n);var a,i,s,f,v,g,y=l.slice(),b=typeof t,w=this,x=0;for("object"!==b&&"string"!==b&&(n=t,t=null),n&&"function"!=typeof n&&(n=o.parse),a=!(i=d(e||"",t=p(t))).protocol&&!i.slashes,w.slashes=i.slashes||a&&t.slashes,w.protocol=i.protocol||t.protocol||"",e=i.rest,("file:"===i.protocol&&(2!==i.slashesCount||u.test(e))||!i.slashes&&(i.protocol||i.slashesCount<2||!h(w.protocol)))&&(y[3]=[/(.*)/,"pathname"]);x=4?[t[0],t[1],t[2],t[3],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[2],".").concat(t[3]),"".concat(t[3],".").concat(t[0]),"".concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[0]),"".concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[3],".").concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[2],".").concat(t[1],".").concat(t[0])]:void 0),g[r]}function b(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=e.filter((function(e){return"token"!==e})),o=y(r);return o.reduce((function(e,t){return p()({},e,n[t])}),t)}function w(e){return e.join(" ")}function x(e){var t=e.node,n=e.stylesheet,r=e.style,o=void 0===r?{}:r,a=e.useInlineStyles,i=e.key,u=t.properties,s=t.type,c=t.tagName,l=t.value;if("text"===s)return l;if(c){var f,h=function(e,t){var n=0;return function(r){return n+=1,r.map((function(r,o){return x({node:r,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(n,"-").concat(o)})}))}}(n,a);if(a){var m=Object.keys(n).reduce((function(e,t){return t.split(".").forEach((function(t){e.includes(t)||e.push(t)})),e}),[]),g=u.className&&u.className.includes("token")?["token"]:[],y=u.className&&g.concat(u.className.filter((function(e){return!m.includes(e)})));f=p()({},u,{className:w(y)||void 0,style:b(u.className,Object.assign({},u.style,o),n)})}else f=p()({},u,{className:w(u.className)});var _=h(t.children);return d.a.createElement(c,v()({key:i},f),_)}}var _=/\n/g;function E(e){var t=e.codeString,n=e.codeStyle,r=e.containerStyle,o=void 0===r?{float:"left",paddingRight:"10px"}:r,a=e.numberStyle,i=void 0===a?{}:a,u=e.startingLineNumber;return d.a.createElement("code",{style:Object.assign({},n,o)},function(e){var t=e.lines,n=e.startingLineNumber,r=e.style;return t.map((function(e,t){var o=t+n;return d.a.createElement("span",{key:"line-".concat(t),className:"react-syntax-highlighter-line-number",style:"function"==typeof r?r(o):r},"".concat(o,"\n"))}))}({lines:t.replace(/\n$/,"").split("\n"),style:i,startingLineNumber:u}))}function S(e,t){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(e),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:t},children:[{type:"text",value:e}]}}function k(e,t,n){var r,o={display:"inline-block",minWidth:(r=n,"".concat(r.toString().length,".25em")),paddingRight:"1em",textAlign:"right",userSelect:"none"},a="function"==typeof e?e(t):e;return p()({},o,a)}function A(e){var t=e.children,n=e.lineNumber,r=e.lineNumberStyle,o=e.largestLineNumber,a=e.showInlineLineNumbers,i=e.lineProps,u=void 0===i?{}:i,s=e.className,c=void 0===s?[]:s,l=e.showLineNumbers,f=e.wrapLongLines,h="function"==typeof u?u(n):u;if(h.className=c,n&&a){var d=k(r,n,o);t.unshift(S(n,d))}return f&l&&(h.style=p()({},h.style,{display:"flex"})),{type:"element",tagName:"span",properties:h,children:t}}function O(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=0;r2&&void 0!==arguments[2]?arguments[2]:[];return A({children:e,lineNumber:t,lineNumberStyle:u,largestLineNumber:i,showInlineLineNumbers:o,lineProps:n,className:a,showLineNumbers:r,wrapLongLines:s})}function m(e,t){if(r&&t&&o){var n=k(u,t,i);e.unshift(S(t,n))}return e}function v(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return t||r.length>0?d(e,n,r):m(e,n)}for(var g=function(){var e=l[h],t=e.children[0].value;if(t.match(_)){var n=t.split("\n");n.forEach((function(t,o){var i=r&&f.length+a,u={type:"text",value:"".concat(t,"\n")};if(0===o){var s=v(l.slice(p+1,h).concat(A({children:[u],className:e.properties.className})),i);f.push(s)}else if(o===n.length-1){if(l[h+1]&&l[h+1].children&&l[h+1].children[0]){var c=A({children:[{type:"text",value:"".concat(t)}],className:e.properties.className});l.splice(h+1,0,c)}else{var d=v([u],i,e.properties.className);f.push(d)}}else{var m=v([u],i,e.properties.className);f.push(m)}})),p=h}h++};h .hljs-title":{color:"#88C0D0"},"hljs-keyword":{color:"#81A1C1"},"hljs-literal":{color:"#81A1C1"},"hljs-symbol":{color:"#81A1C1"},"hljs-number":{color:"#B48EAD"},"hljs-regexp":{color:"#EBCB8B"},"hljs-string":{color:"#A3BE8C"},"hljs-title":{color:"#8FBCBB"},"hljs-params":{color:"#D8DEE9"},"hljs-bullet":{color:"#81A1C1"},"hljs-code":{color:"#8FBCBB"},"hljs-emphasis":{fontStyle:"italic"},"hljs-formula":{color:"#8FBCBB"},"hljs-strong":{fontWeight:"bold"},"hljs-link:hover":{textDecoration:"underline"},"hljs-quote":{color:"#4C566A"},"hljs-comment":{color:"#4C566A"},"hljs-doctag":{color:"#8FBCBB"},"hljs-meta":{color:"#5E81AC"},"hljs-meta-keyword":{color:"#5E81AC"},"hljs-meta-string":{color:"#A3BE8C"},"hljs-attr":{color:"#8FBCBB"},"hljs-attribute":{color:"#D8DEE9"},"hljs-builtin-name":{color:"#81A1C1"},"hljs-name":{color:"#81A1C1"},"hljs-section":{color:"#88C0D0"},"hljs-tag":{color:"#81A1C1"},"hljs-variable":{color:"#D8DEE9"},"hljs-template-variable":{color:"#D8DEE9"},"hljs-template-tag":{color:"#5E81AC"},"abnf .hljs-attribute":{color:"#88C0D0"},"abnf .hljs-symbol":{color:"#EBCB8B"},"apache .hljs-attribute":{color:"#88C0D0"},"apache .hljs-section":{color:"#81A1C1"},"arduino .hljs-built_in":{color:"#88C0D0"},"aspectj .hljs-meta":{color:"#D08770"},"aspectj > .hljs-title":{color:"#88C0D0"},"bnf .hljs-attribute":{color:"#8FBCBB"},"clojure .hljs-name":{color:"#88C0D0"},"clojure .hljs-symbol":{color:"#EBCB8B"},"coq .hljs-built_in":{color:"#88C0D0"},"cpp .hljs-meta-string":{color:"#8FBCBB"},"css .hljs-built_in":{color:"#88C0D0"},"css .hljs-keyword":{color:"#D08770"},"diff .hljs-meta":{color:"#8FBCBB"},"ebnf .hljs-attribute":{color:"#8FBCBB"},"glsl .hljs-built_in":{color:"#88C0D0"},"groovy .hljs-meta:not(:first-child)":{color:"#D08770"},"haxe .hljs-meta":{color:"#D08770"},"java .hljs-meta":{color:"#D08770"},"ldif .hljs-attribute":{color:"#8FBCBB"},"lisp .hljs-name":{color:"#88C0D0"},"lua .hljs-built_in":{color:"#88C0D0"},"moonscript .hljs-built_in":{color:"#88C0D0"},"nginx .hljs-attribute":{color:"#88C0D0"},"nginx .hljs-section":{color:"#5E81AC"},"pf .hljs-built_in":{color:"#88C0D0"},"processing .hljs-built_in":{color:"#88C0D0"},"scss .hljs-keyword":{color:"#81A1C1"},"stylus .hljs-keyword":{color:"#81A1C1"},"swift .hljs-meta":{color:"#D08770"},"vim .hljs-built_in":{color:"#88C0D0",fontStyle:"italic"},"yaml .hljs-meta":{color:"#D08770"}},obsidian:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#282b2e",color:"#e0e2e4"},"hljs-keyword":{color:"#93c763",fontWeight:"bold"},"hljs-selector-tag":{color:"#93c763",fontWeight:"bold"},"hljs-literal":{color:"#93c763",fontWeight:"bold"},"hljs-selector-id":{color:"#93c763"},"hljs-number":{color:"#ffcd22"},"hljs-attribute":{color:"#668bb0"},"hljs-code":{color:"white"},"hljs-class .hljs-title":{color:"white"},"hljs-section":{color:"white",fontWeight:"bold"},"hljs-regexp":{color:"#d39745"},"hljs-link":{color:"#d39745"},"hljs-meta":{color:"#557182"},"hljs-tag":{color:"#8cbbad"},"hljs-name":{color:"#8cbbad",fontWeight:"bold"},"hljs-bullet":{color:"#8cbbad"},"hljs-subst":{color:"#8cbbad"},"hljs-emphasis":{color:"#8cbbad"},"hljs-type":{color:"#8cbbad",fontWeight:"bold"},"hljs-built_in":{color:"#8cbbad"},"hljs-selector-attr":{color:"#8cbbad"},"hljs-selector-pseudo":{color:"#8cbbad"},"hljs-addition":{color:"#8cbbad"},"hljs-variable":{color:"#8cbbad"},"hljs-template-tag":{color:"#8cbbad"},"hljs-template-variable":{color:"#8cbbad"},"hljs-string":{color:"#ec7600"},"hljs-symbol":{color:"#ec7600"},"hljs-comment":{color:"#818e96"},"hljs-quote":{color:"#818e96"},"hljs-deletion":{color:"#818e96"},"hljs-selector-class":{color:"#A082BD"},"hljs-doctag":{fontWeight:"bold"},"hljs-title":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"}},"tomorrow-night":{"hljs-comment":{color:"#969896"},"hljs-quote":{color:"#969896"},"hljs-variable":{color:"#cc6666"},"hljs-template-variable":{color:"#cc6666"},"hljs-tag":{color:"#cc6666"},"hljs-name":{color:"#cc6666"},"hljs-selector-id":{color:"#cc6666"},"hljs-selector-class":{color:"#cc6666"},"hljs-regexp":{color:"#cc6666"},"hljs-deletion":{color:"#cc6666"},"hljs-number":{color:"#de935f"},"hljs-built_in":{color:"#de935f"},"hljs-builtin-name":{color:"#de935f"},"hljs-literal":{color:"#de935f"},"hljs-type":{color:"#de935f"},"hljs-params":{color:"#de935f"},"hljs-meta":{color:"#de935f"},"hljs-link":{color:"#de935f"},"hljs-attribute":{color:"#f0c674"},"hljs-string":{color:"#b5bd68"},"hljs-symbol":{color:"#b5bd68"},"hljs-bullet":{color:"#b5bd68"},"hljs-addition":{color:"#b5bd68"},"hljs-title":{color:"#81a2be"},"hljs-section":{color:"#81a2be"},"hljs-keyword":{color:"#b294bb"},"hljs-selector-tag":{color:"#b294bb"},hljs:{display:"block",overflowX:"auto",background:"#1d1f21",color:"#c5c8c6",padding:"0.5em"},"hljs-emphasis":{fontStyle:"italic"},"hljs-strong":{fontWeight:"bold"}}},X=o()(Z),ee=function(e){return i()(X).call(X,e)?Z[e]:(console.warn("Request style '".concat(e,"' is not available, returning default instead")),Q)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.File=t.Blob=t.FormData=void 0;const r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window;t.FormData=r.FormData,t.Blob=r.Blob,t.File=r.File},function(e,t){var n=Function.prototype,r=n.apply,o=n.bind,a=n.call;e.exports="object"==typeof Reflect&&Reflect.apply||(o?a.bind(r):function(){return a.apply(r,arguments)})},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(58);e.exports=r("navigator","userAgent")||""},function(e,t){e.exports=!0},function(e,t){},function(e,t,n){var r,o=n(51),a=n(218),i=n(221),u=n(150),s=n(335),c=n(214),l=n(173),f=l("IE_PROTO"),p=function(){},h=function(e){return"