···1# frozen_string_literal: true
203require_relative '../firehose'
4require_relative 'message'
56module Skyfall
00000000007 class Firehose::SyncMessage < Firehose::Message
0000000000008 def rev
9 @rev ||= @data_object['rev']
0000010 end
11 end
12end
···1# frozen_string_literal: true
23+require_relative '../car_archive'
4require_relative '../firehose'
5require_relative 'message'
67module Skyfall
8+9+ #
10+ # Firehose message which declares the current state of the repository. The message is meant to
11+ # trigger a resynchronization of the repository from a receiving consumer, if the consumer detects
12+ # from the message rev that it must have missed some events from that repository.
13+ #
14+ # The sync message can be emitted by a PDS or relay to force a repair of a broken account state,
15+ # or e.g. when an account is created, migrated or recovered from a CAR backup.
16+ #
17+18 class Firehose::SyncMessage < Firehose::Message
19+20+ #
21+ # @private
22+ # @param type_object [Hash] first decoded CBOR frame with metadata
23+ # @param data_object [Hash] second decoded CBOR frame with payload
24+ # @raise [DecodeError] if the message doesn't include required data
25+ #
26+ def initialize(type_object, data_object)
27+ super
28+ check_if_not_nil 'seq', 'did', 'blocks', 'rev', 'time'
29+ end
30+31 def rev
32 @rev ||= @data_object['rev']
33+ end
34+35+ # @return [Skyfall::CarArchive] commit data in the form of a parsed CAR archive
36+ def blocks
37+ @blocks ||= CarArchive.new(@data_object['blocks'])
38 end
39 end
40end