Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update crate to match v1.0-beta.1 of p2-core #44

Closed
35 tasks done
bitfl0wer opened this issue Jan 2, 2025 · 2 comments · Fixed by #48
Closed
35 tasks done

Update crate to match v1.0-beta.1 of p2-core #44

bitfl0wer opened this issue Jan 2, 2025 · 2 comments · Fixed by #48
Milestone

Comments

@bitfl0wer
Copy link
Member

bitfl0wer commented Jan 2, 2025

Once v1.0-beta.1 of the protocol specification document (and its complementary API documentation) is released, work should be started to update the polyproto Rust crate to that version of the specification. The base work is already done and we have a solid foundation - things just need to be updated.

For that, I am going to go through each chapter of the protocol definition again and make sure that all aspects I can think of are covered by the crate.

Chapters

  • 1. Terminology used in this document
  • 2. Trust model
  • 3. APIs and underlying communication protocols
  • 3.1 .well-known
  • 3.2 WebSocket Protocol
  • 3.3 Events over REST
  • 3.4 HTTP
  • 3.5 Internet Protocol (IP)
  • 3.6 Compression
  • 4. Federated identity
  • 4.1 Authentication
  • 4.2 Challenge strings
  • 4.3 Protection against misuse by malicious home servers
  • 5. Federation IDs (FIDs)
  • 6. Cryptography and ID-Certs
  • 6.1 Home server signed certificates for public client identity keys (ID-Cert)
  • 6.2 Actor identity keys and message signing
  • 6.3 Private key loss prevention and private key recovery
  • 6.4 Caching of ID-Certs
  • 6.5 Cryptographic specifications
  • 6.6 Best practices
  • 7. Migrations
  • 7.1 Identity migration
  • 7.2 Re-signing messages
  • 7.3 Moving data
  • 7.4 Challenges and trust
  • 8. Protocol extensions (P2 extensions)
  • 8.1 Extension design
  • 8.2 Namespaces
  • 8.3 Officially endorsed extensions
  • 8.4 Versioning and yanking
  • 8.5 Dependencies
  • 8.6 Routes
  • 9. Services
  • 9.1 Discoverability
@bitfl0wer bitfl0wer moved this to Todo in Polyphony Roadmap Jan 2, 2025
@bitfl0wer bitfl0wer changed the title Update crate to match v1.0-alpha.1 of p2-core Update crate to match v1.0-beta.1 of p2-core Jan 11, 2025
@bitfl0wer bitfl0wer added this to the v0.10.0 milestone Jan 28, 2025
@bitfl0wer bitfl0wer mentioned this issue Feb 23, 2025
@bitfl0wer
Copy link
Member Author

bitfl0wer commented Mar 5, 2025

Resume gateway functionality will be missing from the 0.10 release, as will events over REST functionality. Does this mean this crate is teeeeeeeeeeeeeeeeeeeeeeeeeeeechnically non spec-compliant? yes. But everything is still in alpha/beta—things change so often, that this does not matter at all for now.

@bitfl0wer
Copy link
Member Author

Work here is pretty much completed! Lives on the v0.10 branch and will be merged soon.

@github-project-automation github-project-automation bot moved this from Todo to Done in Polyphony Roadmap Mar 5, 2025
bitfl0wer added a commit that referenced this issue Mar 30, 2025
Draft pull request for release v0.10.0 to receive status and coverage
information through GH Actions. Closes #44 and #45

# Release v0.10

The tenth release of the polyproto crate is the biggest one yet. It
touches almost all areas of the source code and brings numerous
improvements, bug fixes and additions.

Most notably, v0.10 has been updated to be almost fully compliant with
Beta 1 of the polyproto specification! All the API routes, types and the
most important behaviors are there and available for you to tinker and
prototype with!

Some more advanced features are missing, though. Notably, v0.10 lacks
`zstd` WebSocket compression support and advanced migrations features,
such as performing and verifying migrations out of the box. Developers
and tinkerers can add this functionality themselves, as all the needed
"parts" for it exist (API routes, verification behaviors, etc.)—there
just isn't one, simple function you can call yet.

Things like these are planned for the v0.11 and v0.12 releases.

## Gateway

This version ships polyproto WebSocket gateway client functionality,
gated behind the `gateway` crate feature. The implementation of this
feature is super backend-agnostic—though, for now, we have sealed the
needed traits, and are only shipping a `tokio-tungstenite` backend for
testing.

The gateway handles establishing a connection to the server, sending
regular heartbeats at the specified interval and responding to Opcode
11—the manual heartbeat request.

Apart from the `Hello` payload, library consumers can easily get access
to all messages received from the gateway by calling `subscribe()` on
the internal `tokio::sync::watch::Sender<GatewayMessage>`. This means
that this crate handles only the bare necessities of connecting to the
gateway, and that you are free to handle incoming messages however you
would like to. Our `GatewayMessage` type is `.into()` and
`From::<>`-compatible with `tokio_tungstenite::tungstenite::Message`, so
that you are not locked into using our types, should you not want that.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

Successfully merging a pull request may close this issue.

1 participant