From af72d357f5ef1b6b4a0af4348ef82b75354d5e8f Mon Sep 17 00:00:00 2001 From: Bjarn Bronsveld Date: Sat, 5 Sep 2026 13:03:07 +0200 Subject: [PATCH] feat(api): support quarantined inbound message processing --- src/api-surface.spec.ts | 7 +++++++ src/endpoints/api.ts | 4 ++++ src/types.ts | 7 +++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/api-surface.spec.ts b/src/api-surface.spec.ts index 33880e7..19f367d 100644 --- a/src/api-surface.spec.ts +++ b/src/api-surface.spec.ts @@ -141,6 +141,7 @@ describe('public SDK surface', () => { const api = Lettermint.api('api-token'); await api.messages.reschedule('message/id', { scheduled_at: '2026-08-27T09:00:00Z' }); await api.messages.cancel('message/id'); + await api.messages.process('message/id'); expect(mockFetch).toHaveBeenNthCalledWith( 1, @@ -155,6 +156,11 @@ describe('public SDK surface', () => { 'https://api.lettermint.co/v1/messages/message%2Fid/cancel', expect.objectContaining({ method: 'POST' }) ); + expect(mockFetch).toHaveBeenNthCalledWith( + 3, + 'https://api.lettermint.co/v1/messages/message%2Fid/process', + expect.objectContaining({ method: 'POST' }) + ); }); }); @@ -173,6 +179,7 @@ describe('api endpoint coverage', () => { 'message.show': 'messages.retrieve', rescheduleMessage: 'messages.reschedule', cancelScheduledMessage: 'messages.cancel', + processInboundMessage: 'messages.process', 'message.events': 'messages.events', 'message.source': 'messages.source', 'message.html': 'messages.html', diff --git a/src/endpoints/api.ts b/src/endpoints/api.ts index 0651545..c04656b 100644 --- a/src/endpoints/api.ts +++ b/src/endpoints/api.ts @@ -61,6 +61,10 @@ export class MessagesEndpoint extends Endpoint { return this.httpClient.post(`/messages/${this.pathSegment(messageId)}/cancel`); } + public process(messageId: string): Promise { + return this.httpClient.post(`/messages/${this.pathSegment(messageId)}/process`); + } + public events(messageId: string): Promise { return this.httpClient.get(`/messages/${this.pathSegment(messageId)}/events`); } diff --git a/src/types.ts b/src/types.ts index c62f782..4049259 100644 --- a/src/types.ts +++ b/src/types.ts @@ -2,7 +2,7 @@ // biome-ignore-all lint: generated OpenAPI types use schema-shaped names. // This file is generated by sdk-generator/node/generate-types.mjs. -export type MessageStatus = "scheduled" | "pending" | "queued" | "suppressed" | "processed" | "delivered" | "opened" | "clicked" | "soft_bounced" | "hard_bounced" | "spam_complaint" | "failed" | "blocked" | "policy_rejected" | "unsubscribed" | "canceled"; +export type MessageStatus = "scheduled" | "pending" | "queued" | "quarantined" | "suppressed" | "processed" | "delivered" | "opened" | "clicked" | "soft_bounced" | "hard_bounced" | "spam_complaint" | "failed" | "blocked" | "policy_rejected" | "unsubscribed" | "canceled"; export interface SendMailRequest { "route"?: string; @@ -176,7 +176,7 @@ export interface MessageEventData { "timestamp": string; } -export type MessageEventType = "scheduled" | "rescheduled" | "canceled" | "released" | "queued" | "processed" | "suppressed" | "delivered" | "auto_replied" | "soft_bounced" | "hard_bounced" | "spam_complaint" | "failed" | "blocked" | "policy_rejected" | "unsubscribed" | "opened" | "clicked" | "inbound_received" | "inbound_queued" | "inbound_spam_blocked" | "inbound_processed" | "inbound_retry"; +export type MessageEventType = "scheduled" | "rescheduled" | "canceled" | "released" | "queued" | "processed" | "suppressed" | "delivered" | "auto_replied" | "soft_bounced" | "hard_bounced" | "spam_complaint" | "failed" | "blocked" | "policy_rejected" | "unsubscribed" | "opened" | "clicked" | "inbound_received" | "inbound_queued" | "inbound_spam_blocked" | "inbound_released" | "inbound_processed" | "inbound_retry"; export interface MessageListData { "id": string; @@ -702,6 +702,9 @@ export type MessageEventsResponse = { "prev_cursor_url": string | null; }; }; +export type ProcessInboundMessageResponse = { + "data": { "message_id": string; "status": "queued"; "webhook_target_count": number; }; +}; export type ProjectIndexResponse = { "data": ProjectListData[]; "path": string | null;