From 8e41c7532d1ae6609e6f9f49758de115d1d0f803 Mon Sep 17 00:00:00 2001 From: ChronosX88 Date: Fri, 3 Jan 2020 00:10:18 +0400 Subject: [PATCH] SPEC-4: Update proposal --- CPPs/proposed/CPP3 - Message Mindmap.png | Bin 0 -> 69222 bytes CPPs/proposed/CPP3 - Private user messages.md | 339 ++++++++++++++++++ 2 files changed, 339 insertions(+) create mode 100644 CPPs/proposed/CPP3 - Message Mindmap.png create mode 100644 CPPs/proposed/CPP3 - Private user messages.md diff --git a/CPPs/proposed/CPP3 - Message Mindmap.png b/CPPs/proposed/CPP3 - Message Mindmap.png new file mode 100644 index 0000000000000000000000000000000000000000..129354dfaf6b8191acfd8117279c7bc8e05273b1 GIT binary patch literal 69222 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 ^J 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 literal 0 HcmV?d00001 diff --git a/CPPs/proposed/CPP3 - Private user messages.md b/CPPs/proposed/CPP3 - Private user messages.md new file mode 100644 index 0000000..e1e9a2a --- /dev/null +++ b/CPPs/proposed/CPP3 - Private user messages.md @@ -0,0 +1,339 @@ +# CPP#3 - Private user messages + +## Introduction + +This proposal introduces the concept of chats (this proposal describes only private chats) and a mechanism for sending/receiving messages in the chat. + +![Message Mindmap](CPP3 - Message Mindmap.png) + +## Message type identifiers + +- `chat:create`: create chat action +- `chat:created`: notification about creating new chat by some user +- `message:send`: send message to chat +- `message:receive`: receive message from chat +- `message:read`: read a message +- `message:receive:read`: receive notification about read message + +## Glossary + +- **Chat (the so-called "room")** - the entity in which communication occurs between users (participants). +- **Chat history** - an ordered by time list of messages of chat + +## Use Cases + +Note: C - client, S - server + +### Creating private chat + +1. C1: + +```json +{ + "id": "abcd", + "type": "chat:create", + "from": "@user1@cadmium.im", + "to": "cadmium.im", + "payload": { + "chatType": "user", + "receiverUserId": "@user2@cadmium.im" + } +} +``` + +2. S to C1: + +```json +{ + "id": "abcd", + "type": "chat:create", + "from": "cadmium.im", + "to": "@user1@cadmium.im", + "ok": true, + "payload": { + "roomId": "!22c5d942-22bc-45b3-9541-ec2b49afe5ec@cadmium.im" + } +} +``` + +Error response (S): + +```json +{ + "id": "abcd", + "type": "chat:create", + "from": "cadmium.im", + "to": "@user1@cadmium.im", + "ok": false, + "payload": { + "errCode": "blacklistedUser", + "errText": "You are blacklisted for this user" + } +} +``` + +3. S to C2: + +```json +{ + "id": "abcd", + "type": "chat:created", + "from": "cadmium.im", + "to": "@user2@cadmium.im", + "ok": true, + "payload": { + "roomId": "!22c5d942-22bc-45b3-9541-ec2b49afe5ec@cadmium.im", + "creatorUserId": "@user1@cadmium.im" + } +} +``` + +### Sending message to chat + +1. C1: + +```json +{ + "id": "abcd", + "type": "message:send", + "from": "@user1@cadmium.im", + "to": "!22c5d942-22bc-45b3-9541-ec2b49afe5ec@cadmium.im", + "payload": { + "messageType": "text", + "messageText": "Hello world!" + } +} +``` + +2. S to C1: + +```json +{ + "id": "abcd", + "type": "message:send", + "from": "cadmium.im", + "to": "@user1@cadmium.im", + "ok": true, + "payload": { + "messageTimestamp": 1577988125, + "messageId": "ee55b940-0f2f-46dc-8c8e-e6ea5874c3c2" + } +} +``` + +3. S to C2: + +```json +{ + "id": "abcd", + "type": "message:receive", + "from": "cadmium.im", + "to": "@user2@cadmium.im", + "ok": true, + "payload": { + "messageType": "text", + "messageId": "ee55b940-0f2f-46dc-8c8e-e6ea5874c3c2", + "messageText": "Hello world!" + } +} +``` + +### Reading message + +1. C2: + +```json +{ + "id": "abcd", + "type": "message:read", + "from": "@user2@cadmium.im", + "to": "!22c5d942-22bc-45b3-9541-ec2b49afe5ec@cadmium.im", + "payload": { + "messageId": "ee55b940-0f2f-46dc-8c8e-e6ea5874c3c2" + } +} +``` + +2. S to C2: + +```json +{ + "id": "abcd", + "type": "message:read", + "from": "cadmium.im", + "to": "@user2@cadmium.im", + "ok": true, + "payload": {} +} +``` + +3. S to C1: + +```json +{ + "id": "abcd", + "type": "message:receive:read", + "from": "cadmium.im", + "to": "@user1@cadmium.im", + "ok": true, + "payload": { + "messageId": "ee55b940-0f2f-46dc-8c8e-e6ea5874c3c2", + "readUserId": "@user2@cadmium.im" + } +} +``` + +## Errors + +- Ratelimit system: enabled +- Authentication required: true +- `blacklistedUser`: user 1, who is trying to create a chat, is blacklisted by user 2 + +## Business Rules + +- Every message MUST be recorded in chat message history +- Timestamp MUST be in UTC timezone +- Server MUST store read state of message as list of user IDs which read this message + +## Security Considerations + +None. + +## JSON Schema + +### Creating chat payload + +- Request for creating chat: + +```typescript +interface CreatePrivateChatRequestPayload { + /** + * Type of chat which need to create + */ + chatType: ChatType, + + /** + * Second chat member ID (first member is who trying to create this chat) in + * case when chatType is "user" + */ + receiverUserId: EntityID +} +``` + +- Response for creating chat: + +```typescript +interface CreatePrivateChatResponsePayload { + /** + * Identifier of newly created chat + */ + roomId: EntityID +} +``` + +- Notification for second member of newly created chat about the fact of creating this chat + +```typescript +interface CreatePrivateChatNotificationPayload { + /** + * Identifier of newly created chat + */ + roomId: EntityID, + + /** + * Identifier of user which created this chat + */ + creatorUserId: EntityID +} +``` + +### Sending message to chat payload + +- Send message action request payload + +```typescript +interface SendMessageRequestPayload { + /** + * Type of the message + */ + messageType: MessageType, + + /** + * Text of the message + */ + messageText: string, + + + /** + * URL of file/image/voice which attached to this message (in case of + * appropriate message type) + */ + fileUrl?: string +} +``` + +- Send message action response payload + +```typescript +interface SendMessageResponsePayload { + /** + * UNIX Timestamp of newly sent message + */ + messageTimestamp: number, + + /** + * Message identifier in chat history of newly sent message + */ + messageId: string +} +``` + +- Notification about new message in the chat + +```typescript +interface NewMessageNotificationPayload { + /** + * Identifier of received message in chat history + */ + messageId: string, + + /** + * UNIX timestamp of received message + */ + messageTimestamp: number, + + /** + * Text of received message + */ + messageText: string +} +``` + +### Reading message payload + +- Read message action request payload + +```typescript +interface ReadMessageRequesPayload { + /** + * Identifier of message which need mark as read + */ + messageId: string, +} +``` + +- Notification about reading message + +```typescript +interface ReadMessageRequesPayload { + /** + * Identifier of message which was read + */ + messageId: string, + + /** + * Identifier of user which read this message + */ + readUserId: EntityID +} +``` \ No newline at end of file