diff --git a/README.md b/README.md index 7ac4b1e..94fd6bc 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,65 @@ -# Waku Chat POC +# Nim Chat POC -This is a project template for vibe coding with Waku in nim. +This is a technical proof of consuming the [chat_proto](https://github.com/waku-org/chat_proto/tree/base_types?tab=readme-ov-file) in nim. -The project imports Waku, builds dependencies and links the needed libraries, so you can get to hacking. -## Getting Started +## Message Flow -After cloning the repo, initialize the Waku side of the project and run the example code. +To establish a secure conversation, Saro and Raya need to: +1. Exchange key material +2. Agree on a secret key, and location to communicate -`nimble initialize` - Sets up the Waku dependencies -`nimble run` - Runs and example of using Waku Filter. +For this technical proof, recipient identity keys are exchanged out of bound via an invite link. More complex identity systems will be explored in the future. -## Troubleshooting +Key derivation and message framing is defined by Inbox spec -If it doesn't work and your error is not listed below, please open an issue or PR. -//[Placeholder] + ```mermaid +sequenceDiagram + actor S as Saro + participant SI as Saro Inbox + participant C as Convo + participant RI as Raya Inbox + actor R as Raya + + Note over SI,RI: All clients subscribe to their default Inbox + + SI ->> S: Subscribe + RI ->> R: Subscribe + + Note over R: Key Information is exchanged OOB + + Note over S: Conversation is created + C ->> S : Subscribe + S ->> RI : Send Invite `I1` + S ->> C : Send Message `M1` + + RI --) R : Recv `I1` + Note over R: Conversation is joined + C ->> R : Subscribe + C --) R: Recv `M1` + + R ->> C: Send M2 + C -->> S: Recv M2 + ``` + +## Running + + + +``` +# Run the default binary +nimble run +``` + + +## Limitations + +1. `.proto` files are included in this repo due to complications in importing nested packages using `?subdir=`. Once resolved there will be a single definition of protocol types. +1. Currently messages are not sent over the wire. They are simulated using a `TransportMessage`. + + +## License + +[MIT](https://choosealicense.com/licenses/mit/) \ No newline at end of file