v0.2.0-beta.1 #4
RecurPixel
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
[0.2.0-beta.1] — March 2026
New Packages
RecurPixel.Notify— merged meta-package replacing the separate Core + Orchestrator installRecurPixel.Notify.Email.AzureCommEmailRecurPixel.Notify.Sms.AzureCommSmsRecurPixel.Notify.MattermostRecurPixel.Notify.RocketChatBreaking Changes
TriggerAsyncreturn type — now returnsTriggerResultwithIReadOnlyList<NotifyResult> ChannelResults,AllSucceeded,AnySucceeded, andFailuresfor per-channel inspectionBulkTriggerAsyncreturn type — now returnsBulkTriggerResultwith oneTriggerResultper input contextTriggerResult/BulkTriggerResultmoved to Core — namespace is nowRecurPixel.Notify.Core.ModelsRecurPixel.Notifyis now the primary install (Core + Orchestrator). Users of beta.1 should removeRecurPixel.Notify.CoreandRecurPixel.Notify.Orchestratorand addRecurPixel.NotifyAddRecurPixelNotifyin Core renamed toAddNotifyOptionsto avoid confusion with the Orchestrator overloadInAppOptions.OnDeliverrenamed toUseHandler— aligns with the handler-as-implementation patternNotifyOptions.OnDeliveryandNotifyOptions.InAppremoved; useOrchestratorOptions.OnDeliveryandAddInAppChannelrespectivelyNotificationPayload,NotifyResult,BulkNotifyResult,NotifyContext,NotifyUser) moved fromRecurPixel.Notify.Core.Models→RecurPixel.NotifyINotificationChannel,NotificationChannelBase,ChannelAdapterAttribute) moved fromRecurPixel.Notify.Core.Channels→RecurPixel.Notify.ChannelsNotifyOptions,RetryOptions,FallbackOptions,BulkOptions) moved fromRecurPixel.Notify.Core.Options→RecurPixel.NotifyEmailOptions,SmsOptions,PushOptions,WhatsAppOptions) and all provider credential options moved fromRecurPixel.Notify.Core.Options.*→RecurPixel.Notify.ConfigurationRecurPixel.Notify.Channels(e.g.,SendGridChannel,SlackChannel,TwilioSmsChannel, etc.)INotifyService,NotifyService) moved fromRecurPixel.Notify.Orchestrator.Services→RecurPixel.NotifyServiceCollectionExtensionsmoved fromRecurPixel.Notify.[Channel].[Provider]→RecurPixel.NotifyBug Fixes
"channel:default"IOptions<NotifyOptions>not registered — both rawNotifyOptionsPOCO andIOptions<NotifyOptions>are now registered;ChannelDispatcherreceives the correct optionsConfigureAllKnownOptionsnow maps every provider's credentials from theNotifyOptionsPOCO intoIOptions<TAdapterOptions>at startup; adapters constructed by DI receive real credentials instead of empty defaultsChatIdfallback —TelegramChannelnow falls back toTelegramOptions.ChatIdwhenpayload.Tois empty, with a clear error if neither is setAddSmtpChannel— corrected; the method is not called internally byAddRecurPixelNotifyDX Improvements
AddRecurPixelNotify(Action<NotifyOptions>, Action<OrchestratorOptions>)combines options binding, adapter auto-registration, and orchestrator setup in one callAdd{X}Channel()call required.[ChannelAdapter]attribute drives discovery at startupNotifyOptionsare registered; unconfigured providers have zero DI footprintValidateActiveProvidersthrowsInvalidOperationExceptionat startup whenProvideris set but credentials are missing — never silently at send timeOnDeliverycomposable — multipleOnDelivery/OnDelivery<TService>registrations are additive; all handlers fire in registration orderOnDelivery<TService>scoped resolution — creates a fresh DI scope per call;DbContextand other scoped services are safe to use directly withoutIServiceScopeFactoryAddInAppChannel+UseHandler<TService>— InApp delivery wired via a typed scoped handler;OnDeliveryremains a separate audit hookNotifyServicelogs a warning when a channel is in the event definition but has no payload inNotifyContext.ChannelsResolveAdaptererror — multi-cause diagnostic message when a channel adapter key is not found in DIINotifyServicechannel properties — addedLine,Viber,Mattermost,RocketChatdirect channel propertiesTryAddKeyedSingleton— idempotent; explicitAdd{X}Channel()calls and auto-registration no longer conflictDocumentation
getting-started.md,usage-tiers.md,quick-start.md,features.mdrewritten to reflect current APIexamples.md— Tier 1 (single-channel OTP), Tier 2 (e-commerce), Tier 3 (full SDK), and a production-ready pattern with InApp + OnDelivery + event definitionsOnDelivery<TService>andUseHandler<TService>DI scope behaviour explainedUseChannelskey names documented — logical channel names only ("email","sms"), not provider namesThis discussion was created from the release v0.2.0-beta.1.
Beta Was this translation helpful? Give feedback.
All reactions