webhook

package
v0.0.0-...-5ed4770 Latest Latest
Warning

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

Go to latest
Published: Jun 30, 2026 License: MIT Imports: 18 Imported by: 0

Documentation

Overview

Package webhook provides webhook delivery, dead letter management, and REST API.

Index

Constants

View Source
const XSequifySignatureHeader = "X-Sequify-Signature"

XSequifySignatureHeader is the HTTP header name for HMAC-SHA256 webhook signatures.

Variables

View Source
var ErrDeadLetterNotFound = errors.New("webhook dead letter not found")

ErrDeadLetterNotFound is returned when a dead letter record does not exist.

Functions

This section is empty.

Types

type Consumer

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

Consumer handles webhook task delivery via HTTP POST.

func NewConsumer

func NewConsumer(store Store, timeout time.Duration, signingSecret string) *Consumer

NewConsumer creates a new webhook consumer. store is used for dead letter write on final failure (via ErrorHandler, not here). timeout is the HTTP request timeout. signingSecret is used for HMAC-SHA256 signatures (empty means no signature).

The HTTP client uses a custom Transport that re-validates DNS resolution at dial time to prevent DNS rebinding attacks (TOCTOU between validate and connect).

func NewConsumerWithSSRFCheck

func NewConsumerWithSSRFCheck(store Store, timeout time.Duration, signingSecret string, skipSSRF bool) *Consumer

NewConsumerWithSSRFCheck creates a webhook consumer with explicit SSRF validation control. If skipSSRF is true, both URL validation and transport-level SSRF checks are bypassed (for testing against localhost only).

func (*Consumer) Handle

func (c *Consumer) Handle(ctx context.Context, data []byte) error

Handle processes a single webhook task. It sends an HTTP POST to the webhook URL and returns an error for non-2xx responses to trigger Asynq retry. Invalid payloads return asynq.SkipRetry to prevent infinite retry.

type Handler

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

Handler provides REST API endpoints for webhook dead letter management.

func NewHandler

func NewHandler(store Store, manager task.Manager, logger *slog.Logger) *Handler

NewHandler creates a new webhook REST handler. If logger is nil, slog.Default() is used.

func (*Handler) Routes

func (h *Handler) Routes() chi.Router

Routes returns a chi router with all webhook endpoints mounted.

type Store

type Store interface {
	CreateDeadLetter(ctx context.Context, dl *model.DeadLetter) error
	GetDeadLetter(ctx context.Context, id string) (*model.DeadLetter, error)
	ListDeadLetters(ctx context.Context, userID string, page, size int) ([]*model.DeadLetter, int64, error)
	DeleteDeadLetter(ctx context.Context, id string) error
	DeleteDeadLetters(ctx context.Context, userID string) (int64, error)
}

Store defines the persistence layer for webhook dead letters, tracking failed webhook delivery attempts for later retry. Implementation: store/gorm package.

Jump to

Keyboard shortcuts

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