webhook

package
v0.0.0-...-dac86b4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 16, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DeadLetterStats

type DeadLetterStats struct {
	Total        int            `json:"total"`
	ByStatus     map[string]int `json:"byStatus"`
	OldestEntry  *time.Time     `json:"oldestEntry,omitempty"`
	NewestEntry  *time.Time     `json:"newestEntry,omitempty"`
	TotalRetries int            `json:"totalRetries"`
}

DeadLetterStats holds aggregate stats for the dead letter store.

type DeadLetterStore

type DeadLetterStore struct {
	// contains filtered or unexported fields
}

DeadLetterStore is an in-memory store for failed webhook deliveries.

func NewDeadLetterStore

func NewDeadLetterStore() *DeadLetterStore

NewDeadLetterStore creates a new empty DeadLetterStore.

func (*DeadLetterStore) Add

func (s *DeadLetterStore) Add(d *Delivery)

Add puts a delivery into the dead letter store.

func (*DeadLetterStore) Count

func (s *DeadLetterStore) Count() int

Count returns the number of entries.

func (*DeadLetterStore) Get

func (s *DeadLetterStore) Get(id string) (*Delivery, bool)

Get retrieves a delivery by ID.

func (*DeadLetterStore) List

func (s *DeadLetterStore) List() []*Delivery

List returns all dead letter entries sorted by creation time (newest first).

func (*DeadLetterStore) Purge

func (s *DeadLetterStore) Purge() int

Purge removes all entries and returns the count removed.

func (*DeadLetterStore) Remove

func (s *DeadLetterStore) Remove(id string) (*Delivery, bool)

Remove removes and returns a delivery from the store.

func (*DeadLetterStore) Stats

func (s *DeadLetterStore) Stats() DeadLetterStats

Stats returns aggregate statistics about dead letter entries.

type Delivery

type Delivery struct {
	ID          string            `json:"id"`
	URL         string            `json:"url"`
	Payload     []byte            `json:"payload"`
	Headers     map[string]string `json:"headers"`
	Status      DeliveryStatus    `json:"status"`
	Attempts    int               `json:"attempts"`
	MaxRetries  int               `json:"maxRetries"`
	LastError   string            `json:"lastError,omitempty"`
	StatusCode  int               `json:"statusCode,omitempty"`
	CreatedAt   time.Time         `json:"createdAt"`
	LastAttempt *time.Time        `json:"lastAttempt,omitempty"`
	DeliveredAt *time.Time        `json:"deliveredAt,omitempty"`
}

Delivery tracks a single webhook delivery attempt.

type DeliveryStatus

type DeliveryStatus string

DeliveryStatus represents the status of a webhook delivery.

const (
	StatusPending    DeliveryStatus = "pending"
	StatusDelivered  DeliveryStatus = "delivered"
	StatusFailed     DeliveryStatus = "failed"
	StatusDeadLetter DeliveryStatus = "dead_letter"
)

type Handler

type Handler struct {
	// contains filtered or unexported fields
}

Handler provides HTTP endpoints for the dead letter dashboard.

func NewHandler

func NewHandler(store *DeadLetterStore, manager *RetryManager) *Handler

NewHandler creates a new webhook HTTP handler.

func (*Handler) RegisterRoutes

func (h *Handler) RegisterRoutes(mux *http.ServeMux)

RegisterRoutes registers webhook API routes on the given mux.

type RetryConfig

type RetryConfig struct {
	MaxRetries        int           `json:"maxRetries" yaml:"maxRetries"`
	InitialBackoff    time.Duration `json:"initialBackoff" yaml:"initialBackoff"`
	MaxBackoff        time.Duration `json:"maxBackoff" yaml:"maxBackoff"`
	BackoffMultiplier float64       `json:"backoffMultiplier" yaml:"backoffMultiplier"`
	JitterFraction    float64       `json:"jitterFraction" yaml:"jitterFraction"`
	Timeout           time.Duration `json:"timeout" yaml:"timeout"`
}

RetryConfig holds configuration for the retry manager.

func DefaultRetryConfig

func DefaultRetryConfig() RetryConfig

DefaultRetryConfig returns a RetryConfig with sensible defaults.

type RetryManager

type RetryManager struct {
	// contains filtered or unexported fields
}

RetryManager handles webhook delivery with configurable exponential backoff and jitter.

func NewRetryManager

func NewRetryManager(config RetryConfig, store *DeadLetterStore) *RetryManager

NewRetryManager creates a new RetryManager with the given config and dead letter store.

func (*RetryManager) Replay

func (rm *RetryManager) Replay(ctx context.Context, id string) (*Delivery, error)

Replay retries a dead-lettered delivery.

func (*RetryManager) Send

func (rm *RetryManager) Send(ctx context.Context, url string, payload []byte, headers map[string]string) (*Delivery, error)

Send delivers a webhook with retry logic. On exhausting retries, the delivery is placed in the dead letter store.

func (*RetryManager) SetClient

func (rm *RetryManager) SetClient(client *http.Client)

SetClient sets a custom HTTP client (useful for testing).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL