mirror of
https://github.com/m1k1o/neko.git
synced 2025-04-28 09:56:20 +02:00
1542 lines
44 KiB
YAML
1542 lines
44 KiB
YAML
openapi: 3.0.0
|
|
|
|
info:
|
|
title: Neko API Reference
|
|
version: "3.0.0"
|
|
description: |
|
|
Neko uses WebRTC and WebSocket besides REST API to provide real-time video streaming, interactive collaboration, and remote desktop functionality.
|
|
|
|
### Core Technologies
|
|
|
|
- **Video Streaming over WebRTC**
|
|
- Neko leverages **WebRTC** for real-time, low-latency, high-quality video and audio streaming.
|
|
- Keyboard and mouse events are transmitted over the same WebRTC connection for seamless interaction.
|
|
|
|
- **Real-Time Signaling and Communication over WebSocket**
|
|
- **WebSocket** is used for sSignaling in WebRTC (e.g., session establishment, ICE candidate exchange).
|
|
- Live chat, session updates, and keyboard/mouse fallback are handled over WebSocket.
|
|
|
|
- **REST API for Everything Else**
|
|
- **Authentication & Session Management** - Secure user authentication and session handling.
|
|
- **Room and User Management** - Creating, modifying, and controlling user access to rooms.
|
|
- **Desktop Controls** - Adjusting screen configurations, managing keyboard and mouse events.
|
|
- **System Health & Metrics** - Retrieving system health checks and operational insights.
|
|
|
|
### How It All Works Together
|
|
|
|
1. **WebRTC** handles media streaming for **real-time video, audio and data**.
|
|
2. **WebSocket** ensures a **persistent, bidirectional** connection for low-latency interactions.
|
|
3. **REST API** provides **fine-grained control** over user access, and room configuration.
|
|
|
|
For more details, refer to the full API documentation.
|
|
license:
|
|
name: Apache 2.0
|
|
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
|
|
|
|
servers:
|
|
- description: Local server
|
|
url: http://localhost:3000
|
|
|
|
tags:
|
|
- name: general
|
|
description: General endpoints for the API.
|
|
x-displayName: General
|
|
- name: current-session
|
|
description: Endpoints for managing the current user session.
|
|
x-displayName: Current Session
|
|
- name: sessions
|
|
description: Endpoints for managing user sessions.
|
|
x-displayName: Sessions
|
|
- name: members
|
|
description: Endpoints for managing members.
|
|
x-displayName: Members
|
|
- name: room-settings
|
|
description: Endpoints for managing room settings.
|
|
x-displayName: Room Settings
|
|
- name: room-broadcast
|
|
description: Endpoints for managing room broadcasts.
|
|
x-displayName: Room Broadcast
|
|
- name: room-clipboard
|
|
description: Endpoints for managing the room clipboard.
|
|
x-displayName: Room Clipboard
|
|
- name: room-keyboard
|
|
description: Endpoints for managing the room keyboard.
|
|
x-displayName: Room Keyboard
|
|
- name: room-control
|
|
description: Endpoints for managing room control.
|
|
x-displayName: Room Control
|
|
- name: room-screen
|
|
description: Endpoints for managing room screen configurations.
|
|
x-displayName: Room Screen
|
|
- name: room-upload
|
|
description: Endpoints for uploading files to the room.
|
|
x-displayName: Room Upload
|
|
|
|
paths:
|
|
/health:
|
|
get:
|
|
tags:
|
|
- general
|
|
summary: Health Check
|
|
description: Check the health status of the API.
|
|
operationId: healthcheck
|
|
security: []
|
|
responses:
|
|
'200':
|
|
description: The API is healthy.
|
|
/metrics:
|
|
get:
|
|
tags:
|
|
- general
|
|
summary: Metrics
|
|
description: Retrieve metrics for the API.
|
|
operationId: metrics
|
|
security: []
|
|
responses:
|
|
'200':
|
|
description: Metrics retrieved successfully.
|
|
|
|
/api/batch:
|
|
post:
|
|
tags:
|
|
- general
|
|
summary: Batch Request
|
|
description: Execute multiple API requests in a single call.
|
|
operationId: batch
|
|
responses:
|
|
'200':
|
|
description: Batch request executed successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/BatchResponse'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/BatchRequest'
|
|
required: true
|
|
/api/stats:
|
|
get:
|
|
tags:
|
|
- general
|
|
summary: Get Stats
|
|
description: Retrieve statistics about the server and user sessions.
|
|
operationId: stats
|
|
responses:
|
|
'200':
|
|
description: Statistics retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Stats'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
|
|
#
|
|
# current session
|
|
#
|
|
|
|
/api/login:
|
|
post:
|
|
tags:
|
|
- current-session
|
|
summary: User Login
|
|
description: Authenticate a user and start a new session.
|
|
operationId: login
|
|
security: []
|
|
responses:
|
|
'200':
|
|
description: User authenticated successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/SessionLoginResponse'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/SessionLoginRequest'
|
|
required: true
|
|
/api/logout:
|
|
post:
|
|
tags:
|
|
- current-session
|
|
summary: User Logout
|
|
description: Terminate the current user session.
|
|
operationId: logout
|
|
responses:
|
|
'200':
|
|
description: User logged out successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
/api/whoami:
|
|
get:
|
|
tags:
|
|
- current-session
|
|
summary: Get Current User
|
|
description: Retrieve information about the current user session.
|
|
operationId: whoami
|
|
responses:
|
|
'200':
|
|
description: Current user information retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/SessionData'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
/api/profile:
|
|
post:
|
|
tags:
|
|
- current-session
|
|
summary: Update Profile
|
|
description: Update the current user's profile without syncing it with the member profile (experimental).
|
|
operationId: profile
|
|
responses:
|
|
'204':
|
|
description: Profile updated successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MemberProfile'
|
|
required: true
|
|
|
|
#
|
|
# sessions
|
|
#
|
|
|
|
/api/sessions:
|
|
get:
|
|
tags:
|
|
- sessions
|
|
summary: List Sessions
|
|
description: Retrieve a list of all active sessions.
|
|
operationId: sessionsGet
|
|
responses:
|
|
'200':
|
|
description: Sessions retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/SessionData'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
/api/sessions/{sessionId}:
|
|
get:
|
|
tags:
|
|
- sessions
|
|
summary: Get Session
|
|
description: Retrieve information about a specific session.
|
|
operationId: sessionGet
|
|
parameters:
|
|
- in: path
|
|
name: sessionId
|
|
description: The identifier of the session.
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Session retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/SessionData'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
delete:
|
|
tags:
|
|
- sessions
|
|
summary: Remove Session
|
|
description: Terminate a specific session.
|
|
operationId: sessionRemove
|
|
parameters:
|
|
- in: path
|
|
name: sessionId
|
|
description: The identifier of the session.
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'204':
|
|
description: Session removed successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
/api/sessions/{sessionId}/disconnect:
|
|
post:
|
|
tags:
|
|
- sessions
|
|
summary: Disconnect Session
|
|
description: Forcefully disconnect a specific session.
|
|
operationId: sessionDisconnect
|
|
parameters:
|
|
- in: path
|
|
name: sessionId
|
|
description: The identifier of the session.
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'204':
|
|
description: Session disconnected successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
|
|
#
|
|
# room
|
|
#
|
|
|
|
/api/room/settings:
|
|
get:
|
|
tags:
|
|
- room-settings
|
|
summary: Get Room Settings
|
|
description: Retrieve the current settings of the room.
|
|
operationId: settingsGet
|
|
responses:
|
|
'200':
|
|
description: Room settings retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Settings'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
post:
|
|
tags:
|
|
- room-settings
|
|
summary: Update Room Settings
|
|
description: Update the settings of the room.
|
|
operationId: settingsSet
|
|
responses:
|
|
'204':
|
|
description: Room settings updated successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Settings'
|
|
required: true
|
|
|
|
/api/room/broadcast:
|
|
get:
|
|
tags:
|
|
- room-broadcast
|
|
summary: Get Broadcast Status
|
|
description: Retrieve the current broadcast status of the room.
|
|
operationId: broadcastStatus
|
|
responses:
|
|
'200':
|
|
description: Broadcast status retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/BroadcastStatus'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
/api/room/broadcast/start:
|
|
post:
|
|
tags:
|
|
- room-broadcast
|
|
summary: Start Broadcast
|
|
description: Start broadcasting the room's content.
|
|
operationId: broadcastStart
|
|
responses:
|
|
'204':
|
|
description: Broadcast started successfully.
|
|
'400':
|
|
description: Missing broadcast URL.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'422':
|
|
description: Server is already broadcasting.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
'500':
|
|
description: Unable to start broadcast.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/BroadcastStatus'
|
|
required: true
|
|
/api/room/broadcast/stop:
|
|
post:
|
|
tags:
|
|
- room-broadcast
|
|
summary: Stop Broadcast
|
|
description: Stop broadcasting the room's content.
|
|
operationId: broadcastStop
|
|
responses:
|
|
'204':
|
|
description: Broadcast stopped successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'422':
|
|
description: Server is not broadcasting.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
|
|
/api/room/clipboard:
|
|
get:
|
|
tags:
|
|
- room-clipboard
|
|
summary: Get Clipboard Content
|
|
description: Retrieve the current content of the clipboard (rich-text or plain-text).
|
|
operationId: clipboardGetText
|
|
responses:
|
|
'200':
|
|
description: Clipboard content retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ClipboardText'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'500':
|
|
description: Unable to get clipboard content.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
post:
|
|
tags:
|
|
- room-clipboard
|
|
summary: Set Clipboard Content
|
|
description: Update the content of the clipboard (rich-text or plain-text).
|
|
operationId: clipboardSetText
|
|
responses:
|
|
'204':
|
|
description: Clipboard content updated successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'500':
|
|
description: Unable to set clipboard content.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ClipboardText'
|
|
required: true
|
|
/api/room/clipboard/image.png:
|
|
get:
|
|
tags:
|
|
- room-clipboard
|
|
summary: Get Clipboard Image
|
|
description: Retrieve the current image content of the clipboard.
|
|
operationId: clipboardGetImage
|
|
responses:
|
|
'200':
|
|
description: Clipboard image retrieved successfully.
|
|
content:
|
|
image/png:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'500':
|
|
description: Unable to get clipboard content.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
|
|
/api/room/keyboard/map:
|
|
get:
|
|
tags:
|
|
- room-keyboard
|
|
summary: Get Keyboard Map
|
|
description: Retrieve the current keyboard map configuration.
|
|
operationId: keyboardMapGet
|
|
responses:
|
|
'200':
|
|
description: Keyboard map retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/KeyboardMap'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'500':
|
|
description: Unable to get keyboard map.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
post:
|
|
tags:
|
|
- room-keyboard
|
|
summary: Set Keyboard Map
|
|
description: Update the keyboard map configuration.
|
|
operationId: keyboardMapSet
|
|
responses:
|
|
'204':
|
|
description: Keyboard map updated successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'500':
|
|
description: Unable to change keyboard map.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/KeyboardMap'
|
|
required: true
|
|
/api/room/keyboard/modifiers:
|
|
get:
|
|
tags:
|
|
- room-keyboard
|
|
summary: Get Keyboard Modifiers
|
|
description: Retrieve the current keyboard modifiers status.
|
|
operationId: keyboardModifiersGet
|
|
responses:
|
|
'200':
|
|
description: Keyboard modifiers retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/KeyboardModifiers'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
post:
|
|
tags:
|
|
- room-keyboard
|
|
summary: Set Keyboard Modifiers
|
|
description: Update the keyboard modifiers status.
|
|
operationId: keyboardModifiersSet
|
|
responses:
|
|
'204':
|
|
description: Keyboard modifiers updated successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/KeyboardModifiers'
|
|
required: true
|
|
|
|
/api/room/control:
|
|
get:
|
|
tags:
|
|
- room-control
|
|
summary: Get Control Status
|
|
description: Retrieve the current control status of the room.
|
|
operationId: controlStatus
|
|
responses:
|
|
'200':
|
|
description: Control status retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ControlStatus'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
/api/room/control/request:
|
|
post:
|
|
tags:
|
|
- room-control
|
|
summary: Request Control
|
|
description: Request control of the room.
|
|
operationId: controlRequest
|
|
responses:
|
|
'204':
|
|
description: Control requested successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'422':
|
|
description: There is already a host.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
/api/room/control/release:
|
|
post:
|
|
tags:
|
|
- room-control
|
|
summary: Release Control
|
|
description: Release control of the room.
|
|
operationId: controlRelease
|
|
responses:
|
|
'204':
|
|
description: Control released successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'422':
|
|
description: There is already a host.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
/api/room/control/take:
|
|
post:
|
|
tags:
|
|
- room-control
|
|
summary: Take Control
|
|
description: Take control of the room.
|
|
operationId: controlTake
|
|
responses:
|
|
'204':
|
|
description: Control taken successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
/api/room/control/give/{sessionId}:
|
|
post:
|
|
tags:
|
|
- room-control
|
|
summary: Give Control
|
|
description: Give control of the room to a specific session.
|
|
operationId: controlGive
|
|
parameters:
|
|
- in: path
|
|
name: sessionId
|
|
description: The identifier of the session.
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'204':
|
|
description: Control given successfully.
|
|
'400':
|
|
description: Target session is not allowed to host.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
/api/room/control/reset:
|
|
post:
|
|
tags:
|
|
- room-control
|
|
summary: Reset Control
|
|
description: Reset the control status of the room.
|
|
operationId: controlReset
|
|
responses:
|
|
'204':
|
|
description: Control reset successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
|
|
/api/room/screen:
|
|
get:
|
|
tags:
|
|
- room-screen
|
|
summary: Get Screen Configuration
|
|
description: Retrieve the current screen configuration of the room.
|
|
operationId: screenConfiguration
|
|
responses:
|
|
'200':
|
|
description: Screen configuration retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ScreenConfiguration'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'500':
|
|
description: Unable to get screen configuration.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
post:
|
|
tags:
|
|
- room-screen
|
|
summary: Change Screen Configuration
|
|
description: Update the screen configuration of the room.
|
|
operationId: screenConfigurationChange
|
|
responses:
|
|
'200':
|
|
description: Screen configuration updated successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ScreenConfiguration'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'422':
|
|
description: Invalid screen configuration.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ScreenConfiguration'
|
|
required: true
|
|
/api/room/screen/configurations:
|
|
get:
|
|
tags:
|
|
- room-screen
|
|
summary: Get List of Screen Configurations
|
|
description: Retrieve a list of all available screen configurations.
|
|
operationId: screenConfigurationsList
|
|
responses:
|
|
'200':
|
|
description: List of screen configurations retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ScreenConfiguration'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
/api/room/screen/cast.jpg:
|
|
get:
|
|
tags:
|
|
- room-screen
|
|
summary: Get Screencast Image
|
|
description: Retrieve the current screencast image.
|
|
operationId: screenCastImage
|
|
responses:
|
|
'200':
|
|
description: Screencast image retrieved successfully.
|
|
content:
|
|
image/jpeg:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
'400':
|
|
description: Screencast is not enabled.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'500':
|
|
description: Unable to fetch image.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
/api/room/screen/shot.jpg:
|
|
get:
|
|
tags:
|
|
- room-screen
|
|
summary: Get Screenshot Image
|
|
description: Retrieve the current screenshot image.
|
|
operationId: screenShotImage
|
|
parameters:
|
|
- in: query
|
|
name: quality
|
|
description: Image quality (0-100).
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Screenshot image retrieved successfully.
|
|
content:
|
|
image/jpeg:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'500':
|
|
description: Unable to create image.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
|
|
/api/room/upload/drop:
|
|
post:
|
|
tags:
|
|
- room-upload
|
|
summary: Upload and Drop File
|
|
description: Upload a file and drop it at a specified location.
|
|
operationId: uploadDrop
|
|
responses:
|
|
'204':
|
|
description: File uploaded and dropped successfully.
|
|
'400':
|
|
description: Unable to upload file.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'500':
|
|
description: Unable to process uploaded file.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
requestBody:
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
x:
|
|
type: number
|
|
description: X coordinate of drop.
|
|
y:
|
|
type: number
|
|
description: Y coordinate of drop.
|
|
files:
|
|
type: array
|
|
description: Files to be uploaded.
|
|
items:
|
|
type: string
|
|
format: binary
|
|
required: true
|
|
/api/room/upload/dialog:
|
|
post:
|
|
tags:
|
|
- room-upload
|
|
summary: Upload File to Dialog
|
|
description: Upload a file to a dialog.
|
|
operationId: uploadDialog
|
|
responses:
|
|
'204':
|
|
description: File uploaded to dialog successfully.
|
|
'400':
|
|
description: Unable to upload file.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'422':
|
|
description: No upload dialog prompt active.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
'500':
|
|
description: Unable to process uploaded file.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
requestBody:
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
files:
|
|
type: array
|
|
description: Files to be uploaded.
|
|
items:
|
|
type: string
|
|
format: binary
|
|
required: true
|
|
delete:
|
|
tags:
|
|
- room-upload
|
|
summary: Close File Chooser Dialog
|
|
description: Close the file chooser dialog.
|
|
operationId: uploadDialogClose
|
|
responses:
|
|
'204':
|
|
description: File chooser dialog closed successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'422':
|
|
description: No upload dialog prompt active.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
|
|
#
|
|
# members
|
|
#
|
|
|
|
/api/members:
|
|
get:
|
|
tags:
|
|
- members
|
|
summary: List Members
|
|
description: Retrieve a list of all members.
|
|
operationId: membersList
|
|
parameters:
|
|
- in: query
|
|
name: limit
|
|
schema:
|
|
type: number
|
|
- in: query
|
|
name: offset
|
|
schema:
|
|
type: number
|
|
responses:
|
|
'200':
|
|
description: Members retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/MemberData'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
post:
|
|
tags:
|
|
- members
|
|
summary: Create Member
|
|
description: Create a new member.
|
|
operationId: membersCreate
|
|
responses:
|
|
'200':
|
|
description: Member created successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MemberData'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'422':
|
|
description: Member with chosen ID already exists.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MemberCreate'
|
|
required: true
|
|
/api/members/{memberId}:
|
|
get:
|
|
tags:
|
|
- members
|
|
summary: Get Member Profile
|
|
description: Retrieve the profile of a specific member.
|
|
operationId: membersGetProfile
|
|
parameters:
|
|
- in: path
|
|
name: memberId
|
|
description: The identifier of the member.
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Member profile retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MemberProfile'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
post:
|
|
tags:
|
|
- members
|
|
summary: Update Member Profile
|
|
description: Update the profile of a specific member.
|
|
operationId: membersUpdateProfile
|
|
parameters:
|
|
- in: path
|
|
name: memberId
|
|
description: The identifier of the member.
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'204':
|
|
description: Member profile updated successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MemberProfile'
|
|
required: true
|
|
delete:
|
|
tags:
|
|
- members
|
|
summary: Remove Member
|
|
description: Remove a specific member.
|
|
operationId: membersRemove
|
|
parameters:
|
|
- in: path
|
|
name: memberId
|
|
description: The identifier of the member.
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'204':
|
|
description: Member removed successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
/api/members/{memberId}/password:
|
|
post:
|
|
tags:
|
|
- members
|
|
summary: Update Member Password
|
|
description: Update the password of a specific member.
|
|
operationId: membersUpdatePassword
|
|
parameters:
|
|
- in: path
|
|
name: memberId
|
|
description: The identifier of the member.
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'204':
|
|
description: Member password updated successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MemberPassword'
|
|
required: true
|
|
/api/members_bulk/update:
|
|
post:
|
|
tags:
|
|
- members
|
|
summary: Bulk Update Members
|
|
description: Update the profiles of multiple members in bulk.
|
|
operationId: membersBulkUpdate
|
|
responses:
|
|
'204':
|
|
description: Members updated successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MemberBulkUpdate'
|
|
required: true
|
|
/api/members_bulk/delete:
|
|
post:
|
|
tags:
|
|
- members
|
|
summary: Bulk Delete Members
|
|
description: Remove multiple members in bulk.
|
|
operationId: membersBulkDelete
|
|
responses:
|
|
'204':
|
|
description: Members removed successfully.
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MemberBulkDelete'
|
|
required: true
|
|
|
|
components:
|
|
securitySchemes:
|
|
CookieAuth:
|
|
type: apiKey
|
|
in: cookie
|
|
name: NEKO_SESSION
|
|
description: Authentication using a session cookie.
|
|
BearerAuth:
|
|
type: http
|
|
scheme: bearer
|
|
description: Authentication using a Bearer token.
|
|
TokenAuth:
|
|
type: apiKey
|
|
in: query
|
|
name: token
|
|
description: Authentication using a token passed as a query parameter.
|
|
|
|
responses:
|
|
NotFound:
|
|
description: The specified resource was not found.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
Unauthorized:
|
|
description: The request requires user authentication.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
Forbidden:
|
|
description: The server understood the request, but refuses to authorize it.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ErrorMessage'
|
|
|
|
schemas:
|
|
ErrorMessage:
|
|
type: object
|
|
properties:
|
|
message:
|
|
type: string
|
|
description: Detailed error message.
|
|
|
|
BatchRequest:
|
|
type: object
|
|
properties:
|
|
path:
|
|
type: string
|
|
description: The API endpoint path.
|
|
method:
|
|
type: string
|
|
enum:
|
|
- GET
|
|
- POST
|
|
- DELETE
|
|
description: The HTTP method to be used.
|
|
body:
|
|
description: The request body for the API call.
|
|
|
|
BatchResponse:
|
|
type: object
|
|
properties:
|
|
path:
|
|
type: string
|
|
description: The API endpoint path.
|
|
method:
|
|
type: string
|
|
enum:
|
|
- GET
|
|
- POST
|
|
- DELETE
|
|
description: The HTTP method used.
|
|
body:
|
|
description: The response body from the API call.
|
|
status:
|
|
type: integer
|
|
description: The HTTP status code of the response.
|
|
|
|
Stats:
|
|
type: object
|
|
properties:
|
|
has_host:
|
|
type: boolean
|
|
description: Indicates if there is a host currently.
|
|
host_id:
|
|
type: string
|
|
description: The ID of the current host, if any.
|
|
server_started_at:
|
|
type: string
|
|
format: date-time
|
|
description: The timestamp when the server started.
|
|
total_users:
|
|
type: integer
|
|
description: The total number of users connected.
|
|
last_user_left_at:
|
|
type: string
|
|
format: date-time
|
|
description: The timestamp when the last user left, if any.
|
|
total_admins:
|
|
type: integer
|
|
description: The total number of admins connected.
|
|
last_admin_left_at:
|
|
type: string
|
|
format: date-time
|
|
description: The timestamp when the last admin left, if any.
|
|
|
|
#
|
|
# sessions
|
|
#
|
|
|
|
SessionLoginRequest:
|
|
type: object
|
|
properties:
|
|
username:
|
|
type: string
|
|
description: The username of the user.
|
|
password:
|
|
type: string
|
|
description: The password of the user.
|
|
|
|
SessionLoginResponse:
|
|
allOf:
|
|
- $ref: '#/components/schemas/SessionData'
|
|
- type: object
|
|
properties:
|
|
token:
|
|
type: string
|
|
description: The session token, only if cookie authentication is disabled.
|
|
|
|
SessionData:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: The unique identifier of the session.
|
|
profile:
|
|
$ref: '#/components/schemas/MemberProfile'
|
|
description: The profile information of the user.
|
|
state:
|
|
$ref: '#/components/schemas/SessionState'
|
|
description: The current state of the session.
|
|
|
|
SessionState:
|
|
type: object
|
|
properties:
|
|
is_connected:
|
|
type: boolean
|
|
description: Indicates if the user is connected.
|
|
is_watching:
|
|
type: boolean
|
|
description: Indicates if the user is watching.
|
|
|
|
#
|
|
# room
|
|
#
|
|
|
|
Settings:
|
|
type: object
|
|
properties:
|
|
private_mode:
|
|
type: boolean
|
|
description: Indicates if the room is in private mode.
|
|
locked_controls:
|
|
type: boolean
|
|
description: Indicates if the room controls are locked.
|
|
implicit_hosting:
|
|
type: boolean
|
|
description: Indicates if implicit hosting is enabled.
|
|
inactive_cursors:
|
|
type: boolean
|
|
description: Indicates if inactive cursors are shown.
|
|
merciful_reconnect:
|
|
type: boolean
|
|
description: Indicates if merciful reconnect is enabled.
|
|
plugins:
|
|
type: object
|
|
additionalProperties: true
|
|
description: Additional plugin settings.
|
|
|
|
BroadcastStatus:
|
|
type: object
|
|
properties:
|
|
url:
|
|
type: string
|
|
example: rtmp://localhost/live
|
|
description: The URL of the broadcast.
|
|
is_active:
|
|
type: boolean
|
|
description: Indicates if the broadcast is active.
|
|
|
|
ClipboardText:
|
|
type: object
|
|
properties:
|
|
text:
|
|
type: string
|
|
example: Copied Content 123
|
|
description: The plain text content of the clipboard.
|
|
html:
|
|
type: string
|
|
example: <b>Copied Content 123</b>
|
|
description: The HTML content of the clipboard.
|
|
|
|
KeyboardMap:
|
|
type: object
|
|
properties:
|
|
layout:
|
|
type: string
|
|
example: sk
|
|
description: The keyboard layout.
|
|
variant:
|
|
type: string
|
|
example: qwerty
|
|
description: The keyboard variant.
|
|
|
|
KeyboardModifiers:
|
|
type: object
|
|
properties:
|
|
shift:
|
|
type: boolean
|
|
description: Indicates if the shift key is pressed.
|
|
capslock:
|
|
type: boolean
|
|
description: Indicates if the caps lock key is active.
|
|
control:
|
|
type: boolean
|
|
description: Indicates if the control key is pressed.
|
|
alt:
|
|
type: boolean
|
|
description: Indicates if the alt key is pressed.
|
|
numlock:
|
|
type: boolean
|
|
description: Indicates if the num lock key is active.
|
|
meta:
|
|
type: boolean
|
|
description: Indicates if the meta key is pressed.
|
|
super:
|
|
type: boolean
|
|
description: Indicates if the super key is pressed.
|
|
altgr:
|
|
type: boolean
|
|
description: Indicates if the altgr key is pressed.
|
|
|
|
ControlStatus:
|
|
type: object
|
|
properties:
|
|
has_host:
|
|
type: boolean
|
|
description: Indicates if there is a host currently.
|
|
host_id:
|
|
type: string
|
|
description: The ID of the current host, if any.
|
|
|
|
ScreenConfiguration:
|
|
type: object
|
|
properties:
|
|
width:
|
|
type: integer
|
|
example: 1280
|
|
description: The width of the screen.
|
|
height:
|
|
type: integer
|
|
example: 720
|
|
description: The height of the screen.
|
|
rate:
|
|
type: integer
|
|
example: 30
|
|
description: The refresh rate of the screen.
|
|
|
|
#
|
|
# members
|
|
#
|
|
|
|
MemberProfile:
|
|
x-tags:
|
|
- members
|
|
type: object
|
|
properties:
|
|
name:
|
|
type: string
|
|
description: The name of the member.
|
|
is_admin:
|
|
type: boolean
|
|
description: Indicates if the member is an admin.
|
|
can_login:
|
|
type: boolean
|
|
description: Indicates if the member can log in.
|
|
can_connect:
|
|
type: boolean
|
|
description: Indicates if the member can connect.
|
|
can_watch:
|
|
type: boolean
|
|
description: Indicates if the member can watch.
|
|
can_host:
|
|
type: boolean
|
|
description: Indicates if the member can host.
|
|
can_share_media:
|
|
type: boolean
|
|
description: Indicates if the member can share media.
|
|
can_access_clipboard:
|
|
type: boolean
|
|
description: Indicates if the member can access the clipboard.
|
|
sends_inactive_cursor:
|
|
type: boolean
|
|
description: Indicates if the member sends inactive cursor.
|
|
can_see_inactive_cursors:
|
|
type: boolean
|
|
description: Indicates if the member can see inactive cursors.
|
|
plugins:
|
|
type: object
|
|
additionalProperties: true
|
|
description: Additional plugin settings.
|
|
|
|
MemberData:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: The unique identifier of the member.
|
|
profile:
|
|
$ref: '#/components/schemas/MemberProfile'
|
|
description: The profile information of the member.
|
|
|
|
MemberCreate:
|
|
type: object
|
|
properties:
|
|
username:
|
|
type: string
|
|
description: The username of the new member.
|
|
password:
|
|
type: string
|
|
description: The password of the new member.
|
|
profile:
|
|
$ref: '#/components/schemas/MemberProfile'
|
|
description: The profile information of the new member.
|
|
|
|
MemberPassword:
|
|
type: object
|
|
properties:
|
|
password:
|
|
type: string
|
|
description: The new password for the member.
|
|
|
|
MemberBulkUpdate:
|
|
type: object
|
|
properties:
|
|
ids:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: The list of member IDs to be updated.
|
|
profile:
|
|
$ref: '#/components/schemas/MemberProfile'
|
|
description: The new profile information for the members.
|
|
|
|
MemberBulkDelete:
|
|
type: object
|
|
properties:
|
|
ids:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: The list of member IDs to be deleted.
|
|
|
|
security:
|
|
- BearerAuth: []
|
|
- CookieAuth: []
|
|
- TokenAuth: []
|