1# frozen_string_literal: true
2
3require_relative "message_event"
4
5module EventEmitter
6 # @param owner_jid [Blather::JID]
7 def jid_to_owner(owner_jid)
8 REGISTRATION_REPO.find(owner_jid).then { |(tel, *rest)|
9 unless MessageEvent::NanpaTel.match?(tel)
10 log.warn(
11 "Skipping incoming message event: no valid owner mapping",
12 jid: owner_jid.to_s, owner: tel.to_s
13 )
14 next
15 end
16 yield [tel, *rest] if block_given?
17 }
18 end
19
20 def emit_incoming_event(
21 owner_jid,
22 from:, body:, endstream_id:, media_urls: []
23 )
24 jid_to_owner(owner_jid) { |(tel, *)|
25 MessageEvent::In.new(
26 owner: tel, from: from, to: [tel], body: body.to_s,
27 endstream_id: endstream_id, media_urls: media_urls
28 ).emit(REDIS)
29 }.catch do |e|
30 log.warn("Failed to emit incoming message event", error: e.message)
31 end
32 end
33
34 def emit_failed_event(endstream_id:, error_code:, error_description:)
35 MessageEvent::Failed.new(
36 endstream_id: endstream_id,
37 error_code: error_code,
38 error_description: error_description
39 ).emit(REDIS)
40 end
41
42 def emit_outgoing_event(
43 owner_jid,
44 to:, body:, stanza_id:, media_urls: []
45 )
46 jid_to_owner(owner_jid) { |(owner, *)|
47 MessageEvent::Out.new(
48 owner: owner, from: owner, to: to, body: body.to_s,
49 stanza_id: stanza_id.to_s,
50 media_urls: media_urls
51 ).emit(REDIS)
52 }.catch do |e|
53 log.warn("Failed to emit outgoing message event", error: e.message)
54 end
55 end
56end