From 610cd4892225997cd2588576c2816e9602771493 Mon Sep 17 00:00:00 2001 From: Ovizro Date: Sat, 20 May 2023 12:05:00 +0800 Subject: [PATCH 1/7] add a pyi file generation for tinode_grpc module --- pbx/py-generate.sh | 2 +- py_grpc/tinode_grpc/model_pb2.pyi | 689 ++++++++++++++++++++++++++++++ 2 files changed, 690 insertions(+), 1 deletion(-) create mode 100644 py_grpc/tinode_grpc/model_pb2.pyi diff --git a/pbx/py-generate.sh b/pbx/py-generate.sh index c4d5c8b5..9bacb774 100755 --- a/pbx/py-generate.sh +++ b/pbx/py-generate.sh @@ -10,6 +10,6 @@ done python="python${v}" # This generates python gRPC bindings for Tinode. -$python -m grpc_tools.protoc -I../pbx --python_out=../py_grpc/tinode_grpc --grpc_python_out=../py_grpc/tinode_grpc ../pbx/model.proto +$python -m grpc_tools.protoc -I../pbx --python_out=../py_grpc/tinode_grpc --grpc_python_out=../py_grpc/tinode_grpc --pyi_out=../py_grpc/tinode_grpc ../pbx/model.proto # Bindings are incompatible with Python packaging system. This is a fix. $python py_fix.py diff --git a/py_grpc/tinode_grpc/model_pb2.pyi b/py_grpc/tinode_grpc/model_pb2.pyi new file mode 100644 index 00000000..cf0eadcc --- /dev/null +++ b/py_grpc/tinode_grpc/model_pb2.pyi @@ -0,0 +1,689 @@ +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +ACCEPT: CallEvent +ANON: AuthLevel +ANSWER: CallEvent +AUTH: AuthLevel +CALL: InfoNote +CONTINUE: RespCode +CREATE: Crud +DELETE: Crud +DESCRIPTOR: _descriptor.FileDescriptor +DROP: RespCode +HANG_UP: CallEvent +ICE_CANDIDATE: CallEvent +INVITE: CallEvent +KP: InfoNote +NONE: AuthLevel +OFFER: CallEvent +READ: InfoNote +RECV: InfoNote +REPLACE: RespCode +RESPOND: RespCode +RINGING: CallEvent +ROOT: AuthLevel +UPDATE: Crud +X1: InfoNote +X2: CallEvent + +class AccessMode(_message.Message): + __slots__ = ["given", "want"] + GIVEN_FIELD_NUMBER: _ClassVar[int] + WANT_FIELD_NUMBER: _ClassVar[int] + given: str + want: str + def __init__(self, want: _Optional[str] = ..., given: _Optional[str] = ...) -> None: ... + +class AccountEvent(_message.Message): + __slots__ = ["action", "default_acs", "public", "tags", "user_id"] + ACTION_FIELD_NUMBER: _ClassVar[int] + DEFAULT_ACS_FIELD_NUMBER: _ClassVar[int] + PUBLIC_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + action: Crud + default_acs: DefaultAcsMode + public: bytes + tags: _containers.RepeatedScalarFieldContainer[str] + user_id: str + def __init__(self, action: _Optional[_Union[Crud, str]] = ..., user_id: _Optional[str] = ..., default_acs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., public: _Optional[bytes] = ..., tags: _Optional[_Iterable[str]] = ...) -> None: ... + +class ClientAcc(_message.Message): + __slots__ = ["auth_level", "cred", "desc", "id", "login", "scheme", "secret", "state", "tags", "tmp_scheme", "tmp_secret", "token", "user_id"] + AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int] + CRED_FIELD_NUMBER: _ClassVar[int] + DESC_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + LOGIN_FIELD_NUMBER: _ClassVar[int] + SCHEME_FIELD_NUMBER: _ClassVar[int] + SECRET_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + TMP_SCHEME_FIELD_NUMBER: _ClassVar[int] + TMP_SECRET_FIELD_NUMBER: _ClassVar[int] + TOKEN_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + auth_level: AuthLevel + cred: _containers.RepeatedCompositeFieldContainer[ClientCred] + desc: SetDesc + id: str + login: bool + scheme: str + secret: bytes + state: str + tags: _containers.RepeatedScalarFieldContainer[str] + tmp_scheme: str + tmp_secret: bytes + token: bytes + user_id: str + def __init__(self, id: _Optional[str] = ..., user_id: _Optional[str] = ..., scheme: _Optional[str] = ..., secret: _Optional[bytes] = ..., login: bool = ..., tags: _Optional[_Iterable[str]] = ..., desc: _Optional[_Union[SetDesc, _Mapping]] = ..., cred: _Optional[_Iterable[_Union[ClientCred, _Mapping]]] = ..., token: _Optional[bytes] = ..., state: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ..., tmp_scheme: _Optional[str] = ..., tmp_secret: _Optional[bytes] = ...) -> None: ... + +class ClientCred(_message.Message): + __slots__ = ["method", "params", "response", "value"] + class ParamsEntry(_message.Message): + __slots__ = ["key", "value"] + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: bytes + def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ... + METHOD_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] + RESPONSE_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + method: str + params: _containers.ScalarMap[str, bytes] + response: str + value: str + def __init__(self, method: _Optional[str] = ..., value: _Optional[str] = ..., response: _Optional[str] = ..., params: _Optional[_Mapping[str, bytes]] = ...) -> None: ... + +class ClientDel(_message.Message): + __slots__ = ["cred", "del_seq", "hard", "id", "topic", "user_id", "what"] + class What(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + CRED: ClientDel.What + CRED_FIELD_NUMBER: _ClassVar[int] + DEL_SEQ_FIELD_NUMBER: _ClassVar[int] + HARD_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + MSG: ClientDel.What + SUB: ClientDel.What + TOPIC: ClientDel.What + TOPIC_FIELD_NUMBER: _ClassVar[int] + USER: ClientDel.What + USER_ID_FIELD_NUMBER: _ClassVar[int] + WHAT_FIELD_NUMBER: _ClassVar[int] + X0: ClientDel.What + cred: ClientCred + del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange] + hard: bool + id: str + topic: str + user_id: str + what: ClientDel.What + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., what: _Optional[_Union[ClientDel.What, str]] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ..., user_id: _Optional[str] = ..., cred: _Optional[_Union[ClientCred, _Mapping]] = ..., hard: bool = ...) -> None: ... + +class ClientExtra(_message.Message): + __slots__ = ["attachments", "auth_level", "on_behalf_of"] + ATTACHMENTS_FIELD_NUMBER: _ClassVar[int] + AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int] + ON_BEHALF_OF_FIELD_NUMBER: _ClassVar[int] + attachments: _containers.RepeatedScalarFieldContainer[str] + auth_level: AuthLevel + on_behalf_of: str + def __init__(self, attachments: _Optional[_Iterable[str]] = ..., on_behalf_of: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ...) -> None: ... + +class ClientGet(_message.Message): + __slots__ = ["id", "query", "topic"] + ID_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + id: str + query: GetQuery + topic: str + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., query: _Optional[_Union[GetQuery, _Mapping]] = ...) -> None: ... + +class ClientHi(_message.Message): + __slots__ = ["background", "device_id", "id", "lang", "platform", "user_agent", "ver"] + BACKGROUND_FIELD_NUMBER: _ClassVar[int] + DEVICE_ID_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + LANG_FIELD_NUMBER: _ClassVar[int] + PLATFORM_FIELD_NUMBER: _ClassVar[int] + USER_AGENT_FIELD_NUMBER: _ClassVar[int] + VER_FIELD_NUMBER: _ClassVar[int] + background: bool + device_id: str + id: str + lang: str + platform: str + user_agent: str + ver: str + def __init__(self, id: _Optional[str] = ..., user_agent: _Optional[str] = ..., ver: _Optional[str] = ..., device_id: _Optional[str] = ..., lang: _Optional[str] = ..., platform: _Optional[str] = ..., background: bool = ...) -> None: ... + +class ClientLeave(_message.Message): + __slots__ = ["id", "topic", "unsub"] + ID_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + UNSUB_FIELD_NUMBER: _ClassVar[int] + id: str + topic: str + unsub: bool + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., unsub: bool = ...) -> None: ... + +class ClientLogin(_message.Message): + __slots__ = ["cred", "id", "scheme", "secret"] + CRED_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + SCHEME_FIELD_NUMBER: _ClassVar[int] + SECRET_FIELD_NUMBER: _ClassVar[int] + cred: _containers.RepeatedCompositeFieldContainer[ClientCred] + id: str + scheme: str + secret: bytes + def __init__(self, id: _Optional[str] = ..., scheme: _Optional[str] = ..., secret: _Optional[bytes] = ..., cred: _Optional[_Iterable[_Union[ClientCred, _Mapping]]] = ...) -> None: ... + +class ClientMsg(_message.Message): + __slots__ = ["acc", "extra", "get", "hi", "leave", "login", "note", "pub", "set", "sub"] + ACC_FIELD_NUMBER: _ClassVar[int] + DEL_FIELD_NUMBER: _ClassVar[int] + EXTRA_FIELD_NUMBER: _ClassVar[int] + GET_FIELD_NUMBER: _ClassVar[int] + HI_FIELD_NUMBER: _ClassVar[int] + LEAVE_FIELD_NUMBER: _ClassVar[int] + LOGIN_FIELD_NUMBER: _ClassVar[int] + NOTE_FIELD_NUMBER: _ClassVar[int] + PUB_FIELD_NUMBER: _ClassVar[int] + SET_FIELD_NUMBER: _ClassVar[int] + SUB_FIELD_NUMBER: _ClassVar[int] + acc: ClientAcc + extra: ClientExtra + get: ClientGet + hi: ClientHi + leave: ClientLeave + login: ClientLogin + note: ClientNote + pub: ClientPub + set: ClientSet + sub: ClientSub + def __init__(self, hi: _Optional[_Union[ClientHi, _Mapping]] = ..., acc: _Optional[_Union[ClientAcc, _Mapping]] = ..., login: _Optional[_Union[ClientLogin, _Mapping]] = ..., sub: _Optional[_Union[ClientSub, _Mapping]] = ..., leave: _Optional[_Union[ClientLeave, _Mapping]] = ..., pub: _Optional[_Union[ClientPub, _Mapping]] = ..., get: _Optional[_Union[ClientGet, _Mapping]] = ..., set: _Optional[_Union[ClientSet, _Mapping]] = ..., note: _Optional[_Union[ClientNote, _Mapping]] = ..., extra: _Optional[_Union[ClientExtra, _Mapping]] = ..., **kwargs) -> None: ... + +class ClientNote(_message.Message): + __slots__ = ["event", "payload", "seq_id", "topic", "unread", "what"] + EVENT_FIELD_NUMBER: _ClassVar[int] + PAYLOAD_FIELD_NUMBER: _ClassVar[int] + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + UNREAD_FIELD_NUMBER: _ClassVar[int] + WHAT_FIELD_NUMBER: _ClassVar[int] + event: CallEvent + payload: bytes + seq_id: int + topic: str + unread: int + what: InfoNote + def __init__(self, topic: _Optional[str] = ..., what: _Optional[_Union[InfoNote, str]] = ..., seq_id: _Optional[int] = ..., unread: _Optional[int] = ..., event: _Optional[_Union[CallEvent, str]] = ..., payload: _Optional[bytes] = ...) -> None: ... + +class ClientPub(_message.Message): + __slots__ = ["content", "head", "id", "no_echo", "topic"] + class HeadEntry(_message.Message): + __slots__ = ["key", "value"] + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: bytes + def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ... + CONTENT_FIELD_NUMBER: _ClassVar[int] + HEAD_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + NO_ECHO_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + content: bytes + head: _containers.ScalarMap[str, bytes] + id: str + no_echo: bool + topic: str + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., no_echo: bool = ..., head: _Optional[_Mapping[str, bytes]] = ..., content: _Optional[bytes] = ...) -> None: ... + +class ClientReq(_message.Message): + __slots__ = ["msg", "sess"] + MSG_FIELD_NUMBER: _ClassVar[int] + SESS_FIELD_NUMBER: _ClassVar[int] + msg: ClientMsg + sess: Session + def __init__(self, msg: _Optional[_Union[ClientMsg, _Mapping]] = ..., sess: _Optional[_Union[Session, _Mapping]] = ...) -> None: ... + +class ClientSet(_message.Message): + __slots__ = ["id", "query", "topic"] + ID_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + id: str + query: SetQuery + topic: str + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., query: _Optional[_Union[SetQuery, _Mapping]] = ...) -> None: ... + +class ClientSub(_message.Message): + __slots__ = ["get_query", "id", "set_query", "topic"] + GET_QUERY_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + SET_QUERY_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + get_query: GetQuery + id: str + set_query: SetQuery + topic: str + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., set_query: _Optional[_Union[SetQuery, _Mapping]] = ..., get_query: _Optional[_Union[GetQuery, _Mapping]] = ...) -> None: ... + +class DefaultAcsMode(_message.Message): + __slots__ = ["anon", "auth"] + ANON_FIELD_NUMBER: _ClassVar[int] + AUTH_FIELD_NUMBER: _ClassVar[int] + anon: str + auth: str + def __init__(self, auth: _Optional[str] = ..., anon: _Optional[str] = ...) -> None: ... + +class DelValues(_message.Message): + __slots__ = ["del_id", "del_seq"] + DEL_ID_FIELD_NUMBER: _ClassVar[int] + DEL_SEQ_FIELD_NUMBER: _ClassVar[int] + del_id: int + del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange] + def __init__(self, del_id: _Optional[int] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ...) -> None: ... + +class GetOpts(_message.Message): + __slots__ = ["before_id", "if_modified_since", "limit", "since_id", "topic", "user"] + BEFORE_ID_FIELD_NUMBER: _ClassVar[int] + IF_MODIFIED_SINCE_FIELD_NUMBER: _ClassVar[int] + LIMIT_FIELD_NUMBER: _ClassVar[int] + SINCE_ID_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + before_id: int + if_modified_since: int + limit: int + since_id: int + topic: str + user: str + def __init__(self, if_modified_since: _Optional[int] = ..., user: _Optional[str] = ..., topic: _Optional[str] = ..., since_id: _Optional[int] = ..., before_id: _Optional[int] = ..., limit: _Optional[int] = ...) -> None: ... + +class GetQuery(_message.Message): + __slots__ = ["data", "desc", "sub", "what"] + DATA_FIELD_NUMBER: _ClassVar[int] + DESC_FIELD_NUMBER: _ClassVar[int] + SUB_FIELD_NUMBER: _ClassVar[int] + WHAT_FIELD_NUMBER: _ClassVar[int] + data: GetOpts + desc: GetOpts + sub: GetOpts + what: str + def __init__(self, what: _Optional[str] = ..., desc: _Optional[_Union[GetOpts, _Mapping]] = ..., sub: _Optional[_Union[GetOpts, _Mapping]] = ..., data: _Optional[_Union[GetOpts, _Mapping]] = ...) -> None: ... + +class MessageEvent(_message.Message): + __slots__ = ["action", "msg"] + ACTION_FIELD_NUMBER: _ClassVar[int] + MSG_FIELD_NUMBER: _ClassVar[int] + action: Crud + msg: ServerData + def __init__(self, action: _Optional[_Union[Crud, str]] = ..., msg: _Optional[_Union[ServerData, _Mapping]] = ...) -> None: ... + +class SearchFound(_message.Message): + __slots__ = ["query", "result", "status"] + QUERY_FIELD_NUMBER: _ClassVar[int] + RESULT_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + query: str + result: _containers.RepeatedCompositeFieldContainer[TopicSub] + status: RespCode + def __init__(self, status: _Optional[_Union[RespCode, str]] = ..., query: _Optional[str] = ..., result: _Optional[_Iterable[_Union[TopicSub, _Mapping]]] = ...) -> None: ... + +class SearchQuery(_message.Message): + __slots__ = ["query", "user_id"] + QUERY_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + query: str + user_id: str + def __init__(self, user_id: _Optional[str] = ..., query: _Optional[str] = ...) -> None: ... + +class SeqRange(_message.Message): + __slots__ = ["hi", "low"] + HI_FIELD_NUMBER: _ClassVar[int] + LOW_FIELD_NUMBER: _ClassVar[int] + hi: int + low: int + def __init__(self, low: _Optional[int] = ..., hi: _Optional[int] = ...) -> None: ... + +class ServerCred(_message.Message): + __slots__ = ["done", "method", "value"] + DONE_FIELD_NUMBER: _ClassVar[int] + METHOD_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + done: bool + method: str + value: str + def __init__(self, method: _Optional[str] = ..., value: _Optional[str] = ..., done: bool = ...) -> None: ... + +class ServerCtrl(_message.Message): + __slots__ = ["code", "id", "params", "text", "topic"] + class ParamsEntry(_message.Message): + __slots__ = ["key", "value"] + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: bytes + def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ... + CODE_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] + TEXT_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + code: int + id: str + params: _containers.ScalarMap[str, bytes] + text: str + topic: str + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., code: _Optional[int] = ..., text: _Optional[str] = ..., params: _Optional[_Mapping[str, bytes]] = ...) -> None: ... + +class ServerData(_message.Message): + __slots__ = ["content", "deleted_at", "from_user_id", "head", "seq_id", "timestamp", "topic"] + class HeadEntry(_message.Message): + __slots__ = ["key", "value"] + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: bytes + def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ... + CONTENT_FIELD_NUMBER: _ClassVar[int] + DELETED_AT_FIELD_NUMBER: _ClassVar[int] + FROM_USER_ID_FIELD_NUMBER: _ClassVar[int] + HEAD_FIELD_NUMBER: _ClassVar[int] + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + content: bytes + deleted_at: int + from_user_id: str + head: _containers.ScalarMap[str, bytes] + seq_id: int + timestamp: int + topic: str + def __init__(self, topic: _Optional[str] = ..., from_user_id: _Optional[str] = ..., timestamp: _Optional[int] = ..., deleted_at: _Optional[int] = ..., seq_id: _Optional[int] = ..., head: _Optional[_Mapping[str, bytes]] = ..., content: _Optional[bytes] = ...) -> None: ... + +class ServerInfo(_message.Message): + __slots__ = ["event", "from_user_id", "payload", "seq_id", "src", "topic", "what"] + EVENT_FIELD_NUMBER: _ClassVar[int] + FROM_USER_ID_FIELD_NUMBER: _ClassVar[int] + PAYLOAD_FIELD_NUMBER: _ClassVar[int] + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + SRC_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + WHAT_FIELD_NUMBER: _ClassVar[int] + event: CallEvent + from_user_id: str + payload: bytes + seq_id: int + src: str + topic: str + what: InfoNote + def __init__(self, topic: _Optional[str] = ..., from_user_id: _Optional[str] = ..., what: _Optional[_Union[InfoNote, str]] = ..., seq_id: _Optional[int] = ..., src: _Optional[str] = ..., event: _Optional[_Union[CallEvent, str]] = ..., payload: _Optional[bytes] = ...) -> None: ... + +class ServerMeta(_message.Message): + __slots__ = ["cred", "desc", "id", "sub", "tags", "topic"] + CRED_FIELD_NUMBER: _ClassVar[int] + DEL_FIELD_NUMBER: _ClassVar[int] + DESC_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + SUB_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + cred: _containers.RepeatedCompositeFieldContainer[ServerCred] + desc: TopicDesc + id: str + sub: _containers.RepeatedCompositeFieldContainer[TopicSub] + tags: _containers.RepeatedScalarFieldContainer[str] + topic: str + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., desc: _Optional[_Union[TopicDesc, _Mapping]] = ..., sub: _Optional[_Iterable[_Union[TopicSub, _Mapping]]] = ..., tags: _Optional[_Iterable[str]] = ..., cred: _Optional[_Iterable[_Union[ServerCred, _Mapping]]] = ..., **kwargs) -> None: ... + +class ServerMsg(_message.Message): + __slots__ = ["ctrl", "data", "info", "meta", "pres", "topic"] + CTRL_FIELD_NUMBER: _ClassVar[int] + DATA_FIELD_NUMBER: _ClassVar[int] + INFO_FIELD_NUMBER: _ClassVar[int] + META_FIELD_NUMBER: _ClassVar[int] + PRES_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + ctrl: ServerCtrl + data: ServerData + info: ServerInfo + meta: ServerMeta + pres: ServerPres + topic: str + def __init__(self, ctrl: _Optional[_Union[ServerCtrl, _Mapping]] = ..., data: _Optional[_Union[ServerData, _Mapping]] = ..., pres: _Optional[_Union[ServerPres, _Mapping]] = ..., meta: _Optional[_Union[ServerMeta, _Mapping]] = ..., info: _Optional[_Union[ServerInfo, _Mapping]] = ..., topic: _Optional[str] = ...) -> None: ... + +class ServerPres(_message.Message): + __slots__ = ["acs", "actor_user_id", "del_id", "del_seq", "seq_id", "src", "target_user_id", "topic", "user_agent", "what"] + class What(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + ACS: ServerPres.What + ACS_FIELD_NUMBER: _ClassVar[int] + ACTOR_USER_ID_FIELD_NUMBER: _ClassVar[int] + DEL: ServerPres.What + DEL_ID_FIELD_NUMBER: _ClassVar[int] + DEL_SEQ_FIELD_NUMBER: _ClassVar[int] + GONE: ServerPres.What + MSG: ServerPres.What + OFF: ServerPres.What + ON: ServerPres.What + READ: ServerPres.What + RECV: ServerPres.What + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + SRC_FIELD_NUMBER: _ClassVar[int] + TAGS: ServerPres.What + TARGET_USER_ID_FIELD_NUMBER: _ClassVar[int] + TERM: ServerPres.What + TOPIC_FIELD_NUMBER: _ClassVar[int] + UA: ServerPres.What + UPD: ServerPres.What + USER_AGENT_FIELD_NUMBER: _ClassVar[int] + WHAT_FIELD_NUMBER: _ClassVar[int] + X3: ServerPres.What + acs: AccessMode + actor_user_id: str + del_id: int + del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange] + seq_id: int + src: str + target_user_id: str + topic: str + user_agent: str + what: ServerPres.What + def __init__(self, topic: _Optional[str] = ..., src: _Optional[str] = ..., what: _Optional[_Union[ServerPres.What, str]] = ..., user_agent: _Optional[str] = ..., seq_id: _Optional[int] = ..., del_id: _Optional[int] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ..., target_user_id: _Optional[str] = ..., actor_user_id: _Optional[str] = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ...) -> None: ... + +class ServerResp(_message.Message): + __slots__ = ["clmsg", "srvmsg", "status"] + CLMSG_FIELD_NUMBER: _ClassVar[int] + SRVMSG_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + clmsg: ClientMsg + srvmsg: ServerMsg + status: RespCode + def __init__(self, status: _Optional[_Union[RespCode, str]] = ..., srvmsg: _Optional[_Union[ServerMsg, _Mapping]] = ..., clmsg: _Optional[_Union[ClientMsg, _Mapping]] = ...) -> None: ... + +class Session(_message.Message): + __slots__ = ["auth_level", "device_id", "language", "remote_addr", "session_id", "user_agent", "user_id"] + AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int] + DEVICE_ID_FIELD_NUMBER: _ClassVar[int] + LANGUAGE_FIELD_NUMBER: _ClassVar[int] + REMOTE_ADDR_FIELD_NUMBER: _ClassVar[int] + SESSION_ID_FIELD_NUMBER: _ClassVar[int] + USER_AGENT_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + auth_level: AuthLevel + device_id: str + language: str + remote_addr: str + session_id: str + user_agent: str + user_id: str + def __init__(self, session_id: _Optional[str] = ..., user_id: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ..., remote_addr: _Optional[str] = ..., user_agent: _Optional[str] = ..., device_id: _Optional[str] = ..., language: _Optional[str] = ...) -> None: ... + +class SetDesc(_message.Message): + __slots__ = ["default_acs", "private", "public", "trusted"] + DEFAULT_ACS_FIELD_NUMBER: _ClassVar[int] + PRIVATE_FIELD_NUMBER: _ClassVar[int] + PUBLIC_FIELD_NUMBER: _ClassVar[int] + TRUSTED_FIELD_NUMBER: _ClassVar[int] + default_acs: DefaultAcsMode + private: bytes + public: bytes + trusted: bytes + def __init__(self, default_acs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., public: _Optional[bytes] = ..., private: _Optional[bytes] = ..., trusted: _Optional[bytes] = ...) -> None: ... + +class SetQuery(_message.Message): + __slots__ = ["cred", "desc", "sub", "tags"] + CRED_FIELD_NUMBER: _ClassVar[int] + DESC_FIELD_NUMBER: _ClassVar[int] + SUB_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + cred: ClientCred + desc: SetDesc + sub: SetSub + tags: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, desc: _Optional[_Union[SetDesc, _Mapping]] = ..., sub: _Optional[_Union[SetSub, _Mapping]] = ..., tags: _Optional[_Iterable[str]] = ..., cred: _Optional[_Union[ClientCred, _Mapping]] = ...) -> None: ... + +class SetSub(_message.Message): + __slots__ = ["mode", "user_id"] + MODE_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + mode: str + user_id: str + def __init__(self, user_id: _Optional[str] = ..., mode: _Optional[str] = ...) -> None: ... + +class SubscriptionEvent(_message.Message): + __slots__ = ["action", "del_id", "mode", "private", "read_id", "recv_id", "topic", "user_id"] + ACTION_FIELD_NUMBER: _ClassVar[int] + DEL_ID_FIELD_NUMBER: _ClassVar[int] + MODE_FIELD_NUMBER: _ClassVar[int] + PRIVATE_FIELD_NUMBER: _ClassVar[int] + READ_ID_FIELD_NUMBER: _ClassVar[int] + RECV_ID_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + action: Crud + del_id: int + mode: AccessMode + private: bytes + read_id: int + recv_id: int + topic: str + user_id: str + def __init__(self, action: _Optional[_Union[Crud, str]] = ..., topic: _Optional[str] = ..., user_id: _Optional[str] = ..., del_id: _Optional[int] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., mode: _Optional[_Union[AccessMode, _Mapping]] = ..., private: _Optional[bytes] = ...) -> None: ... + +class TopicDesc(_message.Message): + __slots__ = ["acs", "created_at", "defacs", "del_id", "is_chan", "last_seen_time", "last_seen_user_agent", "online", "private", "public", "read_id", "recv_id", "seq_id", "state", "state_at", "touched_at", "trusted", "updated_at"] + ACS_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + DEFACS_FIELD_NUMBER: _ClassVar[int] + DEL_ID_FIELD_NUMBER: _ClassVar[int] + IS_CHAN_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_TIME_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_USER_AGENT_FIELD_NUMBER: _ClassVar[int] + ONLINE_FIELD_NUMBER: _ClassVar[int] + PRIVATE_FIELD_NUMBER: _ClassVar[int] + PUBLIC_FIELD_NUMBER: _ClassVar[int] + READ_ID_FIELD_NUMBER: _ClassVar[int] + RECV_ID_FIELD_NUMBER: _ClassVar[int] + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + STATE_AT_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + TOUCHED_AT_FIELD_NUMBER: _ClassVar[int] + TRUSTED_FIELD_NUMBER: _ClassVar[int] + UPDATED_AT_FIELD_NUMBER: _ClassVar[int] + acs: AccessMode + created_at: int + defacs: DefaultAcsMode + del_id: int + is_chan: bool + last_seen_time: int + last_seen_user_agent: str + online: bool + private: bytes + public: bytes + read_id: int + recv_id: int + seq_id: int + state: str + state_at: int + touched_at: int + trusted: bytes + updated_at: int + def __init__(self, created_at: _Optional[int] = ..., updated_at: _Optional[int] = ..., touched_at: _Optional[int] = ..., defacs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ..., seq_id: _Optional[int] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., del_id: _Optional[int] = ..., public: _Optional[bytes] = ..., private: _Optional[bytes] = ..., state: _Optional[str] = ..., state_at: _Optional[int] = ..., trusted: _Optional[bytes] = ..., is_chan: bool = ..., online: bool = ..., last_seen_time: _Optional[int] = ..., last_seen_user_agent: _Optional[str] = ...) -> None: ... + +class TopicEvent(_message.Message): + __slots__ = ["action", "desc", "name"] + ACTION_FIELD_NUMBER: _ClassVar[int] + DESC_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + action: Crud + desc: TopicDesc + name: str + def __init__(self, action: _Optional[_Union[Crud, str]] = ..., name: _Optional[str] = ..., desc: _Optional[_Union[TopicDesc, _Mapping]] = ...) -> None: ... + +class TopicSub(_message.Message): + __slots__ = ["acs", "del_id", "deleted_at", "last_seen_time", "last_seen_user_agent", "online", "private", "public", "read_id", "recv_id", "seq_id", "topic", "touched_at", "trusted", "updated_at", "user_id"] + ACS_FIELD_NUMBER: _ClassVar[int] + DELETED_AT_FIELD_NUMBER: _ClassVar[int] + DEL_ID_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_TIME_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_USER_AGENT_FIELD_NUMBER: _ClassVar[int] + ONLINE_FIELD_NUMBER: _ClassVar[int] + PRIVATE_FIELD_NUMBER: _ClassVar[int] + PUBLIC_FIELD_NUMBER: _ClassVar[int] + READ_ID_FIELD_NUMBER: _ClassVar[int] + RECV_ID_FIELD_NUMBER: _ClassVar[int] + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + TOUCHED_AT_FIELD_NUMBER: _ClassVar[int] + TRUSTED_FIELD_NUMBER: _ClassVar[int] + UPDATED_AT_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + acs: AccessMode + del_id: int + deleted_at: int + last_seen_time: int + last_seen_user_agent: str + online: bool + private: bytes + public: bytes + read_id: int + recv_id: int + seq_id: int + topic: str + touched_at: int + trusted: bytes + updated_at: int + user_id: str + def __init__(self, updated_at: _Optional[int] = ..., deleted_at: _Optional[int] = ..., online: bool = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., public: _Optional[bytes] = ..., trusted: _Optional[bytes] = ..., private: _Optional[bytes] = ..., user_id: _Optional[str] = ..., topic: _Optional[str] = ..., touched_at: _Optional[int] = ..., seq_id: _Optional[int] = ..., del_id: _Optional[int] = ..., last_seen_time: _Optional[int] = ..., last_seen_user_agent: _Optional[str] = ...) -> None: ... + +class Unused(_message.Message): + __slots__ = [] + def __init__(self) -> None: ... + +class AuthLevel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + +class InfoNote(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + +class CallEvent(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + +class RespCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + +class Crud(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] From dd1af03a6323998260e89d2a3191b96188704529 Mon Sep 17 00:00:00 2001 From: or-else Date: Wed, 24 May 2023 17:54:50 -0700 Subject: [PATCH 2/7] possible fix for a race condition in topic subscriptions --- server/datamodel.go | 4 ++-- server/store/types/types.go | 2 ++ server/topic.go | 6 ++++++ server/utils.go | 2 ++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/server/datamodel.go b/server/datamodel.go index 28c0e5de..b4390f10 100644 --- a/server/datamodel.go +++ b/server/datamodel.go @@ -1673,8 +1673,8 @@ func ErrLocked(id, topic string, ts time.Time) *ServerComMessage { return ErrLockedExplicitTs(id, topic, ts, ts) } -// ErrLockedReply operation rejected because the topic is being deleted with explicit server and -// incoming request timestamps in response to a client request (503). +// ErrLockedReply operation rejected because the topic is being deleted in response +// to a client request (503). func ErrLockedReply(msg *ClientComMessage, ts time.Time) *ServerComMessage { return ErrLockedExplicitTs(msg.Id, msg.Original, ts, msg.Timestamp) } diff --git a/server/store/types/types.go b/server/store/types/types.go index e744dfa8..2e5e8a1f 100644 --- a/server/store/types/types.go +++ b/server/store/types/types.go @@ -51,6 +51,8 @@ const ( ErrInvalidResponse = StoreError("invalid response") // ErrRedirected means the subscription request was redirected to another topic. ErrRedirected = StoreError("redirected") + // ErrAlreadySatisfied means the desired result, such as subscription, is already satisfied. + ErrAlreadySatisfied = StoreError("already satisfied") ) // Uid is a database-specific record id, suitable to be used as a primary key. diff --git a/server/topic.go b/server/topic.go index 9c7620e7..babfd820 100644 --- a/server/topic.go +++ b/server/topic.go @@ -1330,6 +1330,12 @@ func (t *Topic) broadcastToSessions(msg *ServerComMessage) { func (t *Topic) subscriptionReply(asChan bool, msg *ClientComMessage) error { // The topic is already initialized by the Hub + // Check if the session is already subscribed to topic. + if msg.sess.getSub(t.name) != nil { + msg.sess.queueOut(InfoAlreadySubscribed(msg.Id, msg.Original, msg.Timestamp)) + return types.ErrAlreadySatisfied + } + msgsub := msg.Sub // For newly created topics report topic creation time. diff --git a/server/utils.go b/server/utils.go index f547af09..82835f1f 100644 --- a/server/utils.go +++ b/server/utils.go @@ -271,6 +271,8 @@ func decodeStoreErrorExplicitTs(err error, id, topic string, serverTs, incomingR errmsg = ErrInvalidResponse(id, topic, serverTs, incomingReqTs) case types.ErrRedirected: errmsg = InfoUseOther(id, topic, params["topic"].(string), serverTs, incomingReqTs) + case types.ErrAlreadySatisfied: + errmsg = InfoNoAction(id, topic, serverTs, incomingReqTs) default: errmsg = ErrUnknownExplicitTs(id, topic, serverTs, incomingReqTs) } From bfbb7971f05c6886f0491e8fb330c311cff26ea9 Mon Sep 17 00:00:00 2001 From: or-else Date: Wed, 24 May 2023 18:11:13 -0700 Subject: [PATCH 3/7] explain the need for a check --- server/topic.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/topic.go b/server/topic.go index babfd820..956c8b77 100644 --- a/server/topic.go +++ b/server/topic.go @@ -1331,6 +1331,10 @@ func (t *Topic) subscriptionReply(asChan bool, msg *ClientComMessage) error { // The topic is already initialized by the Hub // Check if the session is already subscribed to topic. + // Subscription is checked in session.go, but there is a gap between topic + // creation + un-pausing and processing the first subscription request, + // before the topic is linked to session: a client may send several subscription + // requests in that gap. if msg.sess.getSub(t.name) != nil { msg.sess.queueOut(InfoAlreadySubscribed(msg.Id, msg.Original, msg.Timestamp)) return types.ErrAlreadySatisfied From f9de54621432b259635633371af25bba88942f90 Mon Sep 17 00:00:00 2001 From: or-else Date: Thu, 25 May 2023 10:14:20 -0700 Subject: [PATCH 4/7] move subscription check up in call chain, ref #865 --- server/store/types/types.go | 2 -- server/topic.go | 16 ++++++---------- server/utils.go | 2 -- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/server/store/types/types.go b/server/store/types/types.go index 2e5e8a1f..e744dfa8 100644 --- a/server/store/types/types.go +++ b/server/store/types/types.go @@ -51,8 +51,6 @@ const ( ErrInvalidResponse = StoreError("invalid response") // ErrRedirected means the subscription request was redirected to another topic. ErrRedirected = StoreError("redirected") - // ErrAlreadySatisfied means the desired result, such as subscription, is already satisfied. - ErrAlreadySatisfied = StoreError("already satisfied") ) // Uid is a database-specific record id, suitable to be used as a primary key. diff --git a/server/topic.go b/server/topic.go index 956c8b77..0c23f0d9 100644 --- a/server/topic.go +++ b/server/topic.go @@ -334,6 +334,12 @@ func (t *Topic) registerSession(msg *ClientComMessage) { // Request to add a connection to this topic if t.isInactive() { msg.sess.queueOut(ErrLockedReply(msg, types.TimeNow())) + } else if msg.sess.getSub(t.name) != nil { + // Session is already subscribed to topic. Subscription is checked in session.go, + // but there is a gap between topic creation/un-pausing and processing the + // first subscription request, before the topic is linked to session: a client + // may send several subscription requests in that gap. + msg.sess.queueOut(InfoAlreadySubscribed(msg.Id, msg.Original, msg.Timestamp)) } else { // The topic is alive, so stop the kill timer, if it's ticking. We don't want the topic to die // while processing the call. @@ -1330,16 +1336,6 @@ func (t *Topic) broadcastToSessions(msg *ServerComMessage) { func (t *Topic) subscriptionReply(asChan bool, msg *ClientComMessage) error { // The topic is already initialized by the Hub - // Check if the session is already subscribed to topic. - // Subscription is checked in session.go, but there is a gap between topic - // creation + un-pausing and processing the first subscription request, - // before the topic is linked to session: a client may send several subscription - // requests in that gap. - if msg.sess.getSub(t.name) != nil { - msg.sess.queueOut(InfoAlreadySubscribed(msg.Id, msg.Original, msg.Timestamp)) - return types.ErrAlreadySatisfied - } - msgsub := msg.Sub // For newly created topics report topic creation time. diff --git a/server/utils.go b/server/utils.go index 82835f1f..f547af09 100644 --- a/server/utils.go +++ b/server/utils.go @@ -271,8 +271,6 @@ func decodeStoreErrorExplicitTs(err error, id, topic string, serverTs, incomingR errmsg = ErrInvalidResponse(id, topic, serverTs, incomingReqTs) case types.ErrRedirected: errmsg = InfoUseOther(id, topic, params["topic"].(string), serverTs, incomingReqTs) - case types.ErrAlreadySatisfied: - errmsg = InfoNoAction(id, topic, serverTs, incomingReqTs) default: errmsg = ErrUnknownExplicitTs(id, topic, serverTs, incomingReqTs) } From 9e420bc21e7be2f2f5b30c2180ade1f297c3d464 Mon Sep 17 00:00:00 2001 From: or-else Date: Thu, 25 May 2023 17:06:19 -0700 Subject: [PATCH 5/7] rebuilt python modules --- py_grpc/tinode_grpc/model_pb2.py | 223 +++--- py_grpc/tinode_grpc/model_pb2.pyi | 1201 +++++++++++++++-------------- 2 files changed, 734 insertions(+), 690 deletions(-) diff --git a/py_grpc/tinode_grpc/model_pb2.py b/py_grpc/tinode_grpc/model_pb2.py index b3d7de99..757d574b 100644 --- a/py_grpc/tinode_grpc/model_pb2.py +++ b/py_grpc/tinode_grpc/model_pb2.py @@ -2,10 +2,10 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: model.proto """Generated protocol buffer code.""" -from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -15,8 +15,9 @@ _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0bmodel.proto\x12\x03pbx\"\x08\n\x06Unused\",\n\x0e\x44\x65\x66\x61ultAcsMode\x12\x0c\n\x04\x61uth\x18\x01 \x01(\t\x12\x0c\n\x04\x61non\x18\x02 \x01(\t\")\n\nAccessMode\x12\x0c\n\x04want\x18\x01 \x01(\t\x12\r\n\x05given\x18\x02 \x01(\t\"\'\n\x06SetSub\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x0c\n\x04mode\x18\x02 \x01(\t\"\x99\x01\n\nClientCred\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x10\n\x08response\x18\x03 \x01(\t\x12+\n\x06params\x18\x04 \x03(\x0b\x32\x1b.pbx.ClientCred.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"e\n\x07SetDesc\x12(\n\x0b\x64\x65\x66\x61ult_acs\x18\x01 \x01(\x0b\x32\x13.pbx.DefaultAcsMode\x12\x0e\n\x06public\x18\x02 \x01(\x0c\x12\x0f\n\x07private\x18\x03 \x01(\x0c\x12\x0f\n\x07trusted\x18\x04 \x01(\x0c\"u\n\x07GetOpts\x12\x19\n\x11if_modified_since\x18\x01 \x01(\x03\x12\x0c\n\x04user\x18\x02 \x01(\t\x12\r\n\x05topic\x18\x03 \x01(\t\x12\x10\n\x08since_id\x18\x04 \x01(\x05\x12\x11\n\tbefore_id\x18\x05 \x01(\x05\x12\r\n\x05limit\x18\x06 \x01(\x05\"k\n\x08GetQuery\x12\x0c\n\x04what\x18\x01 \x01(\t\x12\x1a\n\x04\x64\x65sc\x18\x02 \x01(\x0b\x32\x0c.pbx.GetOpts\x12\x19\n\x03sub\x18\x03 \x01(\x0b\x32\x0c.pbx.GetOpts\x12\x1a\n\x04\x64\x61ta\x18\x04 \x01(\x0b\x32\x0c.pbx.GetOpts\"m\n\x08SetQuery\x12\x1a\n\x04\x64\x65sc\x18\x01 \x01(\x0b\x32\x0c.pbx.SetDesc\x12\x18\n\x03sub\x18\x02 \x01(\x0b\x32\x0b.pbx.SetSub\x12\x0c\n\x04tags\x18\x03 \x03(\t\x12\x1d\n\x04\x63red\x18\x04 \x01(\x0b\x32\x0f.pbx.ClientCred\"#\n\x08SeqRange\x12\x0b\n\x03low\x18\x01 \x01(\x05\x12\n\n\x02hi\x18\x02 \x01(\x05\"~\n\x08\x43lientHi\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\nuser_agent\x18\x02 \x01(\t\x12\x0b\n\x03ver\x18\x03 \x01(\t\x12\x11\n\tdevice_id\x18\x04 \x01(\t\x12\x0c\n\x04lang\x18\x05 \x01(\t\x12\x10\n\x08platform\x18\x06 \x01(\t\x12\x12\n\nbackground\x18\x07 \x01(\x08\"\x8a\x02\n\tClientAcc\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x0e\n\x06scheme\x18\x03 \x01(\t\x12\x0e\n\x06secret\x18\x04 \x01(\x0c\x12\r\n\x05login\x18\x05 \x01(\x08\x12\x0c\n\x04tags\x18\x06 \x03(\t\x12\x1a\n\x04\x64\x65sc\x18\x07 \x01(\x0b\x32\x0c.pbx.SetDesc\x12\x1d\n\x04\x63red\x18\x08 \x03(\x0b\x32\x0f.pbx.ClientCred\x12\r\n\x05token\x18\t \x01(\x0c\x12\r\n\x05state\x18\n \x01(\t\x12\"\n\nauth_level\x18\x0b \x01(\x0e\x32\x0e.pbx.AuthLevel\x12\x12\n\ntmp_scheme\x18\x0c \x01(\t\x12\x12\n\ntmp_secret\x18\r \x01(\x0c\"X\n\x0b\x43lientLogin\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06scheme\x18\x02 \x01(\t\x12\x0e\n\x06secret\x18\x03 \x01(\x0c\x12\x1d\n\x04\x63red\x18\x04 \x03(\x0b\x32\x0f.pbx.ClientCred\"j\n\tClientSub\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12 \n\tset_query\x18\x03 \x01(\x0b\x32\r.pbx.SetQuery\x12 \n\tget_query\x18\x04 \x01(\x0b\x32\r.pbx.GetQuery\"7\n\x0b\x43lientLeave\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\r\n\x05unsub\x18\x03 \x01(\x08\"\x9d\x01\n\tClientPub\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0f\n\x07no_echo\x18\x03 \x01(\x08\x12&\n\x04head\x18\x04 \x03(\x0b\x32\x18.pbx.ClientPub.HeadEntry\x12\x0f\n\x07\x63ontent\x18\x05 \x01(\x0c\x1a+\n\tHeadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"D\n\tClientGet\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x1c\n\x05query\x18\x03 \x01(\x0b\x32\r.pbx.GetQuery\"D\n\tClientSet\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x1c\n\x05query\x18\x03 \x01(\x0b\x32\r.pbx.SetQuery\"\xe8\x01\n\tClientDel\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12!\n\x04what\x18\x03 \x01(\x0e\x32\x13.pbx.ClientDel.What\x12\x1e\n\x07\x64\x65l_seq\x18\x04 \x03(\x0b\x32\r.pbx.SeqRange\x12\x0f\n\x07user_id\x18\x05 \x01(\t\x12\x1d\n\x04\x63red\x18\x06 \x01(\x0b\x32\x0f.pbx.ClientCred\x12\x0c\n\x04hard\x18\x07 \x01(\x08\"?\n\x04What\x12\x06\n\x02X0\x10\x00\x12\x07\n\x03MSG\x10\x01\x12\t\n\x05TOPIC\x10\x02\x12\x07\n\x03SUB\x10\x03\x12\x08\n\x04USER\x10\x04\x12\x08\n\x04\x43RED\x10\x05\"\x88\x01\n\nClientNote\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x1b\n\x04what\x18\x02 \x01(\x0e\x32\r.pbx.InfoNote\x12\x0e\n\x06seq_id\x18\x03 \x01(\x05\x12\x0e\n\x06unread\x18\x04 \x01(\x05\x12\x1d\n\x05\x65vent\x18\x05 \x01(\x0e\x32\x0e.pbx.CallEvent\x12\x0f\n\x07payload\x18\x06 \x01(\x0c\"\\\n\x0b\x43lientExtra\x12\x13\n\x0b\x61ttachments\x18\x01 \x03(\t\x12\x14\n\x0con_behalf_of\x18\x02 \x01(\t\x12\"\n\nauth_level\x18\x03 \x01(\x0e\x32\x0e.pbx.AuthLevel\"\xf5\x02\n\tClientMsg\x12\x1b\n\x02hi\x18\x01 \x01(\x0b\x32\r.pbx.ClientHiH\x00\x12\x1d\n\x03\x61\x63\x63\x18\x02 \x01(\x0b\x32\x0e.pbx.ClientAccH\x00\x12!\n\x05login\x18\x03 \x01(\x0b\x32\x10.pbx.ClientLoginH\x00\x12\x1d\n\x03sub\x18\x04 \x01(\x0b\x32\x0e.pbx.ClientSubH\x00\x12!\n\x05leave\x18\x05 \x01(\x0b\x32\x10.pbx.ClientLeaveH\x00\x12\x1d\n\x03pub\x18\x06 \x01(\x0b\x32\x0e.pbx.ClientPubH\x00\x12\x1d\n\x03get\x18\x07 \x01(\x0b\x32\x0e.pbx.ClientGetH\x00\x12\x1d\n\x03set\x18\x08 \x01(\x0b\x32\x0e.pbx.ClientSetH\x00\x12\x1d\n\x03\x64\x65l\x18\t \x01(\x0b\x32\x0e.pbx.ClientDelH\x00\x12\x1f\n\x04note\x18\n \x01(\x0b\x32\x0f.pbx.ClientNoteH\x00\x12\x1f\n\x05\x65xtra\x18\r \x01(\x0b\x32\x10.pbx.ClientExtraB\t\n\x07Message\"9\n\nServerCred\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x0c\n\x04\x64one\x18\x03 \x01(\x08\"\xf6\x02\n\tTopicDesc\x12\x12\n\ncreated_at\x18\x01 \x01(\x03\x12\x12\n\nupdated_at\x18\x02 \x01(\x03\x12\x12\n\ntouched_at\x18\x03 \x01(\x03\x12#\n\x06\x64\x65\x66\x61\x63s\x18\x04 \x01(\x0b\x32\x13.pbx.DefaultAcsMode\x12\x1c\n\x03\x61\x63s\x18\x05 \x01(\x0b\x32\x0f.pbx.AccessMode\x12\x0e\n\x06seq_id\x18\x06 \x01(\x05\x12\x0f\n\x07read_id\x18\x07 \x01(\x05\x12\x0f\n\x07recv_id\x18\x08 \x01(\x05\x12\x0e\n\x06\x64\x65l_id\x18\t \x01(\x05\x12\x0e\n\x06public\x18\n \x01(\x0c\x12\x0f\n\x07private\x18\x0b \x01(\x0c\x12\r\n\x05state\x18\x0c \x01(\t\x12\x10\n\x08state_at\x18\r \x01(\x03\x12\x0f\n\x07trusted\x18\x0e \x01(\x0c\x12\x0f\n\x07is_chan\x18\x11 \x01(\x08\x12\x0e\n\x06online\x18\x12 \x01(\x08\x12\x16\n\x0elast_seen_time\x18\x0f \x01(\x03\x12\x1c\n\x14last_seen_user_agent\x18\x10 \x01(\t\"\xbe\x02\n\x08TopicSub\x12\x12\n\nupdated_at\x18\x01 \x01(\x03\x12\x12\n\ndeleted_at\x18\x02 \x01(\x03\x12\x0e\n\x06online\x18\x03 \x01(\x08\x12\x1c\n\x03\x61\x63s\x18\x04 \x01(\x0b\x32\x0f.pbx.AccessMode\x12\x0f\n\x07read_id\x18\x05 \x01(\x05\x12\x0f\n\x07recv_id\x18\x06 \x01(\x05\x12\x0e\n\x06public\x18\x07 \x01(\x0c\x12\x0f\n\x07trusted\x18\x10 \x01(\x0c\x12\x0f\n\x07private\x18\x08 \x01(\x0c\x12\x0f\n\x07user_id\x18\t \x01(\t\x12\r\n\x05topic\x18\n \x01(\t\x12\x12\n\ntouched_at\x18\x0b \x01(\x03\x12\x0e\n\x06seq_id\x18\x0c \x01(\x05\x12\x0e\n\x06\x64\x65l_id\x18\r \x01(\x05\x12\x16\n\x0elast_seen_time\x18\x0e \x01(\x03\x12\x1c\n\x14last_seen_user_agent\x18\x0f \x01(\t\";\n\tDelValues\x12\x0e\n\x06\x64\x65l_id\x18\x01 \x01(\x05\x12\x1e\n\x07\x64\x65l_seq\x18\x02 \x03(\x0b\x32\r.pbx.SeqRange\"\x9f\x01\n\nServerCtrl\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0c\n\x04\x63ode\x18\x03 \x01(\x05\x12\x0c\n\x04text\x18\x04 \x01(\t\x12+\n\x06params\x18\x05 \x03(\x0b\x32\x1b.pbx.ServerCtrl.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"\xcf\x01\n\nServerData\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x14\n\x0c\x66rom_user_id\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x03\x12\x12\n\ndeleted_at\x18\x03 \x01(\x03\x12\x0e\n\x06seq_id\x18\x04 \x01(\x05\x12\'\n\x04head\x18\x05 \x03(\x0b\x32\x19.pbx.ServerData.HeadEntry\x12\x0f\n\x07\x63ontent\x18\x06 \x01(\x0c\x1a+\n\tHeadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"\xec\x02\n\nServerPres\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x0b\n\x03src\x18\x02 \x01(\t\x12\"\n\x04what\x18\x03 \x01(\x0e\x32\x14.pbx.ServerPres.What\x12\x12\n\nuser_agent\x18\x04 \x01(\t\x12\x0e\n\x06seq_id\x18\x05 \x01(\x05\x12\x0e\n\x06\x64\x65l_id\x18\x06 \x01(\x05\x12\x1e\n\x07\x64\x65l_seq\x18\x07 \x03(\x0b\x32\r.pbx.SeqRange\x12\x16\n\x0etarget_user_id\x18\x08 \x01(\t\x12\x15\n\ractor_user_id\x18\t \x01(\t\x12\x1c\n\x03\x61\x63s\x18\n \x01(\x0b\x32\x0f.pbx.AccessMode\"}\n\x04What\x12\x06\n\x02X3\x10\x00\x12\x06\n\x02ON\x10\x01\x12\x07\n\x03OFF\x10\x02\x12\x06\n\x02UA\x10\x03\x12\x07\n\x03UPD\x10\x04\x12\x08\n\x04GONE\x10\x05\x12\x07\n\x03\x41\x43S\x10\x06\x12\x08\n\x04TERM\x10\x07\x12\x07\n\x03MSG\x10\x08\x12\x08\n\x04READ\x10\t\x12\x08\n\x04RECV\x10\n\x12\x07\n\x03\x44\x45L\x10\x0b\x12\x08\n\x04TAGS\x10\x0c\"\xab\x01\n\nServerMeta\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x1c\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x0e.pbx.TopicDesc\x12\x1a\n\x03sub\x18\x04 \x03(\x0b\x32\r.pbx.TopicSub\x12\x1b\n\x03\x64\x65l\x18\x05 \x01(\x0b\x32\x0e.pbx.DelValues\x12\x0c\n\x04tags\x18\x06 \x03(\t\x12\x1d\n\x04\x63red\x18\x07 \x03(\x0b\x32\x0f.pbx.ServerCred\"\x9b\x01\n\nServerInfo\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x14\n\x0c\x66rom_user_id\x18\x02 \x01(\t\x12\x1b\n\x04what\x18\x03 \x01(\x0e\x32\r.pbx.InfoNote\x12\x0e\n\x06seq_id\x18\x04 \x01(\x05\x12\x0b\n\x03src\x18\x05 \x01(\t\x12\x1d\n\x05\x65vent\x18\x06 \x01(\x0e\x32\x0e.pbx.CallEvent\x12\x0f\n\x07payload\x18\x07 \x01(\x0c\"\xce\x01\n\tServerMsg\x12\x1f\n\x04\x63trl\x18\x01 \x01(\x0b\x32\x0f.pbx.ServerCtrlH\x00\x12\x1f\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x0f.pbx.ServerDataH\x00\x12\x1f\n\x04pres\x18\x03 \x01(\x0b\x32\x0f.pbx.ServerPresH\x00\x12\x1f\n\x04meta\x18\x04 \x01(\x0b\x32\x0f.pbx.ServerMetaH\x00\x12\x1f\n\x04info\x18\x05 \x01(\x0b\x32\x0f.pbx.ServerInfoH\x00\x12\x11\n\x05topic\x18\x06 \x01(\tB\x02\x18\x01\x42\t\n\x07Message\"j\n\nServerResp\x12\x1d\n\x06status\x18\x01 \x01(\x0e\x32\r.pbx.RespCode\x12\x1e\n\x06srvmsg\x18\x02 \x01(\x0b\x32\x0e.pbx.ServerMsg\x12\x1d\n\x05\x63lmsg\x18\x03 \x01(\x0b\x32\x0e.pbx.ClientMsg\"\xa0\x01\n\x07Session\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\"\n\nauth_level\x18\x03 \x01(\x0e\x32\x0e.pbx.AuthLevel\x12\x13\n\x0bremote_addr\x18\x04 \x01(\t\x12\x12\n\nuser_agent\x18\x05 \x01(\t\x12\x11\n\tdevice_id\x18\x06 \x01(\t\x12\x10\n\x08language\x18\x07 \x01(\t\"D\n\tClientReq\x12\x1b\n\x03msg\x18\x01 \x01(\x0b\x32\x0e.pbx.ClientMsg\x12\x1a\n\x04sess\x18\x02 \x01(\x0b\x32\x0c.pbx.Session\"-\n\x0bSearchQuery\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\r\n\x05query\x18\x02 \x01(\t\"Z\n\x0bSearchFound\x12\x1d\n\x06status\x18\x01 \x01(\x0e\x32\r.pbx.RespCode\x12\r\n\x05query\x18\x02 \x01(\t\x12\x1d\n\x06result\x18\x03 \x03(\x0b\x32\r.pbx.TopicSub\"S\n\nTopicEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1c\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x0e.pbx.TopicDesc\"\x82\x01\n\x0c\x41\x63\x63ountEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12(\n\x0b\x64\x65\x66\x61ult_acs\x18\x03 \x01(\x0b\x32\x13.pbx.DefaultAcsMode\x12\x0e\n\x06public\x18\x04 \x01(\x0c\x12\x0c\n\x04tags\x18\x08 \x03(\t\"\xb0\x01\n\x11SubscriptionEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x03 \x01(\t\x12\x0e\n\x06\x64\x65l_id\x18\x04 \x01(\x05\x12\x0f\n\x07read_id\x18\x05 \x01(\x05\x12\x0f\n\x07recv_id\x18\x06 \x01(\x05\x12\x1d\n\x04mode\x18\x07 \x01(\x0b\x32\x0f.pbx.AccessMode\x12\x0f\n\x07private\x18\x08 \x01(\x0c\"G\n\x0cMessageEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\x1c\n\x03msg\x18\x02 \x01(\x0b\x32\x0f.pbx.ServerData*3\n\tAuthLevel\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04\x41NON\x10\n\x12\x08\n\x04\x41UTH\x10\x14\x12\x08\n\x04ROOT\x10\x1e*8\n\x08InfoNote\x12\x06\n\x02X1\x10\x00\x12\x08\n\x04READ\x10\x01\x12\x08\n\x04RECV\x10\x02\x12\x06\n\x02KP\x10\x03\x12\x08\n\x04\x43\x41LL\x10\x04*o\n\tCallEvent\x12\x06\n\x02X2\x10\x00\x12\n\n\x06\x41\x43\x43\x45PT\x10\x01\x12\n\n\x06\x41NSWER\x10\x02\x12\x0b\n\x07HANG_UP\x10\x03\x12\x11\n\rICE_CANDIDATE\x10\x04\x12\n\n\x06INVITE\x10\x05\x12\t\n\x05OFFER\x10\x06\x12\x0b\n\x07RINGING\x10\x07*<\n\x08RespCode\x12\x0c\n\x08\x43ONTINUE\x10\x00\x12\x08\n\x04\x44ROP\x10\x01\x12\x0b\n\x07RESPOND\x10\x02\x12\x0b\n\x07REPLACE\x10\x03**\n\x04\x43rud\x12\n\n\x06\x43REATE\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x32;\n\x04Node\x12\x33\n\x0bMessageLoop\x12\x0e.pbx.ClientMsg\x1a\x0e.pbx.ServerMsg\"\x00(\x01\x30\x01\x32\x9f\x02\n\x06Plugin\x12-\n\x08\x46ireHose\x12\x0e.pbx.ClientReq\x1a\x0f.pbx.ServerResp\"\x00\x12,\n\x04\x46ind\x12\x10.pbx.SearchQuery\x1a\x10.pbx.SearchFound\"\x00\x12+\n\x07\x41\x63\x63ount\x12\x11.pbx.AccountEvent\x1a\x0b.pbx.Unused\"\x00\x12\'\n\x05Topic\x12\x0f.pbx.TopicEvent\x1a\x0b.pbx.Unused\"\x00\x12\x35\n\x0cSubscription\x12\x16.pbx.SubscriptionEvent\x1a\x0b.pbx.Unused\"\x00\x12+\n\x07Message\x12\x11.pbx.MessageEvent\x1a\x0b.pbx.Unused\"\x00\x42\x1cZ\x1agithub.com/tinode/chat/pbxb\x06proto3') -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'model_pb2', globals()) +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'model_pb2', _globals) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None @@ -31,112 +32,112 @@ if _descriptor._USE_C_DESCRIPTORS == False: _SERVERDATA_HEADENTRY._serialized_options = b'8\001' _SERVERMSG.fields_by_name['topic']._options = None _SERVERMSG.fields_by_name['topic']._serialized_options = b'\030\001' - _AUTHLEVEL._serialized_start=5639 - _AUTHLEVEL._serialized_end=5690 - _INFONOTE._serialized_start=5692 - _INFONOTE._serialized_end=5748 - _CALLEVENT._serialized_start=5750 - _CALLEVENT._serialized_end=5861 - _RESPCODE._serialized_start=5863 - _RESPCODE._serialized_end=5923 - _CRUD._serialized_start=5925 - _CRUD._serialized_end=5967 - _UNUSED._serialized_start=20 - _UNUSED._serialized_end=28 - _DEFAULTACSMODE._serialized_start=30 - _DEFAULTACSMODE._serialized_end=74 - _ACCESSMODE._serialized_start=76 - _ACCESSMODE._serialized_end=117 - _SETSUB._serialized_start=119 - _SETSUB._serialized_end=158 - _CLIENTCRED._serialized_start=161 - _CLIENTCRED._serialized_end=314 - _CLIENTCRED_PARAMSENTRY._serialized_start=269 - _CLIENTCRED_PARAMSENTRY._serialized_end=314 - _SETDESC._serialized_start=316 - _SETDESC._serialized_end=417 - _GETOPTS._serialized_start=419 - _GETOPTS._serialized_end=536 - _GETQUERY._serialized_start=538 - _GETQUERY._serialized_end=645 - _SETQUERY._serialized_start=647 - _SETQUERY._serialized_end=756 - _SEQRANGE._serialized_start=758 - _SEQRANGE._serialized_end=793 - _CLIENTHI._serialized_start=795 - _CLIENTHI._serialized_end=921 - _CLIENTACC._serialized_start=924 - _CLIENTACC._serialized_end=1190 - _CLIENTLOGIN._serialized_start=1192 - _CLIENTLOGIN._serialized_end=1280 - _CLIENTSUB._serialized_start=1282 - _CLIENTSUB._serialized_end=1388 - _CLIENTLEAVE._serialized_start=1390 - _CLIENTLEAVE._serialized_end=1445 - _CLIENTPUB._serialized_start=1448 - _CLIENTPUB._serialized_end=1605 - _CLIENTPUB_HEADENTRY._serialized_start=1562 - _CLIENTPUB_HEADENTRY._serialized_end=1605 - _CLIENTGET._serialized_start=1607 - _CLIENTGET._serialized_end=1675 - _CLIENTSET._serialized_start=1677 - _CLIENTSET._serialized_end=1745 - _CLIENTDEL._serialized_start=1748 - _CLIENTDEL._serialized_end=1980 - _CLIENTDEL_WHAT._serialized_start=1917 - _CLIENTDEL_WHAT._serialized_end=1980 - _CLIENTNOTE._serialized_start=1983 - _CLIENTNOTE._serialized_end=2119 - _CLIENTEXTRA._serialized_start=2121 - _CLIENTEXTRA._serialized_end=2213 - _CLIENTMSG._serialized_start=2216 - _CLIENTMSG._serialized_end=2589 - _SERVERCRED._serialized_start=2591 - _SERVERCRED._serialized_end=2648 - _TOPICDESC._serialized_start=2651 - _TOPICDESC._serialized_end=3025 - _TOPICSUB._serialized_start=3028 - _TOPICSUB._serialized_end=3346 - _DELVALUES._serialized_start=3348 - _DELVALUES._serialized_end=3407 - _SERVERCTRL._serialized_start=3410 - _SERVERCTRL._serialized_end=3569 - _SERVERCTRL_PARAMSENTRY._serialized_start=269 - _SERVERCTRL_PARAMSENTRY._serialized_end=314 - _SERVERDATA._serialized_start=3572 - _SERVERDATA._serialized_end=3779 - _SERVERDATA_HEADENTRY._serialized_start=1562 - _SERVERDATA_HEADENTRY._serialized_end=1605 - _SERVERPRES._serialized_start=3782 - _SERVERPRES._serialized_end=4146 - _SERVERPRES_WHAT._serialized_start=4021 - _SERVERPRES_WHAT._serialized_end=4146 - _SERVERMETA._serialized_start=4149 - _SERVERMETA._serialized_end=4320 - _SERVERINFO._serialized_start=4323 - _SERVERINFO._serialized_end=4478 - _SERVERMSG._serialized_start=4481 - _SERVERMSG._serialized_end=4687 - _SERVERRESP._serialized_start=4689 - _SERVERRESP._serialized_end=4795 - _SESSION._serialized_start=4798 - _SESSION._serialized_end=4958 - _CLIENTREQ._serialized_start=4960 - _CLIENTREQ._serialized_end=5028 - _SEARCHQUERY._serialized_start=5030 - _SEARCHQUERY._serialized_end=5075 - _SEARCHFOUND._serialized_start=5077 - _SEARCHFOUND._serialized_end=5167 - _TOPICEVENT._serialized_start=5169 - _TOPICEVENT._serialized_end=5252 - _ACCOUNTEVENT._serialized_start=5255 - _ACCOUNTEVENT._serialized_end=5385 - _SUBSCRIPTIONEVENT._serialized_start=5388 - _SUBSCRIPTIONEVENT._serialized_end=5564 - _MESSAGEEVENT._serialized_start=5566 - _MESSAGEEVENT._serialized_end=5637 - _NODE._serialized_start=5969 - _NODE._serialized_end=6028 - _PLUGIN._serialized_start=6031 - _PLUGIN._serialized_end=6318 + _globals['_AUTHLEVEL']._serialized_start=5639 + _globals['_AUTHLEVEL']._serialized_end=5690 + _globals['_INFONOTE']._serialized_start=5692 + _globals['_INFONOTE']._serialized_end=5748 + _globals['_CALLEVENT']._serialized_start=5750 + _globals['_CALLEVENT']._serialized_end=5861 + _globals['_RESPCODE']._serialized_start=5863 + _globals['_RESPCODE']._serialized_end=5923 + _globals['_CRUD']._serialized_start=5925 + _globals['_CRUD']._serialized_end=5967 + _globals['_UNUSED']._serialized_start=20 + _globals['_UNUSED']._serialized_end=28 + _globals['_DEFAULTACSMODE']._serialized_start=30 + _globals['_DEFAULTACSMODE']._serialized_end=74 + _globals['_ACCESSMODE']._serialized_start=76 + _globals['_ACCESSMODE']._serialized_end=117 + _globals['_SETSUB']._serialized_start=119 + _globals['_SETSUB']._serialized_end=158 + _globals['_CLIENTCRED']._serialized_start=161 + _globals['_CLIENTCRED']._serialized_end=314 + _globals['_CLIENTCRED_PARAMSENTRY']._serialized_start=269 + _globals['_CLIENTCRED_PARAMSENTRY']._serialized_end=314 + _globals['_SETDESC']._serialized_start=316 + _globals['_SETDESC']._serialized_end=417 + _globals['_GETOPTS']._serialized_start=419 + _globals['_GETOPTS']._serialized_end=536 + _globals['_GETQUERY']._serialized_start=538 + _globals['_GETQUERY']._serialized_end=645 + _globals['_SETQUERY']._serialized_start=647 + _globals['_SETQUERY']._serialized_end=756 + _globals['_SEQRANGE']._serialized_start=758 + _globals['_SEQRANGE']._serialized_end=793 + _globals['_CLIENTHI']._serialized_start=795 + _globals['_CLIENTHI']._serialized_end=921 + _globals['_CLIENTACC']._serialized_start=924 + _globals['_CLIENTACC']._serialized_end=1190 + _globals['_CLIENTLOGIN']._serialized_start=1192 + _globals['_CLIENTLOGIN']._serialized_end=1280 + _globals['_CLIENTSUB']._serialized_start=1282 + _globals['_CLIENTSUB']._serialized_end=1388 + _globals['_CLIENTLEAVE']._serialized_start=1390 + _globals['_CLIENTLEAVE']._serialized_end=1445 + _globals['_CLIENTPUB']._serialized_start=1448 + _globals['_CLIENTPUB']._serialized_end=1605 + _globals['_CLIENTPUB_HEADENTRY']._serialized_start=1562 + _globals['_CLIENTPUB_HEADENTRY']._serialized_end=1605 + _globals['_CLIENTGET']._serialized_start=1607 + _globals['_CLIENTGET']._serialized_end=1675 + _globals['_CLIENTSET']._serialized_start=1677 + _globals['_CLIENTSET']._serialized_end=1745 + _globals['_CLIENTDEL']._serialized_start=1748 + _globals['_CLIENTDEL']._serialized_end=1980 + _globals['_CLIENTDEL_WHAT']._serialized_start=1917 + _globals['_CLIENTDEL_WHAT']._serialized_end=1980 + _globals['_CLIENTNOTE']._serialized_start=1983 + _globals['_CLIENTNOTE']._serialized_end=2119 + _globals['_CLIENTEXTRA']._serialized_start=2121 + _globals['_CLIENTEXTRA']._serialized_end=2213 + _globals['_CLIENTMSG']._serialized_start=2216 + _globals['_CLIENTMSG']._serialized_end=2589 + _globals['_SERVERCRED']._serialized_start=2591 + _globals['_SERVERCRED']._serialized_end=2648 + _globals['_TOPICDESC']._serialized_start=2651 + _globals['_TOPICDESC']._serialized_end=3025 + _globals['_TOPICSUB']._serialized_start=3028 + _globals['_TOPICSUB']._serialized_end=3346 + _globals['_DELVALUES']._serialized_start=3348 + _globals['_DELVALUES']._serialized_end=3407 + _globals['_SERVERCTRL']._serialized_start=3410 + _globals['_SERVERCTRL']._serialized_end=3569 + _globals['_SERVERCTRL_PARAMSENTRY']._serialized_start=269 + _globals['_SERVERCTRL_PARAMSENTRY']._serialized_end=314 + _globals['_SERVERDATA']._serialized_start=3572 + _globals['_SERVERDATA']._serialized_end=3779 + _globals['_SERVERDATA_HEADENTRY']._serialized_start=1562 + _globals['_SERVERDATA_HEADENTRY']._serialized_end=1605 + _globals['_SERVERPRES']._serialized_start=3782 + _globals['_SERVERPRES']._serialized_end=4146 + _globals['_SERVERPRES_WHAT']._serialized_start=4021 + _globals['_SERVERPRES_WHAT']._serialized_end=4146 + _globals['_SERVERMETA']._serialized_start=4149 + _globals['_SERVERMETA']._serialized_end=4320 + _globals['_SERVERINFO']._serialized_start=4323 + _globals['_SERVERINFO']._serialized_end=4478 + _globals['_SERVERMSG']._serialized_start=4481 + _globals['_SERVERMSG']._serialized_end=4687 + _globals['_SERVERRESP']._serialized_start=4689 + _globals['_SERVERRESP']._serialized_end=4795 + _globals['_SESSION']._serialized_start=4798 + _globals['_SESSION']._serialized_end=4958 + _globals['_CLIENTREQ']._serialized_start=4960 + _globals['_CLIENTREQ']._serialized_end=5028 + _globals['_SEARCHQUERY']._serialized_start=5030 + _globals['_SEARCHQUERY']._serialized_end=5075 + _globals['_SEARCHFOUND']._serialized_start=5077 + _globals['_SEARCHFOUND']._serialized_end=5167 + _globals['_TOPICEVENT']._serialized_start=5169 + _globals['_TOPICEVENT']._serialized_end=5252 + _globals['_ACCOUNTEVENT']._serialized_start=5255 + _globals['_ACCOUNTEVENT']._serialized_end=5385 + _globals['_SUBSCRIPTIONEVENT']._serialized_start=5388 + _globals['_SUBSCRIPTIONEVENT']._serialized_end=5564 + _globals['_MESSAGEEVENT']._serialized_start=5566 + _globals['_MESSAGEEVENT']._serialized_end=5637 + _globals['_NODE']._serialized_start=5969 + _globals['_NODE']._serialized_end=6028 + _globals['_PLUGIN']._serialized_start=6031 + _globals['_PLUGIN']._serialized_end=6318 # @@protoc_insertion_point(module_scope) diff --git a/py_grpc/tinode_grpc/model_pb2.pyi b/py_grpc/tinode_grpc/model_pb2.pyi index cf0eadcc..c08ecc8d 100644 --- a/py_grpc/tinode_grpc/model_pb2.pyi +++ b/py_grpc/tinode_grpc/model_pb2.pyi @@ -4,86 +4,101 @@ from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union -ACCEPT: CallEvent -ANON: AuthLevel -ANSWER: CallEvent -AUTH: AuthLevel -CALL: InfoNote -CONTINUE: RespCode -CREATE: Crud -DELETE: Crud DESCRIPTOR: _descriptor.FileDescriptor -DROP: RespCode + +class AuthLevel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + NONE: _ClassVar[AuthLevel] + ANON: _ClassVar[AuthLevel] + AUTH: _ClassVar[AuthLevel] + ROOT: _ClassVar[AuthLevel] + +class InfoNote(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + X1: _ClassVar[InfoNote] + READ: _ClassVar[InfoNote] + RECV: _ClassVar[InfoNote] + KP: _ClassVar[InfoNote] + CALL: _ClassVar[InfoNote] + +class CallEvent(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + X2: _ClassVar[CallEvent] + ACCEPT: _ClassVar[CallEvent] + ANSWER: _ClassVar[CallEvent] + HANG_UP: _ClassVar[CallEvent] + ICE_CANDIDATE: _ClassVar[CallEvent] + INVITE: _ClassVar[CallEvent] + OFFER: _ClassVar[CallEvent] + RINGING: _ClassVar[CallEvent] + +class RespCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + CONTINUE: _ClassVar[RespCode] + DROP: _ClassVar[RespCode] + RESPOND: _ClassVar[RespCode] + REPLACE: _ClassVar[RespCode] + +class Crud(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + CREATE: _ClassVar[Crud] + UPDATE: _ClassVar[Crud] + DELETE: _ClassVar[Crud] +NONE: AuthLevel +ANON: AuthLevel +AUTH: AuthLevel +ROOT: AuthLevel +X1: InfoNote +READ: InfoNote +RECV: InfoNote +KP: InfoNote +CALL: InfoNote +X2: CallEvent +ACCEPT: CallEvent +ANSWER: CallEvent HANG_UP: CallEvent ICE_CANDIDATE: CallEvent INVITE: CallEvent -KP: InfoNote -NONE: AuthLevel OFFER: CallEvent -READ: InfoNote -RECV: InfoNote -REPLACE: RespCode -RESPOND: RespCode RINGING: CallEvent -ROOT: AuthLevel +CONTINUE: RespCode +DROP: RespCode +RESPOND: RespCode +REPLACE: RespCode +CREATE: Crud UPDATE: Crud -X1: InfoNote -X2: CallEvent +DELETE: Crud + +class Unused(_message.Message): + __slots__ = [] + def __init__(self) -> None: ... + +class DefaultAcsMode(_message.Message): + __slots__ = ["auth", "anon"] + AUTH_FIELD_NUMBER: _ClassVar[int] + ANON_FIELD_NUMBER: _ClassVar[int] + auth: str + anon: str + def __init__(self, auth: _Optional[str] = ..., anon: _Optional[str] = ...) -> None: ... class AccessMode(_message.Message): - __slots__ = ["given", "want"] - GIVEN_FIELD_NUMBER: _ClassVar[int] + __slots__ = ["want", "given"] WANT_FIELD_NUMBER: _ClassVar[int] - given: str + GIVEN_FIELD_NUMBER: _ClassVar[int] want: str + given: str def __init__(self, want: _Optional[str] = ..., given: _Optional[str] = ...) -> None: ... -class AccountEvent(_message.Message): - __slots__ = ["action", "default_acs", "public", "tags", "user_id"] - ACTION_FIELD_NUMBER: _ClassVar[int] - DEFAULT_ACS_FIELD_NUMBER: _ClassVar[int] - PUBLIC_FIELD_NUMBER: _ClassVar[int] - TAGS_FIELD_NUMBER: _ClassVar[int] +class SetSub(_message.Message): + __slots__ = ["user_id", "mode"] USER_ID_FIELD_NUMBER: _ClassVar[int] - action: Crud - default_acs: DefaultAcsMode - public: bytes - tags: _containers.RepeatedScalarFieldContainer[str] + MODE_FIELD_NUMBER: _ClassVar[int] user_id: str - def __init__(self, action: _Optional[_Union[Crud, str]] = ..., user_id: _Optional[str] = ..., default_acs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., public: _Optional[bytes] = ..., tags: _Optional[_Iterable[str]] = ...) -> None: ... - -class ClientAcc(_message.Message): - __slots__ = ["auth_level", "cred", "desc", "id", "login", "scheme", "secret", "state", "tags", "tmp_scheme", "tmp_secret", "token", "user_id"] - AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int] - CRED_FIELD_NUMBER: _ClassVar[int] - DESC_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - LOGIN_FIELD_NUMBER: _ClassVar[int] - SCHEME_FIELD_NUMBER: _ClassVar[int] - SECRET_FIELD_NUMBER: _ClassVar[int] - STATE_FIELD_NUMBER: _ClassVar[int] - TAGS_FIELD_NUMBER: _ClassVar[int] - TMP_SCHEME_FIELD_NUMBER: _ClassVar[int] - TMP_SECRET_FIELD_NUMBER: _ClassVar[int] - TOKEN_FIELD_NUMBER: _ClassVar[int] - USER_ID_FIELD_NUMBER: _ClassVar[int] - auth_level: AuthLevel - cred: _containers.RepeatedCompositeFieldContainer[ClientCred] - desc: SetDesc - id: str - login: bool - scheme: str - secret: bytes - state: str - tags: _containers.RepeatedScalarFieldContainer[str] - tmp_scheme: str - tmp_secret: bytes - token: bytes - user_id: str - def __init__(self, id: _Optional[str] = ..., user_id: _Optional[str] = ..., scheme: _Optional[str] = ..., secret: _Optional[bytes] = ..., login: bool = ..., tags: _Optional[_Iterable[str]] = ..., desc: _Optional[_Union[SetDesc, _Mapping]] = ..., cred: _Optional[_Iterable[_Union[ClientCred, _Mapping]]] = ..., token: _Optional[bytes] = ..., state: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ..., tmp_scheme: _Optional[str] = ..., tmp_secret: _Optional[bytes] = ...) -> None: ... + mode: str + def __init__(self, user_id: _Optional[str] = ..., mode: _Optional[str] = ...) -> None: ... class ClientCred(_message.Message): - __slots__ = ["method", "params", "response", "value"] + __slots__ = ["method", "value", "response", "params"] class ParamsEntry(_message.Message): __slots__ = ["key", "value"] KEY_FIELD_NUMBER: _ClassVar[int] @@ -92,79 +107,147 @@ class ClientCred(_message.Message): value: bytes def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ... METHOD_FIELD_NUMBER: _ClassVar[int] - PARAMS_FIELD_NUMBER: _ClassVar[int] - RESPONSE_FIELD_NUMBER: _ClassVar[int] VALUE_FIELD_NUMBER: _ClassVar[int] + RESPONSE_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] method: str - params: _containers.ScalarMap[str, bytes] - response: str value: str + response: str + params: _containers.ScalarMap[str, bytes] def __init__(self, method: _Optional[str] = ..., value: _Optional[str] = ..., response: _Optional[str] = ..., params: _Optional[_Mapping[str, bytes]] = ...) -> None: ... -class ClientDel(_message.Message): - __slots__ = ["cred", "del_seq", "hard", "id", "topic", "user_id", "what"] - class What(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] - CRED: ClientDel.What - CRED_FIELD_NUMBER: _ClassVar[int] - DEL_SEQ_FIELD_NUMBER: _ClassVar[int] - HARD_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - MSG: ClientDel.What - SUB: ClientDel.What - TOPIC: ClientDel.What +class SetDesc(_message.Message): + __slots__ = ["default_acs", "public", "private", "trusted"] + DEFAULT_ACS_FIELD_NUMBER: _ClassVar[int] + PUBLIC_FIELD_NUMBER: _ClassVar[int] + PRIVATE_FIELD_NUMBER: _ClassVar[int] + TRUSTED_FIELD_NUMBER: _ClassVar[int] + default_acs: DefaultAcsMode + public: bytes + private: bytes + trusted: bytes + def __init__(self, default_acs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., public: _Optional[bytes] = ..., private: _Optional[bytes] = ..., trusted: _Optional[bytes] = ...) -> None: ... + +class GetOpts(_message.Message): + __slots__ = ["if_modified_since", "user", "topic", "since_id", "before_id", "limit"] + IF_MODIFIED_SINCE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] TOPIC_FIELD_NUMBER: _ClassVar[int] - USER: ClientDel.What - USER_ID_FIELD_NUMBER: _ClassVar[int] + SINCE_ID_FIELD_NUMBER: _ClassVar[int] + BEFORE_ID_FIELD_NUMBER: _ClassVar[int] + LIMIT_FIELD_NUMBER: _ClassVar[int] + if_modified_since: int + user: str + topic: str + since_id: int + before_id: int + limit: int + def __init__(self, if_modified_since: _Optional[int] = ..., user: _Optional[str] = ..., topic: _Optional[str] = ..., since_id: _Optional[int] = ..., before_id: _Optional[int] = ..., limit: _Optional[int] = ...) -> None: ... + +class GetQuery(_message.Message): + __slots__ = ["what", "desc", "sub", "data"] WHAT_FIELD_NUMBER: _ClassVar[int] - X0: ClientDel.What + DESC_FIELD_NUMBER: _ClassVar[int] + SUB_FIELD_NUMBER: _ClassVar[int] + DATA_FIELD_NUMBER: _ClassVar[int] + what: str + desc: GetOpts + sub: GetOpts + data: GetOpts + def __init__(self, what: _Optional[str] = ..., desc: _Optional[_Union[GetOpts, _Mapping]] = ..., sub: _Optional[_Union[GetOpts, _Mapping]] = ..., data: _Optional[_Union[GetOpts, _Mapping]] = ...) -> None: ... + +class SetQuery(_message.Message): + __slots__ = ["desc", "sub", "tags", "cred"] + DESC_FIELD_NUMBER: _ClassVar[int] + SUB_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CRED_FIELD_NUMBER: _ClassVar[int] + desc: SetDesc + sub: SetSub + tags: _containers.RepeatedScalarFieldContainer[str] cred: ClientCred - del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange] - hard: bool - id: str - topic: str - user_id: str - what: ClientDel.What - def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., what: _Optional[_Union[ClientDel.What, str]] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ..., user_id: _Optional[str] = ..., cred: _Optional[_Union[ClientCred, _Mapping]] = ..., hard: bool = ...) -> None: ... + def __init__(self, desc: _Optional[_Union[SetDesc, _Mapping]] = ..., sub: _Optional[_Union[SetSub, _Mapping]] = ..., tags: _Optional[_Iterable[str]] = ..., cred: _Optional[_Union[ClientCred, _Mapping]] = ...) -> None: ... -class ClientExtra(_message.Message): - __slots__ = ["attachments", "auth_level", "on_behalf_of"] - ATTACHMENTS_FIELD_NUMBER: _ClassVar[int] - AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int] - ON_BEHALF_OF_FIELD_NUMBER: _ClassVar[int] - attachments: _containers.RepeatedScalarFieldContainer[str] - auth_level: AuthLevel - on_behalf_of: str - def __init__(self, attachments: _Optional[_Iterable[str]] = ..., on_behalf_of: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ...) -> None: ... - -class ClientGet(_message.Message): - __slots__ = ["id", "query", "topic"] - ID_FIELD_NUMBER: _ClassVar[int] - QUERY_FIELD_NUMBER: _ClassVar[int] - TOPIC_FIELD_NUMBER: _ClassVar[int] - id: str - query: GetQuery - topic: str - def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., query: _Optional[_Union[GetQuery, _Mapping]] = ...) -> None: ... +class SeqRange(_message.Message): + __slots__ = ["low", "hi"] + LOW_FIELD_NUMBER: _ClassVar[int] + HI_FIELD_NUMBER: _ClassVar[int] + low: int + hi: int + def __init__(self, low: _Optional[int] = ..., hi: _Optional[int] = ...) -> None: ... class ClientHi(_message.Message): - __slots__ = ["background", "device_id", "id", "lang", "platform", "user_agent", "ver"] - BACKGROUND_FIELD_NUMBER: _ClassVar[int] - DEVICE_ID_FIELD_NUMBER: _ClassVar[int] + __slots__ = ["id", "user_agent", "ver", "device_id", "lang", "platform", "background"] ID_FIELD_NUMBER: _ClassVar[int] - LANG_FIELD_NUMBER: _ClassVar[int] - PLATFORM_FIELD_NUMBER: _ClassVar[int] USER_AGENT_FIELD_NUMBER: _ClassVar[int] VER_FIELD_NUMBER: _ClassVar[int] - background: bool - device_id: str + DEVICE_ID_FIELD_NUMBER: _ClassVar[int] + LANG_FIELD_NUMBER: _ClassVar[int] + PLATFORM_FIELD_NUMBER: _ClassVar[int] + BACKGROUND_FIELD_NUMBER: _ClassVar[int] id: str - lang: str - platform: str user_agent: str ver: str + device_id: str + lang: str + platform: str + background: bool def __init__(self, id: _Optional[str] = ..., user_agent: _Optional[str] = ..., ver: _Optional[str] = ..., device_id: _Optional[str] = ..., lang: _Optional[str] = ..., platform: _Optional[str] = ..., background: bool = ...) -> None: ... +class ClientAcc(_message.Message): + __slots__ = ["id", "user_id", "scheme", "secret", "login", "tags", "desc", "cred", "token", "state", "auth_level", "tmp_scheme", "tmp_secret"] + ID_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + SCHEME_FIELD_NUMBER: _ClassVar[int] + SECRET_FIELD_NUMBER: _ClassVar[int] + LOGIN_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + DESC_FIELD_NUMBER: _ClassVar[int] + CRED_FIELD_NUMBER: _ClassVar[int] + TOKEN_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int] + TMP_SCHEME_FIELD_NUMBER: _ClassVar[int] + TMP_SECRET_FIELD_NUMBER: _ClassVar[int] + id: str + user_id: str + scheme: str + secret: bytes + login: bool + tags: _containers.RepeatedScalarFieldContainer[str] + desc: SetDesc + cred: _containers.RepeatedCompositeFieldContainer[ClientCred] + token: bytes + state: str + auth_level: AuthLevel + tmp_scheme: str + tmp_secret: bytes + def __init__(self, id: _Optional[str] = ..., user_id: _Optional[str] = ..., scheme: _Optional[str] = ..., secret: _Optional[bytes] = ..., login: bool = ..., tags: _Optional[_Iterable[str]] = ..., desc: _Optional[_Union[SetDesc, _Mapping]] = ..., cred: _Optional[_Iterable[_Union[ClientCred, _Mapping]]] = ..., token: _Optional[bytes] = ..., state: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ..., tmp_scheme: _Optional[str] = ..., tmp_secret: _Optional[bytes] = ...) -> None: ... + +class ClientLogin(_message.Message): + __slots__ = ["id", "scheme", "secret", "cred"] + ID_FIELD_NUMBER: _ClassVar[int] + SCHEME_FIELD_NUMBER: _ClassVar[int] + SECRET_FIELD_NUMBER: _ClassVar[int] + CRED_FIELD_NUMBER: _ClassVar[int] + id: str + scheme: str + secret: bytes + cred: _containers.RepeatedCompositeFieldContainer[ClientCred] + def __init__(self, id: _Optional[str] = ..., scheme: _Optional[str] = ..., secret: _Optional[bytes] = ..., cred: _Optional[_Iterable[_Union[ClientCred, _Mapping]]] = ...) -> None: ... + +class ClientSub(_message.Message): + __slots__ = ["id", "topic", "set_query", "get_query"] + ID_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + SET_QUERY_FIELD_NUMBER: _ClassVar[int] + GET_QUERY_FIELD_NUMBER: _ClassVar[int] + id: str + topic: str + set_query: SetQuery + get_query: GetQuery + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., set_query: _Optional[_Union[SetQuery, _Mapping]] = ..., get_query: _Optional[_Union[GetQuery, _Mapping]] = ...) -> None: ... + class ClientLeave(_message.Message): __slots__ = ["id", "topic", "unsub"] ID_FIELD_NUMBER: _ClassVar[int] @@ -175,61 +258,8 @@ class ClientLeave(_message.Message): unsub: bool def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., unsub: bool = ...) -> None: ... -class ClientLogin(_message.Message): - __slots__ = ["cred", "id", "scheme", "secret"] - CRED_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - SCHEME_FIELD_NUMBER: _ClassVar[int] - SECRET_FIELD_NUMBER: _ClassVar[int] - cred: _containers.RepeatedCompositeFieldContainer[ClientCred] - id: str - scheme: str - secret: bytes - def __init__(self, id: _Optional[str] = ..., scheme: _Optional[str] = ..., secret: _Optional[bytes] = ..., cred: _Optional[_Iterable[_Union[ClientCred, _Mapping]]] = ...) -> None: ... - -class ClientMsg(_message.Message): - __slots__ = ["acc", "extra", "get", "hi", "leave", "login", "note", "pub", "set", "sub"] - ACC_FIELD_NUMBER: _ClassVar[int] - DEL_FIELD_NUMBER: _ClassVar[int] - EXTRA_FIELD_NUMBER: _ClassVar[int] - GET_FIELD_NUMBER: _ClassVar[int] - HI_FIELD_NUMBER: _ClassVar[int] - LEAVE_FIELD_NUMBER: _ClassVar[int] - LOGIN_FIELD_NUMBER: _ClassVar[int] - NOTE_FIELD_NUMBER: _ClassVar[int] - PUB_FIELD_NUMBER: _ClassVar[int] - SET_FIELD_NUMBER: _ClassVar[int] - SUB_FIELD_NUMBER: _ClassVar[int] - acc: ClientAcc - extra: ClientExtra - get: ClientGet - hi: ClientHi - leave: ClientLeave - login: ClientLogin - note: ClientNote - pub: ClientPub - set: ClientSet - sub: ClientSub - def __init__(self, hi: _Optional[_Union[ClientHi, _Mapping]] = ..., acc: _Optional[_Union[ClientAcc, _Mapping]] = ..., login: _Optional[_Union[ClientLogin, _Mapping]] = ..., sub: _Optional[_Union[ClientSub, _Mapping]] = ..., leave: _Optional[_Union[ClientLeave, _Mapping]] = ..., pub: _Optional[_Union[ClientPub, _Mapping]] = ..., get: _Optional[_Union[ClientGet, _Mapping]] = ..., set: _Optional[_Union[ClientSet, _Mapping]] = ..., note: _Optional[_Union[ClientNote, _Mapping]] = ..., extra: _Optional[_Union[ClientExtra, _Mapping]] = ..., **kwargs) -> None: ... - -class ClientNote(_message.Message): - __slots__ = ["event", "payload", "seq_id", "topic", "unread", "what"] - EVENT_FIELD_NUMBER: _ClassVar[int] - PAYLOAD_FIELD_NUMBER: _ClassVar[int] - SEQ_ID_FIELD_NUMBER: _ClassVar[int] - TOPIC_FIELD_NUMBER: _ClassVar[int] - UNREAD_FIELD_NUMBER: _ClassVar[int] - WHAT_FIELD_NUMBER: _ClassVar[int] - event: CallEvent - payload: bytes - seq_id: int - topic: str - unread: int - what: InfoNote - def __init__(self, topic: _Optional[str] = ..., what: _Optional[_Union[InfoNote, str]] = ..., seq_id: _Optional[int] = ..., unread: _Optional[int] = ..., event: _Optional[_Union[CallEvent, str]] = ..., payload: _Optional[bytes] = ...) -> None: ... - class ClientPub(_message.Message): - __slots__ = ["content", "head", "id", "no_echo", "topic"] + __slots__ = ["id", "topic", "no_echo", "head", "content"] class HeadEntry(_message.Message): __slots__ = ["key", "value"] KEY_FIELD_NUMBER: _ClassVar[int] @@ -237,55 +267,206 @@ class ClientPub(_message.Message): key: str value: bytes def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ... - CONTENT_FIELD_NUMBER: _ClassVar[int] - HEAD_FIELD_NUMBER: _ClassVar[int] ID_FIELD_NUMBER: _ClassVar[int] - NO_ECHO_FIELD_NUMBER: _ClassVar[int] TOPIC_FIELD_NUMBER: _ClassVar[int] - content: bytes - head: _containers.ScalarMap[str, bytes] + NO_ECHO_FIELD_NUMBER: _ClassVar[int] + HEAD_FIELD_NUMBER: _ClassVar[int] + CONTENT_FIELD_NUMBER: _ClassVar[int] id: str - no_echo: bool topic: str + no_echo: bool + head: _containers.ScalarMap[str, bytes] + content: bytes def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., no_echo: bool = ..., head: _Optional[_Mapping[str, bytes]] = ..., content: _Optional[bytes] = ...) -> None: ... -class ClientReq(_message.Message): - __slots__ = ["msg", "sess"] - MSG_FIELD_NUMBER: _ClassVar[int] - SESS_FIELD_NUMBER: _ClassVar[int] - msg: ClientMsg - sess: Session - def __init__(self, msg: _Optional[_Union[ClientMsg, _Mapping]] = ..., sess: _Optional[_Union[Session, _Mapping]] = ...) -> None: ... +class ClientGet(_message.Message): + __slots__ = ["id", "topic", "query"] + ID_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] + id: str + topic: str + query: GetQuery + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., query: _Optional[_Union[GetQuery, _Mapping]] = ...) -> None: ... class ClientSet(_message.Message): - __slots__ = ["id", "query", "topic"] + __slots__ = ["id", "topic", "query"] ID_FIELD_NUMBER: _ClassVar[int] - QUERY_FIELD_NUMBER: _ClassVar[int] TOPIC_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] id: str - query: SetQuery topic: str + query: SetQuery def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., query: _Optional[_Union[SetQuery, _Mapping]] = ...) -> None: ... -class ClientSub(_message.Message): - __slots__ = ["get_query", "id", "set_query", "topic"] - GET_QUERY_FIELD_NUMBER: _ClassVar[int] +class ClientDel(_message.Message): + __slots__ = ["id", "topic", "what", "del_seq", "user_id", "cred", "hard"] + class What(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + X0: _ClassVar[ClientDel.What] + MSG: _ClassVar[ClientDel.What] + TOPIC: _ClassVar[ClientDel.What] + SUB: _ClassVar[ClientDel.What] + USER: _ClassVar[ClientDel.What] + CRED: _ClassVar[ClientDel.What] + X0: ClientDel.What + MSG: ClientDel.What + TOPIC: ClientDel.What + SUB: ClientDel.What + USER: ClientDel.What + CRED: ClientDel.What ID_FIELD_NUMBER: _ClassVar[int] - SET_QUERY_FIELD_NUMBER: _ClassVar[int] TOPIC_FIELD_NUMBER: _ClassVar[int] - get_query: GetQuery + WHAT_FIELD_NUMBER: _ClassVar[int] + DEL_SEQ_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + CRED_FIELD_NUMBER: _ClassVar[int] + HARD_FIELD_NUMBER: _ClassVar[int] id: str - set_query: SetQuery topic: str - def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., set_query: _Optional[_Union[SetQuery, _Mapping]] = ..., get_query: _Optional[_Union[GetQuery, _Mapping]] = ...) -> None: ... + what: ClientDel.What + del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange] + user_id: str + cred: ClientCred + hard: bool + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., what: _Optional[_Union[ClientDel.What, str]] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ..., user_id: _Optional[str] = ..., cred: _Optional[_Union[ClientCred, _Mapping]] = ..., hard: bool = ...) -> None: ... -class DefaultAcsMode(_message.Message): - __slots__ = ["anon", "auth"] - ANON_FIELD_NUMBER: _ClassVar[int] - AUTH_FIELD_NUMBER: _ClassVar[int] - anon: str - auth: str - def __init__(self, auth: _Optional[str] = ..., anon: _Optional[str] = ...) -> None: ... +class ClientNote(_message.Message): + __slots__ = ["topic", "what", "seq_id", "unread", "event", "payload"] + TOPIC_FIELD_NUMBER: _ClassVar[int] + WHAT_FIELD_NUMBER: _ClassVar[int] + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + UNREAD_FIELD_NUMBER: _ClassVar[int] + EVENT_FIELD_NUMBER: _ClassVar[int] + PAYLOAD_FIELD_NUMBER: _ClassVar[int] + topic: str + what: InfoNote + seq_id: int + unread: int + event: CallEvent + payload: bytes + def __init__(self, topic: _Optional[str] = ..., what: _Optional[_Union[InfoNote, str]] = ..., seq_id: _Optional[int] = ..., unread: _Optional[int] = ..., event: _Optional[_Union[CallEvent, str]] = ..., payload: _Optional[bytes] = ...) -> None: ... + +class ClientExtra(_message.Message): + __slots__ = ["attachments", "on_behalf_of", "auth_level"] + ATTACHMENTS_FIELD_NUMBER: _ClassVar[int] + ON_BEHALF_OF_FIELD_NUMBER: _ClassVar[int] + AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int] + attachments: _containers.RepeatedScalarFieldContainer[str] + on_behalf_of: str + auth_level: AuthLevel + def __init__(self, attachments: _Optional[_Iterable[str]] = ..., on_behalf_of: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ...) -> None: ... + +class ClientMsg(_message.Message): + __slots__ = ["hi", "acc", "login", "sub", "leave", "pub", "get", "set", "note", "extra"] + HI_FIELD_NUMBER: _ClassVar[int] + ACC_FIELD_NUMBER: _ClassVar[int] + LOGIN_FIELD_NUMBER: _ClassVar[int] + SUB_FIELD_NUMBER: _ClassVar[int] + LEAVE_FIELD_NUMBER: _ClassVar[int] + PUB_FIELD_NUMBER: _ClassVar[int] + GET_FIELD_NUMBER: _ClassVar[int] + SET_FIELD_NUMBER: _ClassVar[int] + DEL_FIELD_NUMBER: _ClassVar[int] + NOTE_FIELD_NUMBER: _ClassVar[int] + EXTRA_FIELD_NUMBER: _ClassVar[int] + hi: ClientHi + acc: ClientAcc + login: ClientLogin + sub: ClientSub + leave: ClientLeave + pub: ClientPub + get: ClientGet + set: ClientSet + note: ClientNote + extra: ClientExtra + def __init__(self, hi: _Optional[_Union[ClientHi, _Mapping]] = ..., acc: _Optional[_Union[ClientAcc, _Mapping]] = ..., login: _Optional[_Union[ClientLogin, _Mapping]] = ..., sub: _Optional[_Union[ClientSub, _Mapping]] = ..., leave: _Optional[_Union[ClientLeave, _Mapping]] = ..., pub: _Optional[_Union[ClientPub, _Mapping]] = ..., get: _Optional[_Union[ClientGet, _Mapping]] = ..., set: _Optional[_Union[ClientSet, _Mapping]] = ..., note: _Optional[_Union[ClientNote, _Mapping]] = ..., extra: _Optional[_Union[ClientExtra, _Mapping]] = ..., **kwargs) -> None: ... + +class ServerCred(_message.Message): + __slots__ = ["method", "value", "done"] + METHOD_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + DONE_FIELD_NUMBER: _ClassVar[int] + method: str + value: str + done: bool + def __init__(self, method: _Optional[str] = ..., value: _Optional[str] = ..., done: bool = ...) -> None: ... + +class TopicDesc(_message.Message): + __slots__ = ["created_at", "updated_at", "touched_at", "defacs", "acs", "seq_id", "read_id", "recv_id", "del_id", "public", "private", "state", "state_at", "trusted", "is_chan", "online", "last_seen_time", "last_seen_user_agent"] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + UPDATED_AT_FIELD_NUMBER: _ClassVar[int] + TOUCHED_AT_FIELD_NUMBER: _ClassVar[int] + DEFACS_FIELD_NUMBER: _ClassVar[int] + ACS_FIELD_NUMBER: _ClassVar[int] + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + READ_ID_FIELD_NUMBER: _ClassVar[int] + RECV_ID_FIELD_NUMBER: _ClassVar[int] + DEL_ID_FIELD_NUMBER: _ClassVar[int] + PUBLIC_FIELD_NUMBER: _ClassVar[int] + PRIVATE_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + STATE_AT_FIELD_NUMBER: _ClassVar[int] + TRUSTED_FIELD_NUMBER: _ClassVar[int] + IS_CHAN_FIELD_NUMBER: _ClassVar[int] + ONLINE_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_TIME_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_USER_AGENT_FIELD_NUMBER: _ClassVar[int] + created_at: int + updated_at: int + touched_at: int + defacs: DefaultAcsMode + acs: AccessMode + seq_id: int + read_id: int + recv_id: int + del_id: int + public: bytes + private: bytes + state: str + state_at: int + trusted: bytes + is_chan: bool + online: bool + last_seen_time: int + last_seen_user_agent: str + def __init__(self, created_at: _Optional[int] = ..., updated_at: _Optional[int] = ..., touched_at: _Optional[int] = ..., defacs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ..., seq_id: _Optional[int] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., del_id: _Optional[int] = ..., public: _Optional[bytes] = ..., private: _Optional[bytes] = ..., state: _Optional[str] = ..., state_at: _Optional[int] = ..., trusted: _Optional[bytes] = ..., is_chan: bool = ..., online: bool = ..., last_seen_time: _Optional[int] = ..., last_seen_user_agent: _Optional[str] = ...) -> None: ... + +class TopicSub(_message.Message): + __slots__ = ["updated_at", "deleted_at", "online", "acs", "read_id", "recv_id", "public", "trusted", "private", "user_id", "topic", "touched_at", "seq_id", "del_id", "last_seen_time", "last_seen_user_agent"] + UPDATED_AT_FIELD_NUMBER: _ClassVar[int] + DELETED_AT_FIELD_NUMBER: _ClassVar[int] + ONLINE_FIELD_NUMBER: _ClassVar[int] + ACS_FIELD_NUMBER: _ClassVar[int] + READ_ID_FIELD_NUMBER: _ClassVar[int] + RECV_ID_FIELD_NUMBER: _ClassVar[int] + PUBLIC_FIELD_NUMBER: _ClassVar[int] + TRUSTED_FIELD_NUMBER: _ClassVar[int] + PRIVATE_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + TOUCHED_AT_FIELD_NUMBER: _ClassVar[int] + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + DEL_ID_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_TIME_FIELD_NUMBER: _ClassVar[int] + LAST_SEEN_USER_AGENT_FIELD_NUMBER: _ClassVar[int] + updated_at: int + deleted_at: int + online: bool + acs: AccessMode + read_id: int + recv_id: int + public: bytes + trusted: bytes + private: bytes + user_id: str + topic: str + touched_at: int + seq_id: int + del_id: int + last_seen_time: int + last_seen_user_agent: str + def __init__(self, updated_at: _Optional[int] = ..., deleted_at: _Optional[int] = ..., online: bool = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., public: _Optional[bytes] = ..., trusted: _Optional[bytes] = ..., private: _Optional[bytes] = ..., user_id: _Optional[str] = ..., topic: _Optional[str] = ..., touched_at: _Optional[int] = ..., seq_id: _Optional[int] = ..., del_id: _Optional[int] = ..., last_seen_time: _Optional[int] = ..., last_seen_user_agent: _Optional[str] = ...) -> None: ... class DelValues(_message.Message): __slots__ = ["del_id", "del_seq"] @@ -295,33 +476,252 @@ class DelValues(_message.Message): del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange] def __init__(self, del_id: _Optional[int] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ...) -> None: ... -class GetOpts(_message.Message): - __slots__ = ["before_id", "if_modified_since", "limit", "since_id", "topic", "user"] - BEFORE_ID_FIELD_NUMBER: _ClassVar[int] - IF_MODIFIED_SINCE_FIELD_NUMBER: _ClassVar[int] - LIMIT_FIELD_NUMBER: _ClassVar[int] - SINCE_ID_FIELD_NUMBER: _ClassVar[int] +class ServerCtrl(_message.Message): + __slots__ = ["id", "topic", "code", "text", "params"] + class ParamsEntry(_message.Message): + __slots__ = ["key", "value"] + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: bytes + def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ... + ID_FIELD_NUMBER: _ClassVar[int] TOPIC_FIELD_NUMBER: _ClassVar[int] - USER_FIELD_NUMBER: _ClassVar[int] - before_id: int - if_modified_since: int - limit: int - since_id: int + CODE_FIELD_NUMBER: _ClassVar[int] + TEXT_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] + id: str topic: str - user: str - def __init__(self, if_modified_since: _Optional[int] = ..., user: _Optional[str] = ..., topic: _Optional[str] = ..., since_id: _Optional[int] = ..., before_id: _Optional[int] = ..., limit: _Optional[int] = ...) -> None: ... + code: int + text: str + params: _containers.ScalarMap[str, bytes] + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., code: _Optional[int] = ..., text: _Optional[str] = ..., params: _Optional[_Mapping[str, bytes]] = ...) -> None: ... -class GetQuery(_message.Message): - __slots__ = ["data", "desc", "sub", "what"] - DATA_FIELD_NUMBER: _ClassVar[int] +class ServerData(_message.Message): + __slots__ = ["topic", "from_user_id", "timestamp", "deleted_at", "seq_id", "head", "content"] + class HeadEntry(_message.Message): + __slots__ = ["key", "value"] + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: bytes + def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ... + TOPIC_FIELD_NUMBER: _ClassVar[int] + FROM_USER_ID_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + DELETED_AT_FIELD_NUMBER: _ClassVar[int] + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + HEAD_FIELD_NUMBER: _ClassVar[int] + CONTENT_FIELD_NUMBER: _ClassVar[int] + topic: str + from_user_id: str + timestamp: int + deleted_at: int + seq_id: int + head: _containers.ScalarMap[str, bytes] + content: bytes + def __init__(self, topic: _Optional[str] = ..., from_user_id: _Optional[str] = ..., timestamp: _Optional[int] = ..., deleted_at: _Optional[int] = ..., seq_id: _Optional[int] = ..., head: _Optional[_Mapping[str, bytes]] = ..., content: _Optional[bytes] = ...) -> None: ... + +class ServerPres(_message.Message): + __slots__ = ["topic", "src", "what", "user_agent", "seq_id", "del_id", "del_seq", "target_user_id", "actor_user_id", "acs"] + class What(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + X3: _ClassVar[ServerPres.What] + ON: _ClassVar[ServerPres.What] + OFF: _ClassVar[ServerPres.What] + UA: _ClassVar[ServerPres.What] + UPD: _ClassVar[ServerPres.What] + GONE: _ClassVar[ServerPres.What] + ACS: _ClassVar[ServerPres.What] + TERM: _ClassVar[ServerPres.What] + MSG: _ClassVar[ServerPres.What] + READ: _ClassVar[ServerPres.What] + RECV: _ClassVar[ServerPres.What] + DEL: _ClassVar[ServerPres.What] + TAGS: _ClassVar[ServerPres.What] + X3: ServerPres.What + ON: ServerPres.What + OFF: ServerPres.What + UA: ServerPres.What + UPD: ServerPres.What + GONE: ServerPres.What + ACS: ServerPres.What + TERM: ServerPres.What + MSG: ServerPres.What + READ: ServerPres.What + RECV: ServerPres.What + DEL: ServerPres.What + TAGS: ServerPres.What + TOPIC_FIELD_NUMBER: _ClassVar[int] + SRC_FIELD_NUMBER: _ClassVar[int] + WHAT_FIELD_NUMBER: _ClassVar[int] + USER_AGENT_FIELD_NUMBER: _ClassVar[int] + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + DEL_ID_FIELD_NUMBER: _ClassVar[int] + DEL_SEQ_FIELD_NUMBER: _ClassVar[int] + TARGET_USER_ID_FIELD_NUMBER: _ClassVar[int] + ACTOR_USER_ID_FIELD_NUMBER: _ClassVar[int] + ACS_FIELD_NUMBER: _ClassVar[int] + topic: str + src: str + what: ServerPres.What + user_agent: str + seq_id: int + del_id: int + del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange] + target_user_id: str + actor_user_id: str + acs: AccessMode + def __init__(self, topic: _Optional[str] = ..., src: _Optional[str] = ..., what: _Optional[_Union[ServerPres.What, str]] = ..., user_agent: _Optional[str] = ..., seq_id: _Optional[int] = ..., del_id: _Optional[int] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ..., target_user_id: _Optional[str] = ..., actor_user_id: _Optional[str] = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ...) -> None: ... + +class ServerMeta(_message.Message): + __slots__ = ["id", "topic", "desc", "sub", "tags", "cred"] + ID_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] DESC_FIELD_NUMBER: _ClassVar[int] SUB_FIELD_NUMBER: _ClassVar[int] + DEL_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + CRED_FIELD_NUMBER: _ClassVar[int] + id: str + topic: str + desc: TopicDesc + sub: _containers.RepeatedCompositeFieldContainer[TopicSub] + tags: _containers.RepeatedScalarFieldContainer[str] + cred: _containers.RepeatedCompositeFieldContainer[ServerCred] + def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., desc: _Optional[_Union[TopicDesc, _Mapping]] = ..., sub: _Optional[_Iterable[_Union[TopicSub, _Mapping]]] = ..., tags: _Optional[_Iterable[str]] = ..., cred: _Optional[_Iterable[_Union[ServerCred, _Mapping]]] = ..., **kwargs) -> None: ... + +class ServerInfo(_message.Message): + __slots__ = ["topic", "from_user_id", "what", "seq_id", "src", "event", "payload"] + TOPIC_FIELD_NUMBER: _ClassVar[int] + FROM_USER_ID_FIELD_NUMBER: _ClassVar[int] WHAT_FIELD_NUMBER: _ClassVar[int] - data: GetOpts - desc: GetOpts - sub: GetOpts - what: str - def __init__(self, what: _Optional[str] = ..., desc: _Optional[_Union[GetOpts, _Mapping]] = ..., sub: _Optional[_Union[GetOpts, _Mapping]] = ..., data: _Optional[_Union[GetOpts, _Mapping]] = ...) -> None: ... + SEQ_ID_FIELD_NUMBER: _ClassVar[int] + SRC_FIELD_NUMBER: _ClassVar[int] + EVENT_FIELD_NUMBER: _ClassVar[int] + PAYLOAD_FIELD_NUMBER: _ClassVar[int] + topic: str + from_user_id: str + what: InfoNote + seq_id: int + src: str + event: CallEvent + payload: bytes + def __init__(self, topic: _Optional[str] = ..., from_user_id: _Optional[str] = ..., what: _Optional[_Union[InfoNote, str]] = ..., seq_id: _Optional[int] = ..., src: _Optional[str] = ..., event: _Optional[_Union[CallEvent, str]] = ..., payload: _Optional[bytes] = ...) -> None: ... + +class ServerMsg(_message.Message): + __slots__ = ["ctrl", "data", "pres", "meta", "info", "topic"] + CTRL_FIELD_NUMBER: _ClassVar[int] + DATA_FIELD_NUMBER: _ClassVar[int] + PRES_FIELD_NUMBER: _ClassVar[int] + META_FIELD_NUMBER: _ClassVar[int] + INFO_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + ctrl: ServerCtrl + data: ServerData + pres: ServerPres + meta: ServerMeta + info: ServerInfo + topic: str + def __init__(self, ctrl: _Optional[_Union[ServerCtrl, _Mapping]] = ..., data: _Optional[_Union[ServerData, _Mapping]] = ..., pres: _Optional[_Union[ServerPres, _Mapping]] = ..., meta: _Optional[_Union[ServerMeta, _Mapping]] = ..., info: _Optional[_Union[ServerInfo, _Mapping]] = ..., topic: _Optional[str] = ...) -> None: ... + +class ServerResp(_message.Message): + __slots__ = ["status", "srvmsg", "clmsg"] + STATUS_FIELD_NUMBER: _ClassVar[int] + SRVMSG_FIELD_NUMBER: _ClassVar[int] + CLMSG_FIELD_NUMBER: _ClassVar[int] + status: RespCode + srvmsg: ServerMsg + clmsg: ClientMsg + def __init__(self, status: _Optional[_Union[RespCode, str]] = ..., srvmsg: _Optional[_Union[ServerMsg, _Mapping]] = ..., clmsg: _Optional[_Union[ClientMsg, _Mapping]] = ...) -> None: ... + +class Session(_message.Message): + __slots__ = ["session_id", "user_id", "auth_level", "remote_addr", "user_agent", "device_id", "language"] + SESSION_ID_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int] + REMOTE_ADDR_FIELD_NUMBER: _ClassVar[int] + USER_AGENT_FIELD_NUMBER: _ClassVar[int] + DEVICE_ID_FIELD_NUMBER: _ClassVar[int] + LANGUAGE_FIELD_NUMBER: _ClassVar[int] + session_id: str + user_id: str + auth_level: AuthLevel + remote_addr: str + user_agent: str + device_id: str + language: str + def __init__(self, session_id: _Optional[str] = ..., user_id: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ..., remote_addr: _Optional[str] = ..., user_agent: _Optional[str] = ..., device_id: _Optional[str] = ..., language: _Optional[str] = ...) -> None: ... + +class ClientReq(_message.Message): + __slots__ = ["msg", "sess"] + MSG_FIELD_NUMBER: _ClassVar[int] + SESS_FIELD_NUMBER: _ClassVar[int] + msg: ClientMsg + sess: Session + def __init__(self, msg: _Optional[_Union[ClientMsg, _Mapping]] = ..., sess: _Optional[_Union[Session, _Mapping]] = ...) -> None: ... + +class SearchQuery(_message.Message): + __slots__ = ["user_id", "query"] + USER_ID_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] + user_id: str + query: str + def __init__(self, user_id: _Optional[str] = ..., query: _Optional[str] = ...) -> None: ... + +class SearchFound(_message.Message): + __slots__ = ["status", "query", "result"] + STATUS_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] + RESULT_FIELD_NUMBER: _ClassVar[int] + status: RespCode + query: str + result: _containers.RepeatedCompositeFieldContainer[TopicSub] + def __init__(self, status: _Optional[_Union[RespCode, str]] = ..., query: _Optional[str] = ..., result: _Optional[_Iterable[_Union[TopicSub, _Mapping]]] = ...) -> None: ... + +class TopicEvent(_message.Message): + __slots__ = ["action", "name", "desc"] + ACTION_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + DESC_FIELD_NUMBER: _ClassVar[int] + action: Crud + name: str + desc: TopicDesc + def __init__(self, action: _Optional[_Union[Crud, str]] = ..., name: _Optional[str] = ..., desc: _Optional[_Union[TopicDesc, _Mapping]] = ...) -> None: ... + +class AccountEvent(_message.Message): + __slots__ = ["action", "user_id", "default_acs", "public", "tags"] + ACTION_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + DEFAULT_ACS_FIELD_NUMBER: _ClassVar[int] + PUBLIC_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + action: Crud + user_id: str + default_acs: DefaultAcsMode + public: bytes + tags: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, action: _Optional[_Union[Crud, str]] = ..., user_id: _Optional[str] = ..., default_acs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., public: _Optional[bytes] = ..., tags: _Optional[_Iterable[str]] = ...) -> None: ... + +class SubscriptionEvent(_message.Message): + __slots__ = ["action", "topic", "user_id", "del_id", "read_id", "recv_id", "mode", "private"] + ACTION_FIELD_NUMBER: _ClassVar[int] + TOPIC_FIELD_NUMBER: _ClassVar[int] + USER_ID_FIELD_NUMBER: _ClassVar[int] + DEL_ID_FIELD_NUMBER: _ClassVar[int] + READ_ID_FIELD_NUMBER: _ClassVar[int] + RECV_ID_FIELD_NUMBER: _ClassVar[int] + MODE_FIELD_NUMBER: _ClassVar[int] + PRIVATE_FIELD_NUMBER: _ClassVar[int] + action: Crud + topic: str + user_id: str + del_id: int + read_id: int + recv_id: int + mode: AccessMode + private: bytes + def __init__(self, action: _Optional[_Union[Crud, str]] = ..., topic: _Optional[str] = ..., user_id: _Optional[str] = ..., del_id: _Optional[int] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., mode: _Optional[_Union[AccessMode, _Mapping]] = ..., private: _Optional[bytes] = ...) -> None: ... class MessageEvent(_message.Message): __slots__ = ["action", "msg"] @@ -330,360 +730,3 @@ class MessageEvent(_message.Message): action: Crud msg: ServerData def __init__(self, action: _Optional[_Union[Crud, str]] = ..., msg: _Optional[_Union[ServerData, _Mapping]] = ...) -> None: ... - -class SearchFound(_message.Message): - __slots__ = ["query", "result", "status"] - QUERY_FIELD_NUMBER: _ClassVar[int] - RESULT_FIELD_NUMBER: _ClassVar[int] - STATUS_FIELD_NUMBER: _ClassVar[int] - query: str - result: _containers.RepeatedCompositeFieldContainer[TopicSub] - status: RespCode - def __init__(self, status: _Optional[_Union[RespCode, str]] = ..., query: _Optional[str] = ..., result: _Optional[_Iterable[_Union[TopicSub, _Mapping]]] = ...) -> None: ... - -class SearchQuery(_message.Message): - __slots__ = ["query", "user_id"] - QUERY_FIELD_NUMBER: _ClassVar[int] - USER_ID_FIELD_NUMBER: _ClassVar[int] - query: str - user_id: str - def __init__(self, user_id: _Optional[str] = ..., query: _Optional[str] = ...) -> None: ... - -class SeqRange(_message.Message): - __slots__ = ["hi", "low"] - HI_FIELD_NUMBER: _ClassVar[int] - LOW_FIELD_NUMBER: _ClassVar[int] - hi: int - low: int - def __init__(self, low: _Optional[int] = ..., hi: _Optional[int] = ...) -> None: ... - -class ServerCred(_message.Message): - __slots__ = ["done", "method", "value"] - DONE_FIELD_NUMBER: _ClassVar[int] - METHOD_FIELD_NUMBER: _ClassVar[int] - VALUE_FIELD_NUMBER: _ClassVar[int] - done: bool - method: str - value: str - def __init__(self, method: _Optional[str] = ..., value: _Optional[str] = ..., done: bool = ...) -> None: ... - -class ServerCtrl(_message.Message): - __slots__ = ["code", "id", "params", "text", "topic"] - class ParamsEntry(_message.Message): - __slots__ = ["key", "value"] - KEY_FIELD_NUMBER: _ClassVar[int] - VALUE_FIELD_NUMBER: _ClassVar[int] - key: str - value: bytes - def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ... - CODE_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - PARAMS_FIELD_NUMBER: _ClassVar[int] - TEXT_FIELD_NUMBER: _ClassVar[int] - TOPIC_FIELD_NUMBER: _ClassVar[int] - code: int - id: str - params: _containers.ScalarMap[str, bytes] - text: str - topic: str - def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., code: _Optional[int] = ..., text: _Optional[str] = ..., params: _Optional[_Mapping[str, bytes]] = ...) -> None: ... - -class ServerData(_message.Message): - __slots__ = ["content", "deleted_at", "from_user_id", "head", "seq_id", "timestamp", "topic"] - class HeadEntry(_message.Message): - __slots__ = ["key", "value"] - KEY_FIELD_NUMBER: _ClassVar[int] - VALUE_FIELD_NUMBER: _ClassVar[int] - key: str - value: bytes - def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ... - CONTENT_FIELD_NUMBER: _ClassVar[int] - DELETED_AT_FIELD_NUMBER: _ClassVar[int] - FROM_USER_ID_FIELD_NUMBER: _ClassVar[int] - HEAD_FIELD_NUMBER: _ClassVar[int] - SEQ_ID_FIELD_NUMBER: _ClassVar[int] - TIMESTAMP_FIELD_NUMBER: _ClassVar[int] - TOPIC_FIELD_NUMBER: _ClassVar[int] - content: bytes - deleted_at: int - from_user_id: str - head: _containers.ScalarMap[str, bytes] - seq_id: int - timestamp: int - topic: str - def __init__(self, topic: _Optional[str] = ..., from_user_id: _Optional[str] = ..., timestamp: _Optional[int] = ..., deleted_at: _Optional[int] = ..., seq_id: _Optional[int] = ..., head: _Optional[_Mapping[str, bytes]] = ..., content: _Optional[bytes] = ...) -> None: ... - -class ServerInfo(_message.Message): - __slots__ = ["event", "from_user_id", "payload", "seq_id", "src", "topic", "what"] - EVENT_FIELD_NUMBER: _ClassVar[int] - FROM_USER_ID_FIELD_NUMBER: _ClassVar[int] - PAYLOAD_FIELD_NUMBER: _ClassVar[int] - SEQ_ID_FIELD_NUMBER: _ClassVar[int] - SRC_FIELD_NUMBER: _ClassVar[int] - TOPIC_FIELD_NUMBER: _ClassVar[int] - WHAT_FIELD_NUMBER: _ClassVar[int] - event: CallEvent - from_user_id: str - payload: bytes - seq_id: int - src: str - topic: str - what: InfoNote - def __init__(self, topic: _Optional[str] = ..., from_user_id: _Optional[str] = ..., what: _Optional[_Union[InfoNote, str]] = ..., seq_id: _Optional[int] = ..., src: _Optional[str] = ..., event: _Optional[_Union[CallEvent, str]] = ..., payload: _Optional[bytes] = ...) -> None: ... - -class ServerMeta(_message.Message): - __slots__ = ["cred", "desc", "id", "sub", "tags", "topic"] - CRED_FIELD_NUMBER: _ClassVar[int] - DEL_FIELD_NUMBER: _ClassVar[int] - DESC_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - SUB_FIELD_NUMBER: _ClassVar[int] - TAGS_FIELD_NUMBER: _ClassVar[int] - TOPIC_FIELD_NUMBER: _ClassVar[int] - cred: _containers.RepeatedCompositeFieldContainer[ServerCred] - desc: TopicDesc - id: str - sub: _containers.RepeatedCompositeFieldContainer[TopicSub] - tags: _containers.RepeatedScalarFieldContainer[str] - topic: str - def __init__(self, id: _Optional[str] = ..., topic: _Optional[str] = ..., desc: _Optional[_Union[TopicDesc, _Mapping]] = ..., sub: _Optional[_Iterable[_Union[TopicSub, _Mapping]]] = ..., tags: _Optional[_Iterable[str]] = ..., cred: _Optional[_Iterable[_Union[ServerCred, _Mapping]]] = ..., **kwargs) -> None: ... - -class ServerMsg(_message.Message): - __slots__ = ["ctrl", "data", "info", "meta", "pres", "topic"] - CTRL_FIELD_NUMBER: _ClassVar[int] - DATA_FIELD_NUMBER: _ClassVar[int] - INFO_FIELD_NUMBER: _ClassVar[int] - META_FIELD_NUMBER: _ClassVar[int] - PRES_FIELD_NUMBER: _ClassVar[int] - TOPIC_FIELD_NUMBER: _ClassVar[int] - ctrl: ServerCtrl - data: ServerData - info: ServerInfo - meta: ServerMeta - pres: ServerPres - topic: str - def __init__(self, ctrl: _Optional[_Union[ServerCtrl, _Mapping]] = ..., data: _Optional[_Union[ServerData, _Mapping]] = ..., pres: _Optional[_Union[ServerPres, _Mapping]] = ..., meta: _Optional[_Union[ServerMeta, _Mapping]] = ..., info: _Optional[_Union[ServerInfo, _Mapping]] = ..., topic: _Optional[str] = ...) -> None: ... - -class ServerPres(_message.Message): - __slots__ = ["acs", "actor_user_id", "del_id", "del_seq", "seq_id", "src", "target_user_id", "topic", "user_agent", "what"] - class What(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] - ACS: ServerPres.What - ACS_FIELD_NUMBER: _ClassVar[int] - ACTOR_USER_ID_FIELD_NUMBER: _ClassVar[int] - DEL: ServerPres.What - DEL_ID_FIELD_NUMBER: _ClassVar[int] - DEL_SEQ_FIELD_NUMBER: _ClassVar[int] - GONE: ServerPres.What - MSG: ServerPres.What - OFF: ServerPres.What - ON: ServerPres.What - READ: ServerPres.What - RECV: ServerPres.What - SEQ_ID_FIELD_NUMBER: _ClassVar[int] - SRC_FIELD_NUMBER: _ClassVar[int] - TAGS: ServerPres.What - TARGET_USER_ID_FIELD_NUMBER: _ClassVar[int] - TERM: ServerPres.What - TOPIC_FIELD_NUMBER: _ClassVar[int] - UA: ServerPres.What - UPD: ServerPres.What - USER_AGENT_FIELD_NUMBER: _ClassVar[int] - WHAT_FIELD_NUMBER: _ClassVar[int] - X3: ServerPres.What - acs: AccessMode - actor_user_id: str - del_id: int - del_seq: _containers.RepeatedCompositeFieldContainer[SeqRange] - seq_id: int - src: str - target_user_id: str - topic: str - user_agent: str - what: ServerPres.What - def __init__(self, topic: _Optional[str] = ..., src: _Optional[str] = ..., what: _Optional[_Union[ServerPres.What, str]] = ..., user_agent: _Optional[str] = ..., seq_id: _Optional[int] = ..., del_id: _Optional[int] = ..., del_seq: _Optional[_Iterable[_Union[SeqRange, _Mapping]]] = ..., target_user_id: _Optional[str] = ..., actor_user_id: _Optional[str] = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ...) -> None: ... - -class ServerResp(_message.Message): - __slots__ = ["clmsg", "srvmsg", "status"] - CLMSG_FIELD_NUMBER: _ClassVar[int] - SRVMSG_FIELD_NUMBER: _ClassVar[int] - STATUS_FIELD_NUMBER: _ClassVar[int] - clmsg: ClientMsg - srvmsg: ServerMsg - status: RespCode - def __init__(self, status: _Optional[_Union[RespCode, str]] = ..., srvmsg: _Optional[_Union[ServerMsg, _Mapping]] = ..., clmsg: _Optional[_Union[ClientMsg, _Mapping]] = ...) -> None: ... - -class Session(_message.Message): - __slots__ = ["auth_level", "device_id", "language", "remote_addr", "session_id", "user_agent", "user_id"] - AUTH_LEVEL_FIELD_NUMBER: _ClassVar[int] - DEVICE_ID_FIELD_NUMBER: _ClassVar[int] - LANGUAGE_FIELD_NUMBER: _ClassVar[int] - REMOTE_ADDR_FIELD_NUMBER: _ClassVar[int] - SESSION_ID_FIELD_NUMBER: _ClassVar[int] - USER_AGENT_FIELD_NUMBER: _ClassVar[int] - USER_ID_FIELD_NUMBER: _ClassVar[int] - auth_level: AuthLevel - device_id: str - language: str - remote_addr: str - session_id: str - user_agent: str - user_id: str - def __init__(self, session_id: _Optional[str] = ..., user_id: _Optional[str] = ..., auth_level: _Optional[_Union[AuthLevel, str]] = ..., remote_addr: _Optional[str] = ..., user_agent: _Optional[str] = ..., device_id: _Optional[str] = ..., language: _Optional[str] = ...) -> None: ... - -class SetDesc(_message.Message): - __slots__ = ["default_acs", "private", "public", "trusted"] - DEFAULT_ACS_FIELD_NUMBER: _ClassVar[int] - PRIVATE_FIELD_NUMBER: _ClassVar[int] - PUBLIC_FIELD_NUMBER: _ClassVar[int] - TRUSTED_FIELD_NUMBER: _ClassVar[int] - default_acs: DefaultAcsMode - private: bytes - public: bytes - trusted: bytes - def __init__(self, default_acs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., public: _Optional[bytes] = ..., private: _Optional[bytes] = ..., trusted: _Optional[bytes] = ...) -> None: ... - -class SetQuery(_message.Message): - __slots__ = ["cred", "desc", "sub", "tags"] - CRED_FIELD_NUMBER: _ClassVar[int] - DESC_FIELD_NUMBER: _ClassVar[int] - SUB_FIELD_NUMBER: _ClassVar[int] - TAGS_FIELD_NUMBER: _ClassVar[int] - cred: ClientCred - desc: SetDesc - sub: SetSub - tags: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, desc: _Optional[_Union[SetDesc, _Mapping]] = ..., sub: _Optional[_Union[SetSub, _Mapping]] = ..., tags: _Optional[_Iterable[str]] = ..., cred: _Optional[_Union[ClientCred, _Mapping]] = ...) -> None: ... - -class SetSub(_message.Message): - __slots__ = ["mode", "user_id"] - MODE_FIELD_NUMBER: _ClassVar[int] - USER_ID_FIELD_NUMBER: _ClassVar[int] - mode: str - user_id: str - def __init__(self, user_id: _Optional[str] = ..., mode: _Optional[str] = ...) -> None: ... - -class SubscriptionEvent(_message.Message): - __slots__ = ["action", "del_id", "mode", "private", "read_id", "recv_id", "topic", "user_id"] - ACTION_FIELD_NUMBER: _ClassVar[int] - DEL_ID_FIELD_NUMBER: _ClassVar[int] - MODE_FIELD_NUMBER: _ClassVar[int] - PRIVATE_FIELD_NUMBER: _ClassVar[int] - READ_ID_FIELD_NUMBER: _ClassVar[int] - RECV_ID_FIELD_NUMBER: _ClassVar[int] - TOPIC_FIELD_NUMBER: _ClassVar[int] - USER_ID_FIELD_NUMBER: _ClassVar[int] - action: Crud - del_id: int - mode: AccessMode - private: bytes - read_id: int - recv_id: int - topic: str - user_id: str - def __init__(self, action: _Optional[_Union[Crud, str]] = ..., topic: _Optional[str] = ..., user_id: _Optional[str] = ..., del_id: _Optional[int] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., mode: _Optional[_Union[AccessMode, _Mapping]] = ..., private: _Optional[bytes] = ...) -> None: ... - -class TopicDesc(_message.Message): - __slots__ = ["acs", "created_at", "defacs", "del_id", "is_chan", "last_seen_time", "last_seen_user_agent", "online", "private", "public", "read_id", "recv_id", "seq_id", "state", "state_at", "touched_at", "trusted", "updated_at"] - ACS_FIELD_NUMBER: _ClassVar[int] - CREATED_AT_FIELD_NUMBER: _ClassVar[int] - DEFACS_FIELD_NUMBER: _ClassVar[int] - DEL_ID_FIELD_NUMBER: _ClassVar[int] - IS_CHAN_FIELD_NUMBER: _ClassVar[int] - LAST_SEEN_TIME_FIELD_NUMBER: _ClassVar[int] - LAST_SEEN_USER_AGENT_FIELD_NUMBER: _ClassVar[int] - ONLINE_FIELD_NUMBER: _ClassVar[int] - PRIVATE_FIELD_NUMBER: _ClassVar[int] - PUBLIC_FIELD_NUMBER: _ClassVar[int] - READ_ID_FIELD_NUMBER: _ClassVar[int] - RECV_ID_FIELD_NUMBER: _ClassVar[int] - SEQ_ID_FIELD_NUMBER: _ClassVar[int] - STATE_AT_FIELD_NUMBER: _ClassVar[int] - STATE_FIELD_NUMBER: _ClassVar[int] - TOUCHED_AT_FIELD_NUMBER: _ClassVar[int] - TRUSTED_FIELD_NUMBER: _ClassVar[int] - UPDATED_AT_FIELD_NUMBER: _ClassVar[int] - acs: AccessMode - created_at: int - defacs: DefaultAcsMode - del_id: int - is_chan: bool - last_seen_time: int - last_seen_user_agent: str - online: bool - private: bytes - public: bytes - read_id: int - recv_id: int - seq_id: int - state: str - state_at: int - touched_at: int - trusted: bytes - updated_at: int - def __init__(self, created_at: _Optional[int] = ..., updated_at: _Optional[int] = ..., touched_at: _Optional[int] = ..., defacs: _Optional[_Union[DefaultAcsMode, _Mapping]] = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ..., seq_id: _Optional[int] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., del_id: _Optional[int] = ..., public: _Optional[bytes] = ..., private: _Optional[bytes] = ..., state: _Optional[str] = ..., state_at: _Optional[int] = ..., trusted: _Optional[bytes] = ..., is_chan: bool = ..., online: bool = ..., last_seen_time: _Optional[int] = ..., last_seen_user_agent: _Optional[str] = ...) -> None: ... - -class TopicEvent(_message.Message): - __slots__ = ["action", "desc", "name"] - ACTION_FIELD_NUMBER: _ClassVar[int] - DESC_FIELD_NUMBER: _ClassVar[int] - NAME_FIELD_NUMBER: _ClassVar[int] - action: Crud - desc: TopicDesc - name: str - def __init__(self, action: _Optional[_Union[Crud, str]] = ..., name: _Optional[str] = ..., desc: _Optional[_Union[TopicDesc, _Mapping]] = ...) -> None: ... - -class TopicSub(_message.Message): - __slots__ = ["acs", "del_id", "deleted_at", "last_seen_time", "last_seen_user_agent", "online", "private", "public", "read_id", "recv_id", "seq_id", "topic", "touched_at", "trusted", "updated_at", "user_id"] - ACS_FIELD_NUMBER: _ClassVar[int] - DELETED_AT_FIELD_NUMBER: _ClassVar[int] - DEL_ID_FIELD_NUMBER: _ClassVar[int] - LAST_SEEN_TIME_FIELD_NUMBER: _ClassVar[int] - LAST_SEEN_USER_AGENT_FIELD_NUMBER: _ClassVar[int] - ONLINE_FIELD_NUMBER: _ClassVar[int] - PRIVATE_FIELD_NUMBER: _ClassVar[int] - PUBLIC_FIELD_NUMBER: _ClassVar[int] - READ_ID_FIELD_NUMBER: _ClassVar[int] - RECV_ID_FIELD_NUMBER: _ClassVar[int] - SEQ_ID_FIELD_NUMBER: _ClassVar[int] - TOPIC_FIELD_NUMBER: _ClassVar[int] - TOUCHED_AT_FIELD_NUMBER: _ClassVar[int] - TRUSTED_FIELD_NUMBER: _ClassVar[int] - UPDATED_AT_FIELD_NUMBER: _ClassVar[int] - USER_ID_FIELD_NUMBER: _ClassVar[int] - acs: AccessMode - del_id: int - deleted_at: int - last_seen_time: int - last_seen_user_agent: str - online: bool - private: bytes - public: bytes - read_id: int - recv_id: int - seq_id: int - topic: str - touched_at: int - trusted: bytes - updated_at: int - user_id: str - def __init__(self, updated_at: _Optional[int] = ..., deleted_at: _Optional[int] = ..., online: bool = ..., acs: _Optional[_Union[AccessMode, _Mapping]] = ..., read_id: _Optional[int] = ..., recv_id: _Optional[int] = ..., public: _Optional[bytes] = ..., trusted: _Optional[bytes] = ..., private: _Optional[bytes] = ..., user_id: _Optional[str] = ..., topic: _Optional[str] = ..., touched_at: _Optional[int] = ..., seq_id: _Optional[int] = ..., del_id: _Optional[int] = ..., last_seen_time: _Optional[int] = ..., last_seen_user_agent: _Optional[str] = ...) -> None: ... - -class Unused(_message.Message): - __slots__ = [] - def __init__(self) -> None: ... - -class AuthLevel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] - -class InfoNote(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] - -class CallEvent(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] - -class RespCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] - -class Crud(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = [] From 374264abb9528d8b2d6dfa2ccb94f62e49af0606 Mon Sep 17 00:00:00 2001 From: or-else Date: Sat, 27 May 2023 12:08:32 -0700 Subject: [PATCH 6/7] updated tinode.conf with config for new feaures + formatting --- server/tinode.conf | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/server/tinode.conf b/server/tinode.conf index 1150260b..0a387b40 100644 --- a/server/tinode.conf +++ b/server/tinode.conf @@ -85,6 +85,8 @@ // File system location to store uploaded files. In case of a cluster it // must be accessible by all cluster members, i.e. a network drive like https://www.samba.org/ "upload_dir": "uploads", + // Cache-Control header to use for uploaded files. 86400 seconds = 24 hours. + "cache_control": "max-age=86400", // Origin URLs allowed to download/upload files, e.g. ["https://www.example.com", "http://example.com"]. // Not necessary in most cases. // "cors_origins": ["*"] @@ -111,6 +113,10 @@ // that overrides the default generated endpoint for a client. Set this // to `""` to use the default generated endpoint. "endpoint": "", + // Expiration time for presigned URLs in seconds. + "presign_ttl": 3600, + // Cache-Control header to use for uploaded files. 86400 seconds = 24 hours. + "cache_control": "max-age=86400", // Origin URLs allowed to download files, e.g. ["https://www.example.com", "http://example.com"]. // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin "cors_origins": ["*"] @@ -411,7 +417,7 @@ // // === IMPORTANT === // - // REMOVE IT IN PRODUCTION!!! Otherwise anyone will be able to register + // REMOVE IN PRODUCTION!!! Otherwise anyone will be able to register // with fake emails. "debug_response": "123456" } @@ -445,7 +451,7 @@ // // === IMPORTANT === // - // REMOVE IT IN PRODUCTION!!! Otherwise anyone will be able to register + // REMOVE IN PRODUCTION!!! Otherwise anyone will be able to register // with fake phone numbers. "debug_response": "123456" } @@ -594,6 +600,19 @@ ], // An alternative way to provide STUN/TURN configuration. "ice_servers_file": "/path/to/ice-servers-config.json", + + // Video conferencing configuration. + "vc": { + "enabled": true, + // Media server endpoint url. + "endpoint_url": "ws://localhost:7880/", + // Media server API key. + "api_key": "devkey", + // Media server secret. + "api_secret": "secret", + // Maximum call duration in seconds (1800 seconds = 30 min). + "max_duration": 1800 + } }, // Cluster-mode configuration. From b0a7c3924d036e879ff01a0a37901822e7845996 Mon Sep 17 00:00:00 2001 From: or-else Date: Sat, 27 May 2023 12:11:03 -0700 Subject: [PATCH 7/7] remove logging on missing call event --- server/pbconverter.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/pbconverter.go b/server/pbconverter.go index ca97a61b..4a7ac19c 100644 --- a/server/pbconverter.go +++ b/server/pbconverter.go @@ -772,8 +772,10 @@ func pbCallEventSerialize(event string) pbx.CallEvent { out = pbx.CallEvent_OFFER case "ringing": out = pbx.CallEvent_RINGING + case "": + out = pbx.CallEvent_X2 default: - logs.Info.Println("unknown info-note.event", event) + logs.Info.Println("unknown call event", event) } return out }