Skip to content

Commit 90bd92a

Browse files
committed
feat(api): support quarantined inbound message processing
1 parent 7399d65 commit 90bd92a

5 files changed

Lines changed: 23 additions & 0 deletions

File tree

‎src/main/java/co/lettermint/api/ApiClient.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ public RescheduleMessageResponse cancel(String messageId) {
145145
return client.post("/messages/" + segment(messageId) + "/cancel", null, RescheduleMessageResponse.class);
146146
}
147147

148+
public ProcessInboundMessageResponse process(String messageId) {
149+
return client.post("/messages/" + segment(messageId) + "/process", null, ProcessInboundMessageResponse.class);
150+
}
151+
148152
public MessageEventsResponse events(String messageId) {
149153
return events(messageId, null);
150154
}

‎src/main/java/co/lettermint/models/api/MessageEventType.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public final class MessageEventType {
2222
public static final String INBOUNDRECEIVED = "inbound_received";
2323
public static final String INBOUNDQUEUED = "inbound_queued";
2424
public static final String INBOUNDSPAMBLOCKED = "inbound_spam_blocked";
25+
public static final String INBOUNDRELEASED = "inbound_released";
2526
public static final String INBOUNDPROCESSED = "inbound_processed";
2627
public static final String INBOUNDRETRY = "inbound_retry";
2728

‎src/main/java/co/lettermint/models/api/MessageStatus.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ public final class MessageStatus {
44
public static final String SCHEDULED = "scheduled";
55
public static final String PENDING = "pending";
66
public static final String QUEUED = "queued";
7+
public static final String QUARANTINED = "quarantined";
78
public static final String SUPPRESSED = "suppressed";
89
public static final String PROCESSED = "processed";
910
public static final String DELIVERED = "delivered";
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package co.lettermint.models.api;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import java.util.Map;
6+
7+
@JsonIgnoreProperties(ignoreUnknown = true)
8+
public class ProcessInboundMessageResponse {
9+
@JsonProperty("data")
10+
public Map<String, Object> data;
11+
}

‎src/test/java/co/lettermint/ApiClientTest.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,15 @@ void schedulesMessageChangesWithTypedResponses() throws Exception {
150150
try (MockWebServer server = new MockWebServer()) {
151151
server.enqueue(new MockResponse().setHeader("Content-Type", "application/json").setBody("{\"message_id\":\"msg/id\",\"status\":\"scheduled\",\"scheduled_at\":\"2026-08-27T09:00:00Z\"}"));
152152
server.enqueue(new MockResponse().setHeader("Content-Type", "application/json").setBody("{\"message_id\":\"msg/id\",\"status\":\"canceled\",\"scheduled_at\":null}"));
153+
server.enqueue(new MockResponse().setHeader("Content-Type", "application/json").setBody("{\"data\":{\"message_id\":\"msg/id\",\"status\":\"queued\",\"webhook_target_count\":1}}"));
153154
server.start();
154155

155156
ApiClient api = Lettermint.api("api-token", server.url("/v1").toString());
156157
co.lettermint.models.api.RescheduleMessageRequest payload = new co.lettermint.models.api.RescheduleMessageRequest();
157158
payload.scheduledAt = "2026-08-27T09:00:00Z";
158159
assertEquals("scheduled", api.messages().reschedule("msg/id", payload).status);
159160
assertEquals("canceled", api.messages().cancel("msg/id").status);
161+
assertEquals("queued", api.messages().process("msg/id").data.get("status"));
160162

161163
RecordedRequest reschedule = server.takeRequest();
162164
assertEquals("PATCH", reschedule.getMethod());
@@ -165,6 +167,9 @@ void schedulesMessageChangesWithTypedResponses() throws Exception {
165167
RecordedRequest cancel = server.takeRequest();
166168
assertEquals("POST", cancel.getMethod());
167169
assertEquals("/v1/messages/msg%2Fid/cancel", cancel.getPath());
170+
RecordedRequest process = server.takeRequest();
171+
assertEquals("POST", process.getMethod());
172+
assertEquals("/v1/messages/msg%2Fid/process", process.getPath());
168173
}
169174
}
170175

@@ -270,6 +275,7 @@ void apiExposesDocumentedOperations() throws Exception {
270275
methods.put("message.show", api.messages().getClass().getMethod("retrieve", String.class));
271276
methods.put("rescheduleMessage", api.messages().getClass().getMethod("reschedule", String.class, co.lettermint.models.api.RescheduleMessageRequest.class));
272277
methods.put("cancelScheduledMessage", api.messages().getClass().getMethod("cancel", String.class));
278+
methods.put("processInboundMessage", api.messages().getClass().getMethod("process", String.class));
273279
methods.put("message.events", api.messages().getClass().getMethod("events", String.class));
274280
methods.put("message.source", api.messages().getClass().getMethod("source", String.class));
275281
methods.put("message.html", api.messages().getClass().getMethod("html", String.class));

0 commit comments

Comments
 (0)