···1+# @rachel-mp4/lrcproto
2+3+This repository defines the LRC protocol message schema using Protocol Buffers and provides generated code for both **TypeScript** and **Go**.
4+5+## Installation
6+7+### TypeScript
8+9+```bash
10+npm install @rachel-mp4/lrcproto
11+```
12+13+### Go
14+15+```go
16+import "github.com/rachel.mp4/lrcproto/gen/go"
17+```
18+19+## Schema
20+21+When implemented in a websocket, LRC communication occurs by sending **Events**, which in LRC 1.0 can be of 14 types. Their semantics may differ slightly if they are sent from client -> server or server -> client
22+23+```
24+Ping #Requests a Pong
25+26+Pong #Response to a Ping
27+28+Init #Initializes my message (client -> server)
29+ #or declares that a message was initialized (server -> client)
30+Pub #Publishes my message (client -> server)
31+ #or declares that a message was published (server -> client)
32+Insert #Inserts a string at a given byte offset
33+34+Delete #Deletes the bytes between two offsets
35+36+Mute #Requests the server stop relaying events from a user
37+38+Unmute #Requests the server start relaying events from a user
39+40+Set #Sets my metadata
41+42+Get #Requests the included fields from the server (client -> server)
43+ #or provides it to the client (server -> client)
44+Kick #Requests to kick a user
45+46+Hug #Hugs a user
47+48+Ban #Requests to ban a user
49+50+Unban #Requests to unban a user
51+```
52+53+The LRC protocol does not inherently determine how Mute, Unmute, Kick, Ban and Unban should be implemented. ExternalID and Secret fields allow for some form of verification of identity, which can occur outside of the protocol.
54+55+## License
56+MIT