52public record
WebhookPayload(String deliveryId, String eventType, Instant occurredAt, String contentType,
byte[] body,
53 Map<String, List<String>>
headers) {
56 body = body ==
null ?
new byte[0] : body.clone();
68 public static WebhookPayload ofJson(
final String deliveryId,
final String eventType,
final Object value) {
69 return new WebhookPayload(deliveryId, eventType, Instant.now(),
"application/json",
81 public static WebhookPayload ofText(
final String deliveryId,
final String eventType,
final String value) {
82 return new WebhookPayload(deliveryId, eventType, Instant.now(),
"text/plain; charset=utf-8",
83 value ==
null ?
new byte[0] : value.getBytes(StandardCharsets.UTF_8), Map.of());
93 public WebhookPayload withHeader(
final String name,
final String value) {
94 final var copy =
new LinkedHashMap<String, List<String>>();
96 copy.put(name, List.of(value));
97 return new WebhookPayload(deliveryId, eventType, occurredAt, contentType, body, copy);
106 public HttpRequestSpec toRequest(
final URI endpoint) {
107 final var builder = HttpRequestSpec.builder(
HttpMethod.
POST, endpoint).body(body).contentType(contentType);
108 for (
final var entry :
headers.entrySet()) {
109 for (
final var value : entry.getValue()) {
110 builder.header(entry.getKey(), value);
113 return builder.build();
116 private static Map<String, List<String>> normalizeHeaders(
final Map<String, List<String>> raw) {
117 if (raw ==
null || raw.isEmpty()) {
120 final var copy =
new LinkedHashMap<String, List<String>>();
121 for (
final var entry : raw.entrySet()) {
122 copy.put(entry.getKey(), List.copyOf(entry.getValue()));
124 return Map.copyOf(copy);
record WebhookPayload(String deliveryId, String eventType, Instant occurredAt, String contentType, byte[] body, Map< String, List< String > > headers)
Payload de un webhook.