···77- added `Skyfall::Jetstream::CommitMessage#operation` (aliased as `op`) which returns the (always single) operation in the `operations` array
88- added `#kind` as alias for `#type` in both `Message` classes
99- added a base class for error types, `Skyfall::Error`
1010+- added `#blocks` to `SyncMessage`
10111112Deprecated & removed APIs:
1213···2223- restricted `#inspectable_variables` methods access to either private or protected
2324- relaxed `Stream#build_websocket_url` & `Stream#build_websocket_client` methods access from private to protected
2425- fixed private class method `Skyfall::Firehose::Message.decode_cbor_objects` which wasn't actually private
2626+2727+Optimizations:
2828+2929+- much faster `Skyfall::Firehose::Message#time` parsing on Ruby 3.2+
3030+- lazy decoding of sections in `CarArchive` – saves quite a lot of work if sections are only accessed through `Operation#raw_record`
3131+- added `frozen_string_literal: true` in all files to reduce garbage collection
25322633Additional validations and other changes:
2734···3037- `Message` subclasses raise an error if `.new` is called on a subclass (and not on the base `Message`) passing the data of a wrong kind of message (instead of returning e.g. a `CommitMessage` from `AccountMessage.new` as it worked previously)
3138- made `LabelsMessage` a subclass of `Firehose::Message`
3239- fixed the `require`s config in some files so they can be loaded in any order
3333-- added `frozen_string_literal: true` in all files to reduce garbage collection
344035413642## [0.6.1] - 2026-01-08
···42484349## [0.6.0] - 2025-06-25
44504545-- significantly speeded up reading of events from the binary firehose (`Skyfall::Firehose`) - up to 4-5x faster than before
5151+- significantly speeded up reading of events from the binary firehose (`Skyfall::Firehose`) – up to 4-5x faster than before
4652- removed the `Skyfall::Stream.new` constructor deprecated in 0.5.0
47534854## [0.5.1] - 2025-05-18
···65716672In most cases, you should only need to update the `Skyfall::Stream` class name in the constructor. If you've referenced message classes like `Skyfall::CommitMessage` directly, it's probably better to just check the `#type` property instead.
67736868-Also, small change to the user agent API: `Skyfall::Stream` now has an additional metod `version_string`, which will always return `Skyfall/0.x.y` - it's recommended to use that instead of `default_user_agent` to build your own user agent string that includes the library version. `default_user_agent` now passes through to `version_string`, but it could be changed in future to return something else.
7474+Also, small change to the user agent API: `Skyfall::Stream` now has an additional metod `version_string`, which will always return `Skyfall/0.x.y` – it's recommended to use that instead of `default_user_agent` to build your own user agent string that includes the library version. `default_user_agent` now passes through to `version_string`, but it could be changed in future to return something else.
69757076## [0.4.1] - 2024-10-04
71777272-- performance fix - don't decode CAR sections which aren't needed, which is most of them; this cuts the amount of memory that GC has to free up by about one third, and should speed up processing by around ~10%
7878+- performance fix – don't decode CAR sections which aren't needed, which is most of them; this cuts the amount of memory that GC has to free up by about one third, and should speed up processing by around ~10%
73797480## [0.4.0] - 2024-09-23
7581···8389- added `#account` event type (`AccountMessage`)
8490- added `handle` field to `IdentityMessage`
8591- fixed param validation on `Stream` initialization
8686-- reverted the change that added Ruby stdlib dependencies explicitly to the gemspec, since this causes more problems than it's worth - only `base64` is left there, since it's the one now required to be listed
9292+- reverted the change that added Ruby stdlib dependencies explicitly to the gemspec, since this causes more problems than it's worth – only `base64` is left there, since it's the one now required to be listed
87938894## [0.3.0] - 2024-03-21
89959096- added support for labeller firehose, served by labeller services at the `com.atproto.label.subscribeLabels` endpoint (aliased as `:subscribe_labels`)
9197- the `#labels` messages from the labeller firehose are parsed into a `LabelsMessage`, which includes a `labels` array of `Label` objects
9298- `Stream` callbacks can now also be assigned via setters, e.g. `stream.on_message = proc { ... }`
9393-- added default error handler to `Stream` which logs the error to `$stdout` - set `stream.on_error = nil` to disable
9494-- added Ruby stdlib dependencies explicitly to the gemspec - fixes a warning in Ruby 3.3 when requiring `base64`, which will be extracted as an optional gem in 3.4
9999+- added default error handler to `Stream` which logs the error to `$stdout` – set `stream.on_error = nil` to disable
100100+- added Ruby stdlib dependencies explicitly to the gemspec – fixes a warning in Ruby 3.3 when requiring `base64`, which will be extracted as an optional gem in 3.4
9510196102## [0.2.5] - 2024-03-14
97103···118124119125## [0.2.1] - 2023-08-19
120126121121-- optimized `WebsocketMessage` parsing performance - lazy parsing of most properties (message decoding should be over 50% faster on average)
127127+- optimized `WebsocketMessage` parsing performance – lazy parsing of most properties (message decoding should be over 50% faster on average)
122128- added separate subclasses of `WebsocketMessage` for different message types
123129- added support for `#handle`, `#info` and `#tombstone` message types
124130- `UnknownMessage` is returned for unrecognized message types
···126132## [0.2.0] - 2023-07-24
127133128134- switched the websocket library from `websocket-client-simple` to `faye-websocket`, which should make event parsing up to ~30× faster (!)
129129-- added `auto_reconnect` property to `Stream` (on by default) - if true, it will try to reconnect with an exponential backoff when the websocket disconnects, until you call `Stream#disconnect`
135135+- added `auto_reconnect` property to `Stream` (on by default) – if true, it will try to reconnect with an exponential backoff when the websocket disconnects, until you call `Stream#disconnect`
130136131137Note:
132138133133-- calling `sleep` is no longer needed after connecting - call `connect` on a new thread instead to get previously default behavior of running the event loop asynchronously
139139+- calling `sleep` is no longer needed after connecting – call `connect` on a new thread instead to get previously default behavior of running the event loop asynchronously
134140- the disconnect event no longer passes an error object in the argument
135135-- there is currently no "heartbeat" feature as in 0.1.x that checks for a stuck connection - but it doesn't seem to be needed
141141+- there is currently no "heartbeat" feature as in 0.1.x that checks for a stuck connection – but it doesn't seem to be needed
136142137143## [0.1.3] - 2023-07-04
138144
+1
README.md
···130130- `CommitMessage` (`#commit`) - represents a change in a user's repo; most messages are of this type
131131- `IdentityMessage` (`#identity`) - notifies about a change in user's DID document, e.g. a handle change or a migration to a new PDS
132132- `AccountMessage` (`#account`) - notifies about a change of an account's status (de/activation, suspension, deletion)
133133+- `SyncMessage` (`#sync`) - updates repository state, can be used to trigger account resynchronization
133134- `LabelsMessage` (`#labels`) - only used in `subscribe_labels` endpoint
134135- `InfoMessage` (`#info`) - a protocol error message, e.g. about an invalid cursor parameter
135136- `UnknownMessage` is used for other unrecognized message types