From ba505d037a06211869ef1363a5dbe56e3f2d1fde Mon Sep 17 00:00:00 2001 From: dielduarte Date: Mon, 10 Aug 2026 15:43:34 -0300 Subject: [PATCH] feat: add broadcasts.Cancel() method Cancels a queued or scheduled broadcast via POST /broadcasts/:id/cancel. Mirrors emails.Cancel()'s shape (no body, id-only). Co-Authored-By: Claude Sonnet 5 --- broadcasts.go | 37 +++++++++++++++++++++++++++++++++++++ broadcasts_test.go | 26 ++++++++++++++++++++++++++ errors.go | 1 + 3 files changed, 64 insertions(+) diff --git a/broadcasts.go b/broadcasts.go index 7472c6b..c0385f8 100644 --- a/broadcasts.go +++ b/broadcasts.go @@ -57,6 +57,11 @@ type SendBroadcastResponse struct { Id string `json:"id"` } +type CancelBroadcastResponse struct { + Object string `json:"object"` + Id string `json:"id"` +} + type RemoveBroadcastResponse struct { Object string `json:"object"` Id string `json:"id"` @@ -104,6 +109,9 @@ type BroadcastsSvc interface { SendWithContext(ctx context.Context, params *SendBroadcastRequest) (SendBroadcastResponse, error) Send(params *SendBroadcastRequest) (SendBroadcastResponse, error) + CancelWithContext(ctx context.Context, broadcastId string) (CancelBroadcastResponse, error) + Cancel(broadcastId string) (CancelBroadcastResponse, error) + RemoveWithContext(ctx context.Context, broadcastId string) (RemoveBroadcastResponse, error) Remove(broadcastId string) (RemoveBroadcastResponse, error) } @@ -251,6 +259,35 @@ func (s *BroadcastsSvcImpl) Send(params *SendBroadcastRequest) (SendBroadcastRes return s.SendWithContext(context.Background(), params) } +func (s *BroadcastsSvcImpl) CancelWithContext(ctx context.Context, broadcastId string) (CancelBroadcastResponse, error) { + if broadcastId == "" { + return CancelBroadcastResponse{}, errors.New("[ERROR]: broadcastId cannot be empty") + } + + path := "broadcasts/" + broadcastId + "/cancel" + + // Prepare request + req, err := s.client.NewRequest(ctx, http.MethodPost, path, nil) + if err != nil { + return CancelBroadcastResponse{}, ErrFailedToCreateBroadcastCancelRequest + } + + resp := new(CancelBroadcastResponse) + + // Send Request + _, err = s.client.Perform(req, resp) + + if err != nil { + return CancelBroadcastResponse{}, err + } + + return *resp, nil +} + +func (s *BroadcastsSvcImpl) Cancel(broadcastId string) (CancelBroadcastResponse, error) { + return s.CancelWithContext(context.Background(), broadcastId) +} + // RemoveWithContext removes a given broadcast by id // https://resend.com/docs/api-reference/broadcasts/delete-broadcast func (s *BroadcastsSvcImpl) RemoveWithContext(ctx context.Context, broadcastId string) (RemoveBroadcastResponse, error) { diff --git a/broadcasts_test.go b/broadcasts_test.go index f16937c..a97689b 100644 --- a/broadcasts_test.go +++ b/broadcasts_test.go @@ -299,6 +299,32 @@ func TestRemoveBroadcast(t *testing.T) { assert.Equal(t, deleted.Object, "broadcast") } +func TestCancelBroadcast(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/broadcasts/b6d24b8e-af0b-4c3c-be0c-359bbd97381e/cancel", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, http.MethodPost) + w.WriteHeader(http.StatusOK) + + var ret any + ret = ` + { + "object": "broadcast", + "id": "b6d24b8e-af0b-4c3c-be0c-359bbd97381e" + }` + + fmt.Fprint(w, ret) + }) + + canceled, err := client.Broadcasts.Cancel("b6d24b8e-af0b-4c3c-be0c-359bbd97381e") + if err != nil { + t.Errorf("Broadcasts.Cancel returned error: %v", err) + } + assert.Equal(t, canceled.Id, "b6d24b8e-af0b-4c3c-be0c-359bbd97381e") + assert.Equal(t, canceled.Object, "broadcast") +} + func TestListBroadcasts(t *testing.T) { setup() defer teardown() diff --git a/errors.go b/errors.go index c145a98..c33be75 100644 --- a/errors.go +++ b/errors.go @@ -51,6 +51,7 @@ var ( ErrFailedToCreateBroadcastUpdateRequest = errors.New("[ERROR]: Failed to create Broadcasts.Update request") ErrFailedToCreateBroadcastSendRequest = errors.New("[ERROR]: Failed to create Broadcasts.Send request") ErrFailedToCreateBroadcastCreateRequest = errors.New("[ERROR]: Failed to create Broadcasts.Create request") + ErrFailedToCreateBroadcastCancelRequest = errors.New("[ERROR]: Failed to create Broadcasts.Cancel request") ) // ApiKeySvc errors