Files
landing/proto/layer.3.yml
2026-07-31 06:18:26 -07:00

657 lines
15 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
version: 3
description: Add avatars and more CDN safety, remove transport server
enums:
#Тип вложния
AttachmentType:
type: int8
values:
- id: 0
name: IMAGE #Изображение
- id: 1
name: MESSAGES #Сообщения (forwarded/reply)
- id: 2
name: FILE #Файл
- id: 4
name: CALL #Звонок
- id: 5
name: VOICE #Голосовое сообщение
- id: 6
name: VIDEO_CIRCLE #Видео сообщение (кружок)
- id: 7
name: VIDEO #Видео
#Решение по девайсу, принять или отклонить вход
DeviceSolution:
type: int8
values:
- id: 0
name: ACCEPT #Принять
- id: 1
name: DECLINE #Отклонить
#Статус хэндшейка
HandshakeStage:
type: int8
values:
- id: 0
name: COMPLETED #Пройден
- id: 1
name: NEED_DEVICE_VERIFICATION #Не пройден (приложение рендерит UI подтвердите с другого устройства)
#Статус в группе
GroupStatus:
type: int8
values:
- id: 0
name: JOINED #В группе
- id: 1
name: INVALID #Не валидная группа
- id: 2
name: NOT_JOINED #Можно зайт
- id: 3
name: BANNED #Заблокирован
#
NotificationAction:
type: int8
values:
- id: 0
name: SUBSCRIBE
- id: 1
name: UNSUBSCRIBE
SignalType:
type: int8
values:
- id: 0
name: CALL
- id: 1
name: KEY_EXCHANGE
- id: 2
name: ACTIVE_CALL
- id: 3
name: END_CALL
- id: 4
name: ACTIVE
- id: 5
name: END_CALL_BECAUSE_PEER_DISCONNECTED
- id: 6
name: END_CALL_BECAUSE_BUSY
- id: 7
name: ACCEPT
- id: 8
name: RINGING_TIMEOUT
NetworkStatus:
type: int8
values:
- id: 0
name: ONLINE
- id: 1
name: OFFLINE
SyncStatus:
type: int8
values:
- id: 0
name: NOT_NEEDED
- id: 1
name: BATCH_START
- id: 2
name: BATCH_END
#Тип WebRTC сигнала
WebRTCType:
type: int8
values:
- id: 0
name: OFFER #Offer
- id: 1
name: ANSWER #Answer
- id: 2
name: ICE_CANDIDATE #Estabilishment candidate
ResultCode:
type: int8
values:
- id: 0
name: SUCCESS
- id: 1
name: ERROR
- id: 2
name: INVALID #Любая ошибка смысл которой зависит от контекста, например в случае с файловой системой - нет файла
- id: 3
name: USERNAME_TAKEN #Имя пользователя занято
- id: 4
name: OVERSIZE #Слишком большой размер файла
- id: 5
name: OVERLIFE #Слишком большой TTL
TokenType:
type: int8
values:
- id: 0
name: FCM
- id: 1
name: VoIPApns
#Тип медиа файла профиля (пока только фото)
ProfileMediaType:
type: uint8
values:
- id: 0
name: PROFILE_PHOTO
types:
Attachment:
fields:
- id: 1
name: id #Случайная строка
type: string
- id: 2
name: blob? #Только очень коротких типов
type: string
- id: 3
name: type #Тип вложения
type: AttachmentType
- id: 4
name: preview #Превью
type: string
- id: 6
name: objectId #Выданный сервером objectId от cdn
type: string
#Медиа-файлы профиля такие как аватарки (фото) и будущие истории
ProfileMedia:
fields:
- id: 1
name: preview #превью (для фото blurhash)
type: string
- id: 2
name: objectId #обьект на cdn
type: string
- id: 3
name: type #тип медиа
type: ProfileMediaType
- id: 4
name: timestamp #дата публикации
type: int64
- id: 5
name: mediaKey #ключ шифрования от медиа
type: string
NetworkDevice:
fields:
- id: 1
name: networkStatus
type: NetworkStatus
- id: 2
name: deviceName
type: string
- id: 3
name: deviceOs
type: string
- id: 4
name: deviceId
type: string
- id: 5
name: deviceSolution
type: DeviceSolution
PKNetworkStatus:
fields:
- id: 1
name: publicKey
type: string
- id: 2
name: networkStatus
type: NetworkStatus
#Информация при поиске пользователя (приходит в ответ на пакет PacketSearch)
SearchInfo:
fields:
- id: 1
name: username #имя для поиска
type: string
- id: 2
name: title #отображаемое имя пользователя
type: string
- id: 3
name: publicKey #публичный ключ
type: string
- id: 4
name: verified #верификация
type: int32
- id: 5
name: networkStatus #онлайн пользователь или нет
type: NetworkStatus
- id: 6
name: avatar? #аватар пользователя если есть
type: ProfileMedia
#Информация которая используется только при входе в профиль пользователя
ProfileInfo:
fields:
- id: 1
name: username #имя для поиска
type: string
- id: 2
name: title #отображаемое имя пользователя
type: string
- id: 3
name: publicKey #публичный ключ
type: string
- id: 4
name: verified #верификация
type: int32
- id: 5
name: networkStatus #онлайн пользователь или нет
type: NetworkStatus
- id: 6
name: media? #все активное медиа (включая будущие истории)
type: ProfileMedia[]
RTCIceServer:
fields:
- id: 1
name: url
type: string
- id: 2
name: username
type: string
- id: 3
name: credential
type: string
- id: 4
name: transport
type: string
packets:
Handshake:
id: 0
fields:
- id: 1
name: publicKey
type: string
- id: 2
name: privateKey
type: string
- id: 3
name: deviceId
type: string
- id: 4
name: deviceName
type: string
- id: 5
name: deviceOs
type: string
- id: 6
name: handshakeStage?
type: HandshakeStage
UserInfo:
id: 1
fields:
- id: 1
name: privateKey
type: string
- id: 2
name: username
type: string
- id: 3
name: title
type: string
Result:
id: 2
fields:
- id: 1
name: resultCode
type: ResultCode
Search:
id: 3
fields:
- id: 1
name: privateKey
type: string
- id: 2
name: search
type: string
- id: 3
name: searchInfo?
type: SearchInfo[]
OnlineSubscribe:
id: 4
fields:
- id: 1
name: privateKey
type: string
- id: 2
name: publicKeys
type: string[]
OnlineState:
id: 5
fields:
- id: 1
name: pkNetworkStatuses
type: PKNetworkStatus[]
Message:
id: 6
fields:
- id: 1
name: fromPublicKey
type: string
- id: 2
name: toPublicKey
type: string
- id: 3
name: privateKey
type: string
- id: 4
name: content
type: string
- id: 5
name: chachaKey
type: string
- id: 6
name: timestamp
type: int64
- id: 7
name: messageId
type: string
- id: 8
name: attachments?
type: Attachment[]
- id: 9
name: aesChachaKey
type: string
Read:
id: 7
fields:
- id: 1
name: fromPublicKey
type: string
- id: 2
name: toPublicKey
type: string
- id: 4
name: timestamp
type: int64
Delivery:
id: 8
fields:
- id: 1
name: messageId
type: string
- id: 2
name: toPublicKey
type: string
DeviceNew:
id: 9
fields:
- id: 1
name: ipAddress
type: string
- id: 2
name: deviceId
type: string
- id: 3
name: deviceName
type: string
- id: 4
name: deviceOs
type: string
RequestUpdate:
id: 10
fields:
- id: 1
name: server?
type: string
Typeing:
id: 11
fields:
- id: 1
name: fromPublicKey
type: string
- id: 2
name: toPublicKey
type: string
- id: 3
name: privateKey
type: string
#Запрос транспортного сервера
RequestTransport:
id: 15
fields:
- id: 1 #сервер > клиент
name: server? #выбранный транспортный сервер
type: string
PushNotification:
id: 16
fields:
- id: 1
name: notificationToken
type: string
- id: 2
name: action
type: NotificationAction
- id: 3
name: tokenType
type: TokenType
- id: 4
name: deviceId
type: string
GroupCreate:
id: 17
fields:
- id: 1
name: groupId?
type: string
GroupInfo:
id: 18
fields:
- id: 1
name: groupId
type: string
- id: 2
name: membersPKs?
type: string[]
GroupInviteInfo:
id: 19
fields:
- id: 1
name: groupId
type: string
- id: 2
name: membersCount?
type: int32
- id: 3
name: status?
type: GroupStatus
GroupJoin:
id: 20
fields:
- id: 1
name: groupId
type: string
- id: 2
name: status?
type: GroupStatus
- id: 3
name: groupString
type: string
GroupLeave:
id: 21
fields:
- id: 1
name: groupId
type: string
GroupBan:
id: 22
fields:
- id: 1
name: groupId
type: string
- id: 2
name: publicKey
type: string
DeviceList:
id: 23
fields:
- id: 1
name: devices
type: NetworkDevice[]
DeviceResolve:
id: 24
fields:
- id: 1
name: deviceId
type: string
- id: 2
name: solution
type: DeviceSolution
Sync:
id: 25
fields:
- id: 1
name: syncStatus
type: SyncStatus
- id: 2
name: timestamp
type: int64
SignalPeer:
id: 26
fields:
- id: 1
name: src
type: string
- id: 2
name: dst
type: string
- id: 3
name: sharedPublic?
type: string
- id: 4
name: signalType
type: SignalType
- id: 5
name: callId?
type: string
- id: 6
name: joinToken?
type: string
WebRTC:
id: 27
fields:
- id: 1
name: sdpOrCandidate
type: string
- id: 2
name: type
type: WebRTCType
IceServers:
id: 28
fields:
- id: 1
name: iceServers?
type: RTCIceServer[]
#Запрос "посадочного места" у сервера при загрузке файла
UploadCandidate:
id: 29
fields:
- id: 1 #клиент > сервер
name: size #размер загружаемого файла (декларируемый)
type: uint32
- id: 2 #сервер > клиент
name: objectId? #выделенный сервером objectId
type: string
- id: 3 #сервер > клиент
name: chunkLength? #размер чанка
type: uint32
- id: 4 #сервер > клиент
name: chunks? #количество чанков
type: uint32
- id: 5 #сервер > клиент
name: host? #хост, где сохранен файл
type: string
- id: 6 #клиент > сервер
name: ttl? #ttl в секундах, после которого файл будет удален с CDN и с таблицы, по умолчанию 7 дней, не допускается использование слишком больших значений
type: uint32
#Запрос скачивания файла с сервера, нужно передать objectId, а дальнейшую информацию вернет сервер
DownloadCandidate:
id: 30
fields:
- id: 1 #сервер > клиент
name: size? #размер файла
type: uint32
- id: 2 #клиент > сервер
name: objectId #выделенный сервером objectId
type: string
- id: 3 #сервер > клиент
name: chunkLength? #размер чанка
type: uint32
- id: 4 #сервер > клиент
name: chunks? #количество чанков
type: uint32
- id: 5 #сервер > клиент
name: host? #сервер с которого скачивать файл
type: string
#Установить аватар профиля
SetAvatar:
id: 31
fields:
- id: 1 #клиент > сервер
name: objectId #выделенный сервером objectId при отправке пакета UploadCandidate
type: string
- id: 2 #клиент > сервер
name: blurhash #превью аватара, строка blurhash
type: string
- id: 3 #клиент > сервер
name: mediaKey #ключ шифрования
type: string
#Удаляет аватар или фотографию из профиля
RemoveAvatar:
id: 32
fields:
- id: 1 #клиент > сервер
name: objectId #objectId аватара, аватар или фотография профиля должна при этом стоять у профиля отправителя пакета
type: string
#Запрос профиля
Profile:
id: 33
fields:
- id: 1 #клиент > сервер
name: publicKey
type: string
- id: 2 #сервер > клиент
name: info?
type: ProfileInfo