Help us shape the future of Go! Take the 2026 Go Developer Survey

webhook

package
v0.86.2 Latest Latest
Warning

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

Go to latest
Published: Oct 4, 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