Module: Igniter::LedgerClient::Envelope

Defined in:
lib/igniter/ledger_client/envelope.rb

Constant Summary collapse

PROTOCOL =
:igniter_store
SCHEMA_VERSION =
1
OPERATIONS =
%i[
  register_descriptor
  write
  append
  write_fact
  read
  query
  resolve
  causation_chain
  lineage
  fact_ref
  metadata_snapshot
  descriptor_snapshot
  observability_snapshot
  sync_hub_profile
  replay
  storage_stats
  segment_manifest
  compaction_activity
].freeze

Class Method Summary collapse

Class Method Details

.generate_request_idObject



66
67
68
# File 'lib/igniter/ledger_client/envelope.rb', line 66

def generate_request_id
  "req_#{SecureRandom.hex(12)}"
end

.normalize(hash) ⇒ Object



62
63
64
# File 'lib/igniter/ledger_client/envelope.rb', line 62

def normalize(hash)
  hash.to_h.transform_keys(&:to_sym)
end

.ok?(response) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/igniter/ledger_client/envelope.rb', line 47

def ok?(response)
  normalize(response)[:status]&.to_sym == :ok
end

.request(operation:, packet: {}, request_id: nil) ⇒ Object

Raises:

  • (ArgumentError)


34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/igniter/ledger_client/envelope.rb', line 34

def request(operation:, packet: {}, request_id: nil)
  operation = operation.to_sym
  raise ArgumentError, "unknown ledger op: #{operation.inspect}" unless OPERATIONS.include?(operation)

  {
    protocol: PROTOCOL,
    schema_version: SCHEMA_VERSION,
    request_id: request_id || generate_request_id,
    op: operation,
    packet: packet || {}
  }
end

.result_or_raise(response) ⇒ Object

Raises:



51
52
53
54
55
56
57
58
59
60
# File 'lib/igniter/ledger_client/envelope.rb', line 51

def result_or_raise(response)
  response = normalize(response)
  return response[:result] if ok?(response)

  raise Error.new(
    response[:error] || "ledger client request failed",
    response: response,
    request_id: response[:request_id]
  )
end