27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/legion/trigger.rb', line 27
def process(source_name:, headers:, body_raw:, body:)
adapter = source_for(source_name)
secret = secret_for(source_name)
verified = if secret
adapter.verify_signature(headers: , body_raw: body_raw, secret: secret)
else
false
end
normalized = adapter.normalize(headers: , body: body)
envelope = Envelope.new(**normalized, verified: verified)
return { success: false, reason: :duplicate, delivery_id: envelope.delivery_id } if duplicate?(envelope)
return { success: false, reason: :unverified } if !verified && require_verified?(source_name)
bridge(envelope)
mark_seen(envelope)
{ success: true, correlation_id: envelope.correlation_id, routing_key: envelope.routing_key }
rescue ArgumentError => e
{ success: false, reason: :unknown_source, error: e.message }
rescue StandardError => e
Legion::Logging.error "[Trigger] process failed: #{e.message}" if defined?(Legion::Logging)
dead_letter(source_name, body_raw, e)
{ success: false, reason: :error, error: e.message }
end
|