Documentation
¶
Index ¶
- Constants
- Variables
- func NormalizeDeliveryChannel(channel string) (string, bool)
- func NormalizeDeliveryChannels(channels []string) (normalized []string, invalid []string)
- func NormalizeNotificationType(notificationType string) (string, bool)
- func WireNotificationType(notificationType string) (string, bool)
- type ActiveUserRepository
- type Audience
- type ChannelRenderer
- type ConfiguredDestination
- type ConfiguredDestinationAudience
- type ConfiguredDestinationResolver
- type Content
- type Definition
- type Delivery
- type DeliveryTransport
- type DeliveryTransportOption
- type DirectAudience
- type DispatchOptions
- type FanoutRequest
- type GORMUserRepository
- func (r *GORMUserRepository) FindUserByID(ctx context.Context, userID string) (User, error)
- func (r *GORMUserRepository) ListActiveUserIDsByNotificationType(ctx context.Context, notificationType string) ([]string, error)
- func (r *GORMUserRepository) ListActiveUsers(ctx context.Context) ([]User, error)
- func (r *GORMUserRepository) ListActiveUsersByNotificationType(ctx context.Context, notificationType string) ([]User, error)
- type Kind
- type NotImplementedProvider
- type Provider
- type ProviderLookup
- type Registry
- type RendererBinding
- type Request
- type Resolver
- func (r *Resolver) ListSubscribedUsers(ctx context.Context, definition Definition) ([]User, error)
- func (r *Resolver) Resolve(ctx context.Context, request Request, definition Definition) ([]Target, error)
- func (r *Resolver) ResolveUser(user User, options DispatchOptions, definition Definition) ([]Target, error)
- type Runtime
- type RuntimeFactory
- func (f *RuntimeFactory) MustNewRuntime(users UserRepository, definitions ...Definition) *Runtime
- func (f *RuntimeFactory) MustNewService(users UserRepository, definitions ...Definition) *Service
- func (f *RuntimeFactory) NewRuntime(users UserRepository, definitions ...Definition) (*Runtime, error)
- func (f *RuntimeFactory) NewService(users UserRepository, definitions ...Definition) (*Service, error)
- type RuntimeProvider
- type Service
- type ServiceOption
- type SubscribedUsersRequest
- type Target
- type Transport
- type TransportMetadata
- type User
- type UserAudience
- type UserModelBuilder
- type UserRepository
- type UserSubscription
- type WorkerEnqueuer
- type WorkerEnqueuerProvider
Constants ¶
const ( NotificationTypeUngated = "" NotificationTypeEvidenceDigest = "evidence_digest" NotificationTypeTaskAvailable = "task_available" NotificationTypeTaskDailyDigest = "task_daily_digest" NotificationTypeRiskNotifications = "risk_notifications" NotificationTypeEvidenceDigestWire = "evidenceDigest" NotificationTypeTaskAvailableWire = "taskAvailable" NotificationTypeTaskDailyDigestWire = "taskDailyDigest" NotificationTypeRiskNotificationsWire = "riskNotifications" )
const ( DeliveryChannelEmail = "email" DeliveryChannelSlack = "slack" )
Variables ¶
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") ErrMissingSubscriptionType = errors.New("notification definition requires a subscription type for user audiences") ErrUngatedUserListingNotSupported = errors.New("notification user repository does not support ungated audience listing") )
Functions ¶
func NormalizeDeliveryChannel ¶
NormalizeDeliveryChannel canonicalizes a channel name and verifies support.
func NormalizeDeliveryChannels ¶
NormalizeDeliveryChannels canonicalizes channels and returns unsupported values separately.
func NormalizeNotificationType ¶
NormalizeNotificationType canonicalizes a notification type and verifies support.
func WireNotificationType ¶
WireNotificationType returns camelCase for a supported notification type.
Types ¶
type ActiveUserRepository ¶ added in v0.16.0
type Audience ¶ added in v0.16.0
type Audience struct {
User *UserAudience
Direct *DirectAudience
ConfiguredDestination *ConfiguredDestinationAudience
}
type ChannelRenderer ¶ added in v0.16.0
func ProviderRenderer ¶ added in v0.16.0
type ConfiguredDestination ¶ added in v0.16.0
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 Definition ¶ added in v0.16.0
type Definition struct {
Kind Kind
SubscriptionType string
SupportedChannels []string
Renderers map[string]ChannelRenderer
}
func NewDefinition ¶ added in v0.16.0
func NewDefinition(kind Kind, subscriptionType 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
}
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
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 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 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 (*GORMUserRepository) ListActiveUserIDsByNotificationType ¶
func (r *GORMUserRepository) ListActiveUserIDsByNotificationType(ctx context.Context, notificationType string) ([]string, error)
ListActiveUserIDsByNotificationType returns IDs for active, unlocked users subscribed to the given notification type 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) ListActiveUsersByNotificationType ¶
type NotImplementedProvider ¶ added in v0.16.0
type NotImplementedProvider struct {
// contains filtered or unexported fields
}
func (*NotImplementedProvider) Deliver ¶ added in v0.16.0
func (p *NotImplementedProvider) Deliver(_ context.Context, _ Delivery) error
func (*NotImplementedProvider) ID ¶ added in v0.16.0
func (p *NotImplementedProvider) ID() string
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 ProviderLookup ¶ added in v0.16.0
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) 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
}
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 (*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
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) DispatchFanout ¶ added in v0.16.0
func (s *Service) DispatchFanout(ctx context.Context, request FanoutRequest) 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 TransportMetadata ¶ added in v0.16.0
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) NotificationChannels ¶ added in v0.16.0
type UserAudience ¶ added in v0.16.0
type UserAudience struct {
UserID string
}
type UserModelBuilder ¶ added in v0.16.0
type UserRepository ¶ added in v0.16.0
type UserSubscription ¶ added in v0.16.0
type WorkerEnqueuer ¶ added in v0.16.0
type WorkerEnqueuer interface {
IsStarted() bool
}
type WorkerEnqueuerProvider ¶ added in v0.16.0
type WorkerEnqueuerProvider func() WorkerEnqueuer