Documentation
¶
Index ¶
- Constants
- Variables
- func NormalizeDeliveryChannel(channel string) (string, bool)
- func NormalizeDeliveryChannels(channels []string) (normalized []string, invalid []string)
- func NormalizeSubscriptionGate(subscriptionGate string) (string, bool)
- func NormalizeSystemNotificationName(notificationName string) (string, bool)
- func SystemNotificationNames() []string
- func WireSubscriptionGate(subscriptionGate 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 GORMConfiguredDestinationResolver
- type GORMSystemDestinationRepository
- type GORMUserRepository
- func (r *GORMUserRepository) FindUserByID(ctx context.Context, userID string) (User, error)
- func (r *GORMUserRepository) ListActiveUserIDsBySubscriptionGate(ctx context.Context, subscriptionGate string) ([]string, error)
- func (r *GORMUserRepository) ListActiveUsers(ctx context.Context) ([]User, error)
- func (r *GORMUserRepository) ListActiveUsersBySubscriptionGate(ctx context.Context, subscriptionGate string) ([]User, error)
- type Kind
- type NotImplementedProvider
- type Provider
- type ProviderCatalog
- type ProviderLookup
- type ProviderMetadata
- type ProviderMetadataProvider
- 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 SystemDestinationRepository
- type Target
- type TargetConfigurator
- type Transport
- type TransportMetadata
- type User
- type UserAudience
- type UserModelBuilder
- type UserRepository
- type UserSubscription
- type WorkerEnqueuer
- type WorkerEnqueuerProvider
Constants ¶
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" )
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") 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 ¶
NormalizeDeliveryChannel canonicalizes a channel name and verifies support.
func NormalizeDeliveryChannels ¶
NormalizeDeliveryChannels canonicalizes channels and returns unsupported values separately.
func NormalizeSubscriptionGate ¶ added in v0.16.0
NormalizeSubscriptionGate canonicalizes a subscription gate and verifies support.
func NormalizeSystemNotificationName ¶ added in v0.16.0
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
WireSubscriptionGate returns camelCase for a supported subscription gate.
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
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
}
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 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 (*GORMSystemDestinationRepository) ListTargetsBySystemNotificationName ¶ added in v0.16.0
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) 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
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 ProviderCatalog ¶ added in v0.16.0
type ProviderCatalog interface {
ProviderIDs() []string
Providers() []ProviderMetadata
}
type ProviderLookup ¶ added in v0.16.0
type ProviderMetadata ¶ added in v0.16.0
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) 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 SystemDestinationRepository ¶ added in v0.16.0
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 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