feat(tui): username is now appended to download_dir before passed as parameter fix(tui): username is sanitized before appended to path
2555 lines
60 KiB
JSON
2555 lines
60 KiB
JSON
{
|
|
"components": {
|
|
"schemas": {
|
|
"Ack": {
|
|
"description": "A void result. JSON-RPC allows a null result, but an object leaves room to\nadd a field later without changing the shape a client already parses.",
|
|
"properties": {
|
|
"ok": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"ok"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"AuthParams": {
|
|
"properties": {
|
|
"protocol": {
|
|
"default": 0,
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"token": {
|
|
"description": "Required on TCP. Omitted on a Unix socket, where the socket's own\npermissions already prove the caller is this user.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"AuthResult": {
|
|
"properties": {
|
|
"daemon_version": {
|
|
"type": "string"
|
|
},
|
|
"protocol": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"username": {
|
|
"description": "The Soulseek account the daemon is logged in as.",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"protocol",
|
|
"daemon_version",
|
|
"username"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"BrowseEvent": {
|
|
"description": "A peer answered a browse request. Carried whole rather than as a \"go ask\nfor it\" nudge, because the daemon's own copy is consumed when it drains.",
|
|
"properties": {
|
|
"directories": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SharedDirectoryDto"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"directories"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"ChatMessageDto": {
|
|
"description": "One line of chat history. Unlike a live [`UserMessageDto`] this carries a\ndirection, because a conversation the daemon collected includes what this\naccount sent as well as what it received.",
|
|
"properties": {
|
|
"at": {
|
|
"description": "Unix seconds.",
|
|
"format": "int64",
|
|
"type": "integer"
|
|
},
|
|
"outgoing": {
|
|
"type": "boolean"
|
|
},
|
|
"peer": {
|
|
"description": "The other party, whichever way the message went.",
|
|
"type": "string"
|
|
},
|
|
"text": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"peer",
|
|
"outgoing",
|
|
"text",
|
|
"at"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"DaemonStatus": {
|
|
"description": "What the daemon is and what its session is doing, from `daemon.status`.",
|
|
"properties": {
|
|
"clients": {
|
|
"description": "Control connections currently attached.",
|
|
"format": "uint",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"daemon_version": {
|
|
"type": "string"
|
|
},
|
|
"download_dir": {
|
|
"type": "string"
|
|
},
|
|
"listen_port": {
|
|
"default": null,
|
|
"format": "uint16",
|
|
"maximum": 65535,
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"protocol": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"server": {
|
|
"type": "string"
|
|
},
|
|
"session_loss": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SessionLossDto"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"shared_files": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"shared_folders": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"uptime_secs": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"server",
|
|
"daemon_version",
|
|
"protocol",
|
|
"shared_folders",
|
|
"shared_files",
|
|
"download_dir",
|
|
"clients",
|
|
"uptime_secs"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"DirectoriesParams": {
|
|
"properties": {
|
|
"directories": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"directories"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"DirectoryParams": {
|
|
"description": "Where the daemon should land transfers from now on, on *its* filesystem.\nThe same trust as `shares.set`: an authenticated caller is the owner.",
|
|
"properties": {
|
|
"directory": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"directory"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"DownloadDto": {
|
|
"properties": {
|
|
"download_directory": {
|
|
"type": "string"
|
|
},
|
|
"filename": {
|
|
"type": "string"
|
|
},
|
|
"metadata": {
|
|
"$ref": "#/components/schemas/DownloadMetadataDto",
|
|
"default": {
|
|
"bitrate": null,
|
|
"length_seconds": null,
|
|
"peer_free_slots": null,
|
|
"peer_upload_speed": null
|
|
}
|
|
},
|
|
"queue_position": {
|
|
"default": null,
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"size": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"status": {
|
|
"$ref": "#/components/schemas/DownloadStatusDto"
|
|
},
|
|
"token": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"filename",
|
|
"token",
|
|
"size",
|
|
"download_directory",
|
|
"status"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"DownloadMetadataDto": {
|
|
"properties": {
|
|
"bitrate": {
|
|
"default": null,
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"length_seconds": {
|
|
"default": null,
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"peer_free_slots": {
|
|
"default": null,
|
|
"format": "uint8",
|
|
"maximum": 255,
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"peer_upload_speed": {
|
|
"default": null,
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"DownloadStartParams": {
|
|
"properties": {
|
|
"filename": {
|
|
"type": "string"
|
|
},
|
|
"metadata": {
|
|
"$ref": "#/components/schemas/DownloadMetadataDto",
|
|
"default": {
|
|
"bitrate": null,
|
|
"length_seconds": null,
|
|
"peer_free_slots": null,
|
|
"peer_upload_speed": null
|
|
}
|
|
},
|
|
"size": {
|
|
"default": 0,
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"filename"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"DownloadStarted": {
|
|
"properties": {
|
|
"download": {
|
|
"$ref": "#/components/schemas/DownloadDto"
|
|
}
|
|
},
|
|
"required": [
|
|
"download"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"DownloadStatusDto": {
|
|
"oneOf": [
|
|
{
|
|
"properties": {
|
|
"state": {
|
|
"const": "queued",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"state"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"bytes_downloaded": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"speed_bytes_per_sec": {
|
|
"format": "double",
|
|
"type": "number"
|
|
},
|
|
"state": {
|
|
"const": "in_progress",
|
|
"type": "string"
|
|
},
|
|
"total_bytes": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"state",
|
|
"bytes_downloaded",
|
|
"total_bytes",
|
|
"speed_bytes_per_sec"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"bytes_downloaded": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"state": {
|
|
"const": "paused",
|
|
"type": "string"
|
|
},
|
|
"total_bytes": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"state",
|
|
"bytes_downloaded",
|
|
"total_bytes"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"state": {
|
|
"const": "completed",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"state"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"state": {
|
|
"const": "cancelled",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"state"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"reason": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"state": {
|
|
"const": "failed",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"state"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"state": {
|
|
"const": "timed_out",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"state"
|
|
],
|
|
"type": "object"
|
|
}
|
|
]
|
|
},
|
|
"DownloadStatusEvent": {
|
|
"description": "One step in a transfer this client started.",
|
|
"properties": {
|
|
"filename": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"$ref": "#/components/schemas/DownloadStatusDto"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"filename",
|
|
"status"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Downloads": {
|
|
"properties": {
|
|
"downloads": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/DownloadDto"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"downloads"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"FileDto": {
|
|
"properties": {
|
|
"attribs": {
|
|
"additionalProperties": false,
|
|
"description": "Soulseek attribute codes (0 = bitrate, 1 = duration in seconds).",
|
|
"patternProperties": {
|
|
"^\\d+$": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"size": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"size",
|
|
"attribs"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"IntervalSeconds": {
|
|
"properties": {
|
|
"seconds": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"seconds"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"MemberStats": {
|
|
"description": "What the server said about each member of a room when it was joined.",
|
|
"properties": {
|
|
"members": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/RoomUserStatsDto"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"members"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Members": {
|
|
"properties": {
|
|
"users": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"users"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"MessageParams": {
|
|
"properties": {
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"message"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Messages": {
|
|
"properties": {
|
|
"messages": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ChatMessageDto"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"messages"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"PasswordParams": {
|
|
"description": "A new password for the account the daemon is logged in as. Plain text on\nthe wire, like the token: the transport is the local socket, or TCP behind\nan SSH tunnel (see docs/daemon-protocol.md).",
|
|
"properties": {
|
|
"password": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"password"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"QueryParams": {
|
|
"properties": {
|
|
"query": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"query"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"RoomEventDto": {
|
|
"oneOf": [
|
|
{
|
|
"properties": {
|
|
"event": {
|
|
"const": "list",
|
|
"type": "string"
|
|
},
|
|
"rooms": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/RoomInfoDto"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"rooms"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"event": {
|
|
"const": "joined",
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"users": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"users"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"event": {
|
|
"const": "left",
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"event": {
|
|
"const": "message",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"username",
|
|
"message"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"event": {
|
|
"const": "user_joined",
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"username"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"event": {
|
|
"const": "user_left",
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"username"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"description": "The ticker board of a room, sent on join.",
|
|
"properties": {
|
|
"event": {
|
|
"const": "tickers",
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"tickers": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/RoomTickerDto"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"tickers"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"event": {
|
|
"const": "ticker_added",
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"ticker": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"username",
|
|
"ticker"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"event": {
|
|
"const": "ticker_removed",
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"username"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"description": "A message from the global room feed; `room` names where it was said.",
|
|
"properties": {
|
|
"event": {
|
|
"const": "global_message",
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"username",
|
|
"message"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"description": "Who may enter a private room.",
|
|
"properties": {
|
|
"event": {
|
|
"const": "private_members",
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"users": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"users"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"description": "Who runs a private room.",
|
|
"properties": {
|
|
"event": {
|
|
"const": "private_operators",
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"users": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"users"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"description": "A private room's member (`members` true) or operator roster changed.",
|
|
"properties": {
|
|
"added": {
|
|
"type": "boolean"
|
|
},
|
|
"event": {
|
|
"const": "private_roster_changed",
|
|
"type": "string"
|
|
},
|
|
"members": {
|
|
"type": "boolean"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"username",
|
|
"members",
|
|
"added"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"description": "Our own membership or operatorship of a private room changed.",
|
|
"properties": {
|
|
"event": {
|
|
"const": "own_standing_changed",
|
|
"type": "string"
|
|
},
|
|
"granted": {
|
|
"type": "boolean"
|
|
},
|
|
"members": {
|
|
"type": "boolean"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room",
|
|
"members",
|
|
"granted"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"description": "The room we asked to join could not be created.",
|
|
"properties": {
|
|
"event": {
|
|
"const": "cant_create",
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"room"
|
|
],
|
|
"type": "object"
|
|
}
|
|
]
|
|
},
|
|
"RoomInfoDto": {
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"user_count": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"user_count"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"RoomRef": {
|
|
"properties": {
|
|
"room": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"room"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"RoomTickerDto": {
|
|
"description": "One user's ticker in a room.",
|
|
"properties": {
|
|
"ticker": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"ticker"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"RoomUserStatsDto": {
|
|
"description": "One member of a room, as the JoinRoom reply described them.",
|
|
"properties": {
|
|
"average_speed": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"country": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"shared_files": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"shared_folders": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"slots_full": {
|
|
"description": "True when the member's upload slots are all occupied.",
|
|
"type": "boolean"
|
|
},
|
|
"status": {
|
|
"description": "`online`, `away`, or `offline`.",
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"status",
|
|
"average_speed",
|
|
"shared_files",
|
|
"shared_folders",
|
|
"slots_full"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"SayParams": {
|
|
"properties": {
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"room": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"room",
|
|
"message"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"SearchResultDto": {
|
|
"properties": {
|
|
"files": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/FileDto"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"slots": {
|
|
"format": "uint8",
|
|
"maximum": 255,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"speed": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"token": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"token",
|
|
"username",
|
|
"slots",
|
|
"speed",
|
|
"files"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"SearchResults": {
|
|
"properties": {
|
|
"results": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SearchResultDto"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"SearchSummary": {
|
|
"description": "One search as the daemon sees it, for a client that did not run it.",
|
|
"properties": {
|
|
"files": {
|
|
"description": "Files found so far, across every peer that has answered.",
|
|
"format": "uint",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"query": {
|
|
"type": "string"
|
|
},
|
|
"started_secs_ago": {
|
|
"description": "How long ago the query went out. A client compares this with its own\nsearch window to decide whether the search is still collecting.",
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"query",
|
|
"files",
|
|
"started_secs_ago"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Searches": {
|
|
"description": "Every search this session has run, newest last. Shared by all clients, so\na second one attaching sees what the first has been looking for.",
|
|
"properties": {
|
|
"searches": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SearchSummary"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"searches"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Seconds": {
|
|
"properties": {
|
|
"seconds": {
|
|
"default": null,
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"SessionLossDto": {
|
|
"enum": [
|
|
"displaced",
|
|
"disconnected"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"SessionLossEvent": {
|
|
"properties": {
|
|
"loss": {
|
|
"$ref": "#/components/schemas/SessionLossDto"
|
|
}
|
|
},
|
|
"required": [
|
|
"loss"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"SharedDirectoryDto": {
|
|
"properties": {
|
|
"files": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SharedFileEntryDto"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"files"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"SharedFileEntryDto": {
|
|
"properties": {
|
|
"attributes": {
|
|
"description": "`(code, value)` audio attributes the owner advertises.",
|
|
"items": {
|
|
"maxItems": 2,
|
|
"minItems": 2,
|
|
"prefixItems": [
|
|
{
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
],
|
|
"type": "array"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"name": {
|
|
"description": "Basename; join with the directory to get a downloadable path.",
|
|
"type": "string"
|
|
},
|
|
"size": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"size",
|
|
"attributes"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"SharedListing": {
|
|
"description": "This session's own share index, as a peer receives it — what\n`shares.files` answers with.",
|
|
"properties": {
|
|
"directories": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SharedDirectoryDto"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"directories"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"SharesStatus": {
|
|
"description": "What the share index holds, from `shares.status` / `shares.reindex`.",
|
|
"properties": {
|
|
"directories": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"files": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"folders": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"folders",
|
|
"files",
|
|
"directories"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"SlotsParams": {
|
|
"properties": {
|
|
"slots": {
|
|
"format": "uint",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"slots"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"TransferRef": {
|
|
"description": "Names one transfer, which is how both directions are addressed.",
|
|
"properties": {
|
|
"filename": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"filename"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"UploadInfoDto": {
|
|
"properties": {
|
|
"bytes_sent": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"filename": {
|
|
"type": "string"
|
|
},
|
|
"size": {
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"speed_bytes_per_sec": {
|
|
"format": "double",
|
|
"type": "number"
|
|
},
|
|
"status": {
|
|
"$ref": "#/components/schemas/UploadStatusDto"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"filename",
|
|
"size",
|
|
"bytes_sent",
|
|
"status",
|
|
"speed_bytes_per_sec"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"UploadStatusDto": {
|
|
"oneOf": [
|
|
{
|
|
"description": "Waiting for a slot, at this 1-based place in the queue.",
|
|
"properties": {
|
|
"place": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"state": {
|
|
"const": "queued",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"state",
|
|
"place"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"state": {
|
|
"const": "in_progress",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"state"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"state": {
|
|
"const": "completed",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"state"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"state": {
|
|
"const": "cancelled",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"state"
|
|
],
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"reason": {
|
|
"type": "string"
|
|
},
|
|
"state": {
|
|
"const": "failed",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"state",
|
|
"reason"
|
|
],
|
|
"type": "object"
|
|
}
|
|
]
|
|
},
|
|
"Uploads": {
|
|
"properties": {
|
|
"uploads": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/UploadInfoDto"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"uploads"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"UserInfoDto": {
|
|
"description": "Each half is `None` until its reply lands, so a consumer can tell \"the\nserver said offline\" from \"the server has not answered yet\".",
|
|
"properties": {
|
|
"presence": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/UserPresenceDto"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"stats": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/UserStatsDto"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"UserMessageDto": {
|
|
"properties": {
|
|
"id": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"new_message": {
|
|
"type": "boolean"
|
|
},
|
|
"timestamp": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"timestamp",
|
|
"username",
|
|
"message",
|
|
"new_message"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"UserPresenceDto": {
|
|
"properties": {
|
|
"privileged": {
|
|
"type": "boolean"
|
|
},
|
|
"status": {
|
|
"description": "`online`, `away`, or `offline`.",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"status",
|
|
"privileged"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"UserRef": {
|
|
"properties": {
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"UserResult": {
|
|
"properties": {
|
|
"user": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/UserInfoDto"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"UserStatsDto": {
|
|
"properties": {
|
|
"average_speed": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"shared_files": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"shared_folders": {
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"average_speed",
|
|
"shared_files",
|
|
"shared_folders"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Watched": {
|
|
"description": "Everyone this session is watching, sorted by name.",
|
|
"properties": {
|
|
"users": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"users"
|
|
],
|
|
"type": "object"
|
|
}
|
|
}
|
|
},
|
|
"info": {
|
|
"description": "Control a running soulseek-rs daemon. Newline-delimited JSON-RPC 2.0 over a Unix socket (local, authenticated by socket permissions) or TCP (remote, authenticated by the token in <state-dir>/daemon.token). `auth` must be the first request on a connection. Errors carry the CLI exit status in `error.data.exit`. Entries marked `x-notification` are pushed by the daemon and are never requested.",
|
|
"license": {
|
|
"name": "MIT"
|
|
},
|
|
"title": "soulseek-rs daemon",
|
|
"version": "2"
|
|
},
|
|
"methods": [
|
|
{
|
|
"name": "auth",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "protocol",
|
|
"required": false,
|
|
"schema": {
|
|
"default": 0,
|
|
"format": "uint32",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "token",
|
|
"required": false,
|
|
"schema": {
|
|
"description": "Required on TCP. Omitted on a Unix socket, where the socket's own\npermissions already prove the caller is this user.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthResult"
|
|
}
|
|
},
|
|
"summary": "Authenticate. Must be the first request on a connection."
|
|
},
|
|
{
|
|
"name": "daemon.status",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DaemonStatus"
|
|
}
|
|
},
|
|
"summary": "Who the daemon is logged in as and what its session is doing."
|
|
},
|
|
{
|
|
"name": "daemon.stop",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Ask the daemon to shut down."
|
|
},
|
|
{
|
|
"name": "rpc.discover",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"summary": "This document."
|
|
},
|
|
{
|
|
"name": "search.start",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Put a search on the wire and return at once; results accumulate."
|
|
},
|
|
{
|
|
"name": "search.results",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SearchResults"
|
|
}
|
|
},
|
|
"summary": "Everything that has answered a search so far."
|
|
},
|
|
{
|
|
"name": "search.list",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Searches"
|
|
}
|
|
},
|
|
"summary": "Every search this session has run, shared by all clients."
|
|
},
|
|
{
|
|
"name": "search.forget",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Drop a search and its results, for every client at once."
|
|
},
|
|
{
|
|
"name": "search.wishlist",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Send a query as a wishlist search (server code 103)."
|
|
},
|
|
{
|
|
"name": "search.wishlist_interval",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/IntervalSeconds"
|
|
}
|
|
},
|
|
"summary": "How long the server wants between wishlist searches."
|
|
},
|
|
{
|
|
"name": "download.start",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "filename",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "metadata",
|
|
"required": false,
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DownloadMetadataDto",
|
|
"default": {
|
|
"bitrate": null,
|
|
"length_seconds": null,
|
|
"peer_free_slots": null,
|
|
"peer_upload_speed": null
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "size",
|
|
"required": false,
|
|
"schema": {
|
|
"default": 0,
|
|
"format": "uint64",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DownloadStarted"
|
|
}
|
|
},
|
|
"summary": "Queue a transfer. Progress arrives as event.download_status."
|
|
},
|
|
{
|
|
"name": "download.list",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Downloads"
|
|
}
|
|
},
|
|
"summary": "Every transfer the daemon knows about."
|
|
},
|
|
{
|
|
"name": "download.pause",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "filename",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Pause a transfer in progress."
|
|
},
|
|
{
|
|
"name": "download.resume",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "filename",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Resume a paused transfer."
|
|
},
|
|
{
|
|
"name": "download.remove",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "filename",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Forget a transfer entirely."
|
|
},
|
|
{
|
|
"name": "download.remove_queued",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "filename",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Drop a transfer that has not started."
|
|
},
|
|
{
|
|
"name": "download.cancel",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "filename",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Stop a download, queued or in progress; its partial file is deleted."
|
|
},
|
|
{
|
|
"name": "download.set_dir",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "directory",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Land future transfers in a different folder on the daemon's host."
|
|
},
|
|
{
|
|
"name": "upload.list",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Uploads"
|
|
}
|
|
},
|
|
"summary": "Uploads being served, active first."
|
|
},
|
|
{
|
|
"name": "upload.cancel",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "filename",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Stop serving an upload in progress."
|
|
},
|
|
{
|
|
"name": "upload.slots",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "slots",
|
|
"required": true,
|
|
"schema": {
|
|
"format": "uint",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "How many uploads may run at once."
|
|
},
|
|
{
|
|
"name": "privileges.check",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Ask the server for this account's privilege time."
|
|
},
|
|
{
|
|
"name": "privileges.own",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Seconds"
|
|
}
|
|
},
|
|
"summary": "Privilege seconds left, or null if the server has not answered."
|
|
},
|
|
{
|
|
"name": "room.list_request",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Ask the server for the public room list; it arrives as event.room."
|
|
},
|
|
{
|
|
"name": "room.join",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "room",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Join a chat room."
|
|
},
|
|
{
|
|
"name": "room.leave",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "room",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Leave a chat room."
|
|
},
|
|
{
|
|
"name": "room.say",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "message",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "room",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Post a message to a room."
|
|
},
|
|
{
|
|
"name": "room.members",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "room",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Members"
|
|
}
|
|
},
|
|
"summary": "Who is currently in a room."
|
|
},
|
|
{
|
|
"name": "room.member_stats",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "room",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MemberStats"
|
|
}
|
|
},
|
|
"summary": "What the server said about each member of a joined room."
|
|
},
|
|
{
|
|
"name": "message.send",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "message",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Send a private message."
|
|
},
|
|
{
|
|
"name": "message.history",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Messages"
|
|
}
|
|
},
|
|
"summary": "Private messages the daemon collected, including while nobody was attached."
|
|
},
|
|
{
|
|
"name": "browse.user",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Ask a peer for its share listing; it arrives as event.browse."
|
|
},
|
|
{
|
|
"name": "user.request",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Ask the server about a user; poll user.info for the answer."
|
|
},
|
|
{
|
|
"name": "user.info",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserResult"
|
|
}
|
|
},
|
|
"summary": "What the server has said about a user so far."
|
|
},
|
|
{
|
|
"name": "user.watch",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Watch a user, so the server keeps pushing their status."
|
|
},
|
|
{
|
|
"name": "user.unwatch",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "username",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Stop watching a user."
|
|
},
|
|
{
|
|
"name": "user.watched",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Watched"
|
|
}
|
|
},
|
|
"summary": "Everyone this session is watching."
|
|
},
|
|
{
|
|
"name": "account.password",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "password",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Ack"
|
|
}
|
|
},
|
|
"summary": "Change the password of the account the daemon is logged in as, and store it on the daemon's host so a restart still logs in."
|
|
},
|
|
{
|
|
"name": "shares.status",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SharesStatus"
|
|
}
|
|
},
|
|
"summary": "What the share index currently holds."
|
|
},
|
|
{
|
|
"name": "shares.files",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SharedListing"
|
|
}
|
|
},
|
|
"summary": "Every indexed file, in the listing a browsing peer receives."
|
|
},
|
|
{
|
|
"name": "shares.set",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "directories",
|
|
"required": true,
|
|
"schema": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SharesStatus"
|
|
}
|
|
},
|
|
"summary": "Replace the shared folders and re-index."
|
|
},
|
|
{
|
|
"name": "shares.reindex",
|
|
"paramStructure": "by-name",
|
|
"params": [],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SharesStatus"
|
|
}
|
|
},
|
|
"summary": "Re-scan the configured folders."
|
|
},
|
|
{
|
|
"name": "event.room",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "payload",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoomEventDto"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"summary": "Something happened in a room this session has joined.",
|
|
"x-notification": true
|
|
},
|
|
{
|
|
"name": "event.message",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "payload",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserMessageDto"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"summary": "A private message arrived.",
|
|
"x-notification": true
|
|
},
|
|
{
|
|
"name": "event.upload",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "payload",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UploadInfoDto"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"summary": "An upload changed state.",
|
|
"x-notification": true
|
|
},
|
|
{
|
|
"name": "event.download_status",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "payload",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DownloadStatusEvent"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"summary": "A transfer moved.",
|
|
"x-notification": true
|
|
},
|
|
{
|
|
"name": "event.browse",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "payload",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/components/schemas/BrowseEvent"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"summary": "A peer answered a browse request.",
|
|
"x-notification": true
|
|
},
|
|
{
|
|
"name": "event.session_loss",
|
|
"paramStructure": "by-name",
|
|
"params": [
|
|
{
|
|
"name": "payload",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SessionLossEvent"
|
|
}
|
|
}
|
|
],
|
|
"result": {
|
|
"name": "result",
|
|
"schema": {
|
|
"type": "null"
|
|
}
|
|
},
|
|
"summary": "The server session was lost. A disconnected session is reconnected on its own and events resume; a displaced one is terminal. Read daemon.status for the live state.",
|
|
"x-notification": true
|
|
}
|
|
],
|
|
"openrpc": "1.3.2"
|
|
}
|