UPSTREAM BASELINE: nextcloud/spreed v22.0.12 (без изменений)
Type checking / changes (push) Has been cancelled
Type checking / test (push) Has been cancelled
Type checking / typescript-summary (push) Has been cancelled
Node tests / changes (push) Has been cancelled
Node tests / test (push) Has been cancelled
Node tests / test-summary (push) Has been cancelled
Type checking / changes (push) Has been cancelled
Type checking / test (push) Has been cancelled
Type checking / typescript-summary (push) Has been cancelled
Node tests / changes (push) Has been cancelled
Node tests / test (push) Has been cancelled
Node tests / test-summary (push) Has been cancelled
Источник: https://github.com/nextcloud/spreed/archive/refs/tags/v22.0.12.tar.gz С этого коммита ветка официального Nextcloud Talk отрезана (решение владельца 2026-07-06). Все дальнейшие изменения — только наши; версии релизов: 22.0.12-f7.N.
This commit is contained in:
@@ -0,0 +1,870 @@
|
||||
{
|
||||
"openapi": "3.0.3",
|
||||
"info": {
|
||||
"title": "spreed-backend-recording",
|
||||
"version": "0.0.1",
|
||||
"description": "Chat, video & audio-conferencing using WebRTC",
|
||||
"license": {
|
||||
"name": "agpl"
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"securitySchemes": {
|
||||
"basic_auth": {
|
||||
"type": "http",
|
||||
"scheme": "basic"
|
||||
},
|
||||
"bearer_auth": {
|
||||
"type": "http",
|
||||
"scheme": "bearer"
|
||||
}
|
||||
},
|
||||
"schemas": {
|
||||
"Capabilities": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"features",
|
||||
"features-local",
|
||||
"config",
|
||||
"config-local",
|
||||
"version"
|
||||
],
|
||||
"properties": {
|
||||
"features": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"minItems": 1
|
||||
},
|
||||
"features-local": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"minItems": 1
|
||||
},
|
||||
"config": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"attachments",
|
||||
"call",
|
||||
"chat",
|
||||
"conversations",
|
||||
"federation",
|
||||
"previews",
|
||||
"signaling",
|
||||
"experiments",
|
||||
"permissions"
|
||||
],
|
||||
"properties": {
|
||||
"attachments": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"allowed"
|
||||
],
|
||||
"properties": {
|
||||
"allowed": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"folder": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"call": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"enabled",
|
||||
"breakout-rooms",
|
||||
"recording",
|
||||
"recording-consent",
|
||||
"supported-reactions",
|
||||
"predefined-backgrounds",
|
||||
"predefined-backgrounds-v2",
|
||||
"can-upload-background",
|
||||
"sip-enabled",
|
||||
"sip-dialout-enabled",
|
||||
"default-phone-region",
|
||||
"can-enable-sip",
|
||||
"start-without-media",
|
||||
"max-duration",
|
||||
"blur-virtual-background",
|
||||
"end-to-end-encryption",
|
||||
"live-transcription",
|
||||
"play-sounds",
|
||||
"grid-limit",
|
||||
"grid-limit-enforced"
|
||||
],
|
||||
"properties": {
|
||||
"enabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"breakout-rooms": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"recording": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"recording-consent": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"supported-reactions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"predefined-backgrounds": {
|
||||
"type": "array",
|
||||
"description": "List of file names relative to the spreed/img/backgrounds/ web path, e.g. `2_home.jpg`",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"predefined-backgrounds-v2": {
|
||||
"type": "array",
|
||||
"description": "List of file paths relative to the server web root with leading slash, e.g. `/apps/spreed/img/backgrounds/2_home.jpg`",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"can-upload-background": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"sip-enabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"sip-dialout-enabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"default-phone-region": {
|
||||
"type": "string"
|
||||
},
|
||||
"can-enable-sip": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"start-without-media": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"max-duration": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"blur-virtual-background": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"end-to-end-encryption": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"live-transcription": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"play-sounds": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"grid-limit": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"grid-limit-enforced": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"max-length",
|
||||
"read-privacy",
|
||||
"has-translation-providers",
|
||||
"has-translation-task-providers",
|
||||
"typing-privacy",
|
||||
"summary-threshold",
|
||||
"matterbridge-enabled"
|
||||
],
|
||||
"properties": {
|
||||
"max-length": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"read-privacy": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"has-translation-providers": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"has-translation-task-providers": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"typing-privacy": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"summary-threshold": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"minimum": 1
|
||||
},
|
||||
"matterbridge-enabled": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
},
|
||||
"conversations": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"can-create",
|
||||
"force-passwords",
|
||||
"list-style",
|
||||
"description-length",
|
||||
"retention-event",
|
||||
"retention-phone",
|
||||
"retention-instant-meetings"
|
||||
],
|
||||
"properties": {
|
||||
"can-create": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"force-passwords": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"list-style": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"two-lines",
|
||||
"compact"
|
||||
]
|
||||
},
|
||||
"description-length": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"minimum": 1
|
||||
},
|
||||
"retention-event": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"minimum": 0
|
||||
},
|
||||
"retention-phone": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"minimum": 0
|
||||
},
|
||||
"retention-instant-meetings": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"federation": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"enabled",
|
||||
"incoming-enabled",
|
||||
"outgoing-enabled",
|
||||
"only-trusted-servers"
|
||||
],
|
||||
"properties": {
|
||||
"enabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"incoming-enabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"outgoing-enabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"only-trusted-servers": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
},
|
||||
"previews": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"max-gif-size"
|
||||
],
|
||||
"properties": {
|
||||
"max-gif-size": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
}
|
||||
},
|
||||
"signaling": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"session-ping-limit",
|
||||
"mode"
|
||||
],
|
||||
"properties": {
|
||||
"session-ping-limit": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"mode": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"internal",
|
||||
"external",
|
||||
"conversation_cluster"
|
||||
]
|
||||
},
|
||||
"hello-v2-token-key": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"experiments": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"enabled"
|
||||
],
|
||||
"properties": {
|
||||
"enabled": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"permissions": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"max-default",
|
||||
"max-custom",
|
||||
"default"
|
||||
],
|
||||
"properties": {
|
||||
"max-default": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"max-custom": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"default": {
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"config-local": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"version": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OCSMeta": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"status",
|
||||
"statuscode"
|
||||
],
|
||||
"properties": {
|
||||
"status": {
|
||||
"type": "string"
|
||||
},
|
||||
"statuscode": {
|
||||
"type": "integer"
|
||||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
},
|
||||
"totalitems": {
|
||||
"type": "string"
|
||||
},
|
||||
"itemsperpage": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"PublicCapabilities": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"spreed": {
|
||||
"$ref": "#/components/schemas/Capabilities"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"paths": {
|
||||
"/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/backend": {
|
||||
"post": {
|
||||
"operationId": "recording-backend",
|
||||
"summary": "Update the recording status as a backend",
|
||||
"tags": [
|
||||
"recording"
|
||||
],
|
||||
"security": [
|
||||
{},
|
||||
{
|
||||
"bearer_auth": []
|
||||
},
|
||||
{
|
||||
"basic_auth": []
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
{
|
||||
"name": "apiVersion",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"v1"
|
||||
],
|
||||
"default": "v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "talk-recording-random",
|
||||
"in": "header",
|
||||
"description": "Random seed used to generate the request checksum",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "talk-recording-checksum",
|
||||
"in": "header",
|
||||
"description": "Checksum over the request body to verify authenticity from the recording backend",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "OCS-APIRequest",
|
||||
"in": "header",
|
||||
"description": "Required to be true for the API request to pass",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Recording status updated successfully",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"ocs"
|
||||
],
|
||||
"properties": {
|
||||
"ocs": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"meta",
|
||||
"data"
|
||||
],
|
||||
"properties": {
|
||||
"meta": {
|
||||
"$ref": "#/components/schemas/OCSMeta"
|
||||
},
|
||||
"data": {
|
||||
"nullable": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Updating recording status is not possible",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"ocs"
|
||||
],
|
||||
"properties": {
|
||||
"ocs": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"meta",
|
||||
"data"
|
||||
],
|
||||
"properties": {
|
||||
"meta": {
|
||||
"$ref": "#/components/schemas/OCSMeta"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"type",
|
||||
"error"
|
||||
],
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string"
|
||||
},
|
||||
"error": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"code",
|
||||
"message"
|
||||
],
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "string"
|
||||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Missing permissions to update recording status",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"ocs"
|
||||
],
|
||||
"properties": {
|
||||
"ocs": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"meta",
|
||||
"data"
|
||||
],
|
||||
"properties": {
|
||||
"meta": {
|
||||
"$ref": "#/components/schemas/OCSMeta"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"type",
|
||||
"error"
|
||||
],
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string"
|
||||
},
|
||||
"error": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"code",
|
||||
"message"
|
||||
],
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "string"
|
||||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
"description": "Room not found",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"ocs"
|
||||
],
|
||||
"properties": {
|
||||
"ocs": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"meta",
|
||||
"data"
|
||||
],
|
||||
"properties": {
|
||||
"meta": {
|
||||
"$ref": "#/components/schemas/OCSMeta"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"type",
|
||||
"error"
|
||||
],
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string"
|
||||
},
|
||||
"error": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"code",
|
||||
"message"
|
||||
],
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "string"
|
||||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/{token}/store": {
|
||||
"post": {
|
||||
"operationId": "recording-store",
|
||||
"summary": "Store the recording",
|
||||
"tags": [
|
||||
"recording"
|
||||
],
|
||||
"security": [
|
||||
{},
|
||||
{
|
||||
"bearer_auth": []
|
||||
},
|
||||
{
|
||||
"basic_auth": []
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": false,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"owner": {
|
||||
"type": "string",
|
||||
"nullable": true,
|
||||
"description": "User that will own the recording file. `null` is actually not allowed and will always result in a \"400 Bad Request\". It's only allowed code-wise to handle requests where the post data exceeded the limits, so we can return a proper error instead of \"500 Internal Server Error\"."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"parameters": [
|
||||
{
|
||||
"name": "apiVersion",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"v1"
|
||||
],
|
||||
"default": "v1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "token",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-z0-9]{4,30}$"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "talk-recording-random",
|
||||
"in": "header",
|
||||
"description": "Random seed used to generate the request checksum",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "talk-recording-checksum",
|
||||
"in": "header",
|
||||
"description": "Checksum over the request body to verify authenticity from the recording backend",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "OCS-APIRequest",
|
||||
"in": "header",
|
||||
"description": "Required to be true for the API request to pass",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Recording stored successfully",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"ocs"
|
||||
],
|
||||
"properties": {
|
||||
"ocs": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"meta",
|
||||
"data"
|
||||
],
|
||||
"properties": {
|
||||
"meta": {
|
||||
"$ref": "#/components/schemas/OCSMeta"
|
||||
},
|
||||
"data": {
|
||||
"nullable": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Storing recording is not possible",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"ocs"
|
||||
],
|
||||
"properties": {
|
||||
"ocs": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"meta",
|
||||
"data"
|
||||
],
|
||||
"properties": {
|
||||
"meta": {
|
||||
"$ref": "#/components/schemas/OCSMeta"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"error"
|
||||
],
|
||||
"properties": {
|
||||
"error": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Missing permissions to store recording",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"ocs"
|
||||
],
|
||||
"properties": {
|
||||
"ocs": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"meta",
|
||||
"data"
|
||||
],
|
||||
"properties": {
|
||||
"meta": {
|
||||
"$ref": "#/components/schemas/OCSMeta"
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"type",
|
||||
"error"
|
||||
],
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string"
|
||||
},
|
||||
"error": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"code",
|
||||
"message"
|
||||
],
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "string"
|
||||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": []
|
||||
}
|
||||
Reference in New Issue
Block a user