refactor: define system-wide Event types and use in homeserver and SDK#302
refactor: define system-wide Event types and use in homeserver and SDK#30286667 wants to merge 6 commits intosdk_version_0.7.0from
Conversation
061d89d to
5df5d11
Compare
c16587c to
bf09632
Compare
There was a problem hiding this comment.
Pull request overview
This PR refactors the event streaming system to consolidate event types (EventType and EventCursor) from individual implementations in the homeserver and SDK into a shared pubky-common module. The refactoring also improves type safety by replacing string-based content hashes with proper Hash objects and base64 encoding for transport.
Changes:
- Created new
pubky-common/src/events.rsmodule definingEventType(enum withPut { content_hash: Hash }andDeletevariants) andEventCursortypes - Updated SDK and homeserver to use the shared types from
pubky-common::events - Modified WASM bindings to wrap the Rust enum in a struct-based API that works with JavaScript
- Updated all tests and examples to use the new API
Reviewed changes
Copilot reviewed 11 out of 12 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
pubky-common/src/events.rs |
New shared module defining EventType enum and EventCursor struct with comprehensive tests |
pubky-common/src/lib.rs |
Export the new events module |
pubky-sdk/src/actors/event_stream.rs |
Refactored to use pubky_common::events types, added base64 decoding for content hashes from SSE, removed duplicate type definitions |
pubky-sdk/bindings/js/src/wrappers/event_stream.rs |
WASM-compatible wrappers for EventType and EventCursor, converting Rust enums to struct-based API with helper methods |
pubky-sdk/bindings/js/pkg/tests/events.ts |
Updated TypeScript tests to use new API methods (isPut(), isDelete(), contentHash()) |
pubky-sdk/bindings/js/Cargo.toml |
Added base64 dependency for WASM bindings |
pubky-homeserver/src/persistence/files/events/*.rs |
Updated to import and use types from pubky_common::events instead of local definitions |
pubky-homeserver/src/persistence/files/events/events_entity.rs |
Fixed duplicate variable declaration bug, uses shared EventType and EventCursor |
examples/rust/7-events_stream/main.rs |
Updated to use new EventType.content_hash() API instead of direct field access |
Cargo.lock |
Added base64 dependency for WASM package |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
dzdidi
left a comment
There was a problem hiding this comment.
Some nits. But I would wait for SDK review from @SHAcollision
SHAcollision
left a comment
There was a problem hiding this comment.
Overall LGTM. I just left a few minor questions.
| EventType::Put => "PUT".to_string(), | ||
| EventType::Delete => "DEL".to_string(), | ||
| } | ||
| pub fn event_type(&self) -> EventType { |
There was a problem hiding this comment.
eventType and cursor changed from string fields to object wrappers, just wondering if this is intentional and we confirmed this results on an ergonomic improvement rather than a hassle for JS devs.
There was a problem hiding this comment.
This is part of the SDK using the types defined in pubky-common to brings consistency across codebases.
There was a problem hiding this comment.
It doesn't answer the question of whether JS consumer should see the complex types or not. I guess it's okay?
There was a problem hiding this comment.
Thanks for calling that out. Ive taken another look and agree that i was thinking too Rusty for JS. Ive removed these more complex types going back to string for cursor and eventType
dff7abe to
680b71b
Compare
2da8472 to
390af98
Compare
a979acf to
789131e
Compare
2cb8e72 to
5bbb8e8
Compare
This should have been like this from initial impl: Api consumer types in
pubky-commonmodule.changes in SDK are due to:
Hashobject instead of usingString