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 - 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 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 WebRTCType: type: int8 values: - id: 0 name: OFFER - id: 1 name: ANSWER - id: 2 name: ICE_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 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