notification

package
v0.16.0 Latest Latest
Warning

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

Go to latest
Published: May 7, 2026 License: AGPL-3.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const (
	NotificationKindEvidenceDigest          = Kind(notificationNameEvidenceDigest)
	NotificationKindWorkflowExecutionFailed = Kind(notificationNameWorkflowExecutionFailed)

	SystemNotificationNameEvidenceDigest          = notificationNameEvidenceDigest
	SystemNotificationNameTaskAvailable           = notificationNameTaskAvailable
	SystemNotificationNameTaskDailyDigest         = notificationNameTaskDailyDigest
	SystemNotificationNameRiskNotifications       = notificationNameRiskNotifications
	SystemNotificationNameWorkflowExecutionFailed = notificationNameWorkflowExecutionFailed

	SubscriptionGateUngated = ""

	SubscriptionGateEvidenceDigest    = notificationNameEvidenceDigest
	SubscriptionGateTaskAvailable     = notificationNameTaskAvailable
	SubscriptionGateTaskDailyDigest   = notificationNameTaskDailyDigest
	SubscriptionGateRiskNotifications = notificationNameRiskNotifications

	SubscriptionGateEvidenceDigestWire    = "evidenceDigest"
	SubscriptionGateTaskAvailableWire     = "taskAvailable"
	SubscriptionGateTaskDailyDigestWire   = "taskDailyDigest"
	SubscriptionGateRiskNotificationsWire = "riskNotifications"
)
View Source
const (
	DeliveryChannelEmail = "email"
	DeliveryChannelSlack = "slack"
)

Variables

View Source
var (
	ErrInvalidRequest                 = errors.New("invalid notification request")
	ErrInvalidAudience                = errors.New("invalid notification audience")
	ErrInvalidTarget                  = errors.New("invalid notification target")
	ErrInvalidContent                 = errors.New("invalid notification content")
	ErrUnsupportedChannel             = errors.New("unsupported notification channel")
	ErrDefinitionNotFound             = errors.New("notification definition not found")
	ErrResolverNotConfigured          = errors.New("notification resolver is not configured")
	ErrRegistryNotConfigured          = errors.New("notification registry is not configured")
	ErrTransportNotConfigured         = errors.New("notification transport is not configured")
	ErrConfiguredDestinationNotFound  = errors.New("configured notification destination not found")
	ErrMissingSubscriptionGate        = errors.New("notification definition requires a subscription gate for user audiences")
	ErrUngatedUserListingNotSupported = errors.New("notification user repository does not support ungated audience listing")
)

Functions

func NormalizeDeliveryChannel

func NormalizeDeliveryChannel(channel string) (string, bool)

NormalizeDeliveryChannel canonicalizes a channel name and verifies support.

func NormalizeDeliveryChannels

func NormalizeDeliveryChannels(channels []string) (normalized []string, invalid []string)

NormalizeDeliveryChannels canonicalizes channels and returns unsupported values separately.

func NormalizeSubscriptionGate added in v0.16.0

func NormalizeSubscriptionGate(subscriptionGate string) (string, bool)

NormalizeSubscriptionGate canonicalizes a subscription gate and verifies support.

func NormalizeSystemNotificationName added in v0.16.0

func NormalizeSystemNotificationName(notificationName string) (string, bool)

NormalizeSystemNotificationName canonicalizes a system notification name and verifies support.

func SystemNotificationNames added in v0.16.0

func SystemNotificationNames() []string

func WireSubscriptionGate added in v0.16.0

func WireSubscriptionGate(subscriptionGate string) (string, bool)

WireSubscriptionGate returns camelCase for a supported subscription gate.

Types

type ActiveUserRepository added in v0.16.0

type ActiveUserRepository interface {
	ListActiveUsers(ctx context.Context) ([]User, error)
}

type Audience added in v0.16.0

type Audience struct {
	User                  *UserAudience
	Direct                *DirectAudience
	ConfiguredDestination *ConfiguredDestinationAudience
}

func (Audience) Validate added in v0.16.0

func (a Audience) Validate() error

type ChannelRenderer added in v0.16.0

type ChannelRenderer func(ctx context.Context, model any) (Content, error)

func ProviderRenderer added in v0.16.0

func ProviderRenderer(provider string, renderer func(ctx context.Context, model any) (any, error)) ChannelRenderer

type ConfiguredDestination added in v0.16.0

type ConfiguredDestination struct {
	Provider string
	Address  map[string]string
}

func (ConfiguredDestination) Validate added in v0.16.0

func (d ConfiguredDestination) Validate() error

type ConfiguredDestinationAudience added in v0.16.0

type ConfiguredDestinationAudience struct {
	Key string
}

type ConfiguredDestinationResolver added in v0.16.0

type ConfiguredDestinationResolver interface {
	ResolveConfiguredDestination(ctx context.Context, key string) (ConfiguredDestination, error)
}

type Content added in v0.16.0

type Content struct {
	Provider string
	Payload  any
}

func (Content) Clone added in v0.16.0

func (c Content) Clone() Content

func (Content) Validate added in v0.16.0

func (c Content) Validate() error

type Definition added in v0.16.0

type Definition struct {
	Kind              Kind
	SubscriptionGate  string
	SupportedChannels []string
	Renderers         map[string]ChannelRenderer
}

func NewDefinition added in v0.16.0

func NewDefinition(kind Kind, subscriptionGate string, bindings ...RendererBinding) Definition

func (Definition) SupportsChannel added in v0.16.0

func (d Definition) SupportsChannel(channel string) bool

func (Definition) Validate added in v0.16.0

func (d Definition) Validate() error

type Delivery added in v0.16.0

type Delivery struct {
	Provider string
	Target   Target
	Content  Content
	Metadata TransportMetadata
}

func (Delivery) Validate added in v0.16.0

func (d Delivery) Validate() error

type DeliveryTransport added in v0.16.0

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

func NewDeliveryTransport added in v0.16.0

func NewDeliveryTransport(opts ...DeliveryTransportOption) *DeliveryTransport

func (*DeliveryTransport) Enqueue added in v0.16.0

func (t *DeliveryTransport) Enqueue(ctx context.Context, deliveries []Delivery) error

func (*DeliveryTransport) Provider added in v0.16.0

func (t *DeliveryTransport) Provider(providerID string) (Provider, bool)

func (*DeliveryTransport) ProviderIDs added in v0.16.0

func (t *DeliveryTransport) ProviderIDs() []string

func (*DeliveryTransport) Providers added in v0.16.0

func (t *DeliveryTransport) Providers() []ProviderMetadata

type DeliveryTransportOption added in v0.16.0

type DeliveryTransportOption func(*DeliveryTransport)

func WithProvider added in v0.16.0

func WithProvider(provider Provider) DeliveryTransportOption

func WithProviders added in v0.16.0

func WithProviders(providers ...Provider) DeliveryTransportOption

type DirectAudience added in v0.16.0

type DirectAudience struct {
	Provider string
	Address  map[string]string
}

type DispatchOptions added in v0.16.0

type DispatchOptions struct {
	RequestedChannel string
	CorrelationID    string
	SourceJobKind    string
	SourceJobID      string
}

func (DispatchOptions) Validate added in v0.16.0

func (o DispatchOptions) Validate() error

type FanoutRequest added in v0.16.0

type FanoutRequest struct {
	Requests        []Request
	SubscribedUsers []SubscribedUsersRequest
}

func (FanoutRequest) Validate added in v0.16.0

func (r FanoutRequest) Validate() error

type GORMConfiguredDestinationResolver added in v0.16.0

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

func NewGORMConfiguredDestinationResolver added in v0.16.0

func NewGORMConfiguredDestinationResolver(db *gorm.DB) *GORMConfiguredDestinationResolver

func (*GORMConfiguredDestinationResolver) ResolveConfiguredDestination added in v0.16.0

func (r *GORMConfiguredDestinationResolver) ResolveConfiguredDestination(ctx context.Context, key string) (ConfiguredDestination, error)

type GORMSystemDestinationRepository added in v0.16.0

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

func NewGORMSystemDestinationRepository added in v0.16.0

func NewGORMSystemDestinationRepository(db *gorm.DB, providers ProviderLookup) *GORMSystemDestinationRepository

func (*GORMSystemDestinationRepository) ListTargetsBySubscriptionGate added in v0.16.0

func (r *GORMSystemDestinationRepository) ListTargetsBySubscriptionGate(ctx context.Context, subscriptionGate string) ([]Target, error)

func (*GORMSystemDestinationRepository) ListTargetsBySystemNotificationName added in v0.16.0

func (r *GORMSystemDestinationRepository) ListTargetsBySystemNotificationName(ctx context.Context, notificationName string) ([]Target, error)

type GORMUserRepository added in v0.16.0

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

func NewGORMUserRepository added in v0.16.0

func NewGORMUserRepository(db *gorm.DB) *GORMUserRepository

func (*GORMUserRepository) FindUserByID added in v0.16.0

func (r *GORMUserRepository) FindUserByID(ctx context.Context, userID string) (User, error)

func (*GORMUserRepository) ListActiveUserIDsBySubscriptionGate added in v0.16.0

func (r *GORMUserRepository) ListActiveUserIDsBySubscriptionGate(ctx context.Context, subscriptionGate string) ([]string, error)

ListActiveUserIDsBySubscriptionGate returns IDs for active, unlocked users subscribed to the given subscription gate on at least one valid channel.

func (*GORMUserRepository) ListActiveUsers added in v0.16.0

func (r *GORMUserRepository) ListActiveUsers(ctx context.Context) ([]User, error)

func (*GORMUserRepository) ListActiveUsersBySubscriptionGate added in v0.16.0

func (r *GORMUserRepository) ListActiveUsersBySubscriptionGate(ctx context.Context, subscriptionGate string) ([]User, error)

type Kind added in v0.16.0

type Kind string

type NotImplementedProvider added in v0.16.0

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

func (*NotImplementedProvider) Deliver added in v0.16.0

func (*NotImplementedProvider) ID added in v0.16.0

func (*NotImplementedProvider) ResolveUserTarget added in v0.16.0

func (p *NotImplementedProvider) ResolveUserTarget(_ User) (Target, bool, error)

func (*NotImplementedProvider) ValidateTarget added in v0.16.0

func (p *NotImplementedProvider) ValidateTarget(_ Target) error

type Provider added in v0.16.0

type Provider interface {
	ID() string
	ResolveUserTarget(user User) (Target, bool, error)
	ValidateTarget(target Target) error
	Deliver(ctx context.Context, delivery Delivery) error
}

type ProviderCatalog added in v0.16.0

type ProviderCatalog interface {
	ProviderIDs() []string
	Providers() []ProviderMetadata
}

type ProviderLookup added in v0.16.0

type ProviderLookup interface {
	Provider(providerID string) (Provider, bool)
}

type ProviderMetadata added in v0.16.0

type ProviderMetadata struct {
	ProviderType string
	DisplayName  string
	Description  string
	Enabled      bool
	Metadata     map[string]string
}

type ProviderMetadataProvider added in v0.16.0

type ProviderMetadataProvider interface {
	ProviderMetadata() ProviderMetadata
}

type Registry added in v0.16.0

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

func MustNewRegistry added in v0.16.0

func MustNewRegistry(definitions ...Definition) *Registry

func NewRegistry added in v0.16.0

func NewRegistry(definitions ...Definition) (*Registry, error)

func (*Registry) Definition added in v0.16.0

func (r *Registry) Definition(kind Kind) (Definition, bool)

func (*Registry) Kinds added in v0.16.0

func (r *Registry) Kinds() []Kind

func (*Registry) Register added in v0.16.0

func (r *Registry) Register(definition Definition) error

type RendererBinding added in v0.16.0

type RendererBinding struct {
	Provider string
	Renderer ChannelRenderer
}

func BindRenderer added in v0.16.0

func BindRenderer(provider string, renderer ChannelRenderer) RendererBinding

type Request added in v0.16.0

type Request struct {
	Kind      Kind
	Audiences []Audience
	Model     any
	Options   DispatchOptions
}

func (Request) Validate added in v0.16.0

func (r Request) Validate() error

type Resolver added in v0.16.0

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

func NewResolver added in v0.16.0

func NewResolver(users UserRepository, configuredDestinations ConfiguredDestinationResolver, providers ProviderLookup) *Resolver

func (*Resolver) ListSubscribedUsers added in v0.16.0

func (r *Resolver) ListSubscribedUsers(ctx context.Context, definition Definition) ([]User, error)

func (*Resolver) Resolve added in v0.16.0

func (r *Resolver) Resolve(ctx context.Context, request Request, definition Definition) ([]Target, error)

func (*Resolver) ResolveUser added in v0.16.0

func (r *Resolver) ResolveUser(user User, options DispatchOptions, definition Definition) ([]Target, error)

type Runtime added in v0.16.0

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

func MustNewRuntime added in v0.16.0

func MustNewRuntime(
	transport Transport,
	users UserRepository,
	configuredDestinations ConfiguredDestinationResolver,
	opts ...ServiceOption,
) *Runtime

func NewRuntime added in v0.16.0

func NewRuntime(
	transport Transport,
	users UserRepository,
	configuredDestinations ConfiguredDestinationResolver,
	opts ...ServiceOption,
) (*Runtime, error)

func (*Runtime) MustRegister added in v0.16.0

func (r *Runtime) MustRegister(definitions ...Definition)

func (*Runtime) Register added in v0.16.0

func (r *Runtime) Register(definitions ...Definition) error

func (*Runtime) Registry added in v0.16.0

func (r *Runtime) Registry() *Registry

func (*Runtime) Resolver added in v0.16.0

func (r *Runtime) Resolver() *Resolver

func (*Runtime) Service added in v0.16.0

func (r *Runtime) Service() *Service

type RuntimeFactory added in v0.16.0

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

func NewRuntimeFactory added in v0.16.0

func NewRuntimeFactory(
	transport Transport,
	configuredDestinations ConfiguredDestinationResolver,
	opts ...ServiceOption,
) *RuntimeFactory

func (*RuntimeFactory) MustNewRuntime added in v0.16.0

func (f *RuntimeFactory) MustNewRuntime(users UserRepository, definitions ...Definition) *Runtime

func (*RuntimeFactory) MustNewService added in v0.16.0

func (f *RuntimeFactory) MustNewService(users UserRepository, definitions ...Definition) *Service

func (*RuntimeFactory) NewRuntime added in v0.16.0

func (f *RuntimeFactory) NewRuntime(users UserRepository, definitions ...Definition) (*Runtime, error)

func (*RuntimeFactory) NewService added in v0.16.0

func (f *RuntimeFactory) NewService(users UserRepository, definitions ...Definition) (*Service, error)

type RuntimeProvider added in v0.16.0

type RuntimeProvider interface {
	NewRuntimeFactory(configuredDestinations ConfiguredDestinationResolver) *RuntimeFactory
}

RuntimeProvider builds scoped runtime factories from shared runtime composition. The configured destination resolver can vary by caller while the provider keeps transport and default service options centralized at bootstrap.

func NewStaticRuntimeProvider added in v0.16.0

func NewStaticRuntimeProvider(transport Transport, opts ...ServiceOption) RuntimeProvider

NewStaticRuntimeProvider returns a RuntimeProvider backed by a fixed transport and service options. Callers provide configured-destination resolution per scope.

type Service added in v0.16.0

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

func NewService added in v0.16.0

func NewService(transport Transport, registry *Registry, resolver *Resolver, opts ...ServiceOption) *Service

func (*Service) Dispatch added in v0.16.0

func (s *Service) Dispatch(ctx context.Context, request Request) error

func (*Service) DispatchFanout added in v0.16.0

func (s *Service) DispatchFanout(ctx context.Context, request FanoutRequest) error

func (*Service) Resolve added in v0.16.0

func (s *Service) Resolve(ctx context.Context, request Request) ([]Target, Definition, error)

type ServiceOption added in v0.16.0

type ServiceOption func(*Service)

type SubscribedUsersRequest added in v0.16.0

type SubscribedUsersRequest struct {
	Kind       Kind
	Model      any
	BuildModel UserModelBuilder
	Options    DispatchOptions
}

func (SubscribedUsersRequest) Validate added in v0.16.0

func (r SubscribedUsersRequest) Validate() error

type SystemDestinationRepository added in v0.16.0

type SystemDestinationRepository interface {
	ListTargetsBySubscriptionGate(ctx context.Context, subscriptionGate string) ([]Target, error)
	ListTargetsBySystemNotificationName(ctx context.Context, notificationName string) ([]Target, error)
}

type Target added in v0.16.0

type Target struct {
	Provider string
	UserID   string
	Address  map[string]string
}

func (Target) Attribute added in v0.16.0

func (t Target) Attribute(key string) (string, bool)

func (Target) Validate added in v0.16.0

func (t Target) Validate() error

type TargetConfigurator added in v0.16.0

type TargetConfigurator interface {
	BuildTarget(rawTarget string) (Target, error)
	NormalizeTarget(target Target) (Target, error)
	DisplayTarget(target Target) (string, error)
}

TargetConfigurator extends a delivery provider with target parsing, normalization, and display helpers used by admin/system configuration flows.

func LookupTargetConfigurator added in v0.16.0

func LookupTargetConfigurator(lookup ProviderLookup, providerID string) (TargetConfigurator, bool)

type Transport added in v0.16.0

type Transport interface {
	Enqueue(ctx context.Context, deliveries []Delivery) error
}

type TransportMetadata added in v0.16.0

type TransportMetadata struct {
	NotificationKind Kind
	Provider         string
	Channel          string
	RecipientUserID  string
	Target           string
	CorrelationID    string
	SourceJobKind    string
	SourceJobID      string
}

type User added in v0.16.0

type User struct {
	ID            string
	Email         string
	FirstName     string
	LastName      string
	Identities    map[string]map[string]string
	Subscriptions []UserSubscription
}

func (User) FullName added in v0.16.0

func (u User) FullName() string

func (User) NotificationChannels added in v0.16.0

func (u User) NotificationChannels(subscriptionGate string) []string

type UserAudience added in v0.16.0

type UserAudience struct {
	UserID string
}

type UserModelBuilder added in v0.16.0

type UserModelBuilder func(ctx context.Context, user User) (any, error)

type UserRepository added in v0.16.0

type UserRepository interface {
	FindUserByID(ctx context.Context, userID string) (User, error)
	ListActiveUsersBySubscriptionGate(ctx context.Context, subscriptionGate string) ([]User, error)
}

type UserSubscription added in v0.16.0

type UserSubscription struct {
	NotificationType string
	Channels         []string
}

type WorkerEnqueuer added in v0.16.0

type WorkerEnqueuer interface {
	IsStarted() bool
}

type WorkerEnqueuerProvider added in v0.16.0

type WorkerEnqueuerProvider func() WorkerEnqueuer

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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