webhook.rb

 1# frozen_string_literal: true
 2
 3require "jennifer"
 4require_relative "message"
 5
 6class Webhook
 7	# @param redis [RedisClient]
 8	def initialize(redis)
 9		@redis = redis
10	end
11
12	INBOUND_TYPES = ["message-received"]
13	OUTBOUND_TYPES = ["message-delivered", "message-failed"]
14
15	include Jennifer.rant(self) {
16		time { iso8601 }
17		type {
18			choose(*(INBOUND_TYPES + OUTBOUND_TYPES))
19		}
20		direction derived_from(:type) { |type|
21			if INBOUND_TYPES.include?(type)
22				"in"
23			elsif OUTBOUND_TYPES.include?(type)
24				"out"
25			else
26				raise "Generated bad webhook type #{type}"
27			end
28		}, transient: true
29		description { string }
30		to { nanpa_phone }
31
32		jid(transient: true) { bare_jid }
33		registered(transient: true) { true }
34		resend_id(transient: true) {
35			"#{sized(13) { string(/[0-9]/) }}-#{range(0, 99)}"
36		}
37		message derived_from(:registered, :jid, :direction, :to) { |registered, jid, direction, to|
38			Message.new(@redis).generate(registered, jid, direction, to)
39		}
40		written_state(transient: true) {
41			SGXbwmsgsv2.instance_variable_set(:@written, [])
42		}
43	}
44end