v0.17.1 - Release
What’s new in Novu 0.17.1?
TL;DR: All you need to know about the latest Novu 0.17.1 release. Multi-provider Integration support, Multi-tenancy support, cookbook, notification center updates and more!
0.17.1 Release Updates
We're excited to unveil the freshest developments in our latest release. Let's plunge right in and uncover what awaits you!
Multi-provider Integration Support (BETA)
Now you can connect multiple providers per channel and make them active. This feature is currently in beta.
We also redesigned the Integrations store page to make it more intuitive in selecting & enabling channel providers.
With this feature, you can now do the following:
Specify the provider you want when triggering notifications. Add the integrationIdentifier
to the overrides
object for the specific channel.
await novu.trigger("<workflow_trigger_id>", {
to: {...},
payload: {...},
overrides: {
email: { integrationIdentifier: 'the identifier"} ,
sms: { integrationIdentifier: 'the identifier"}
}
If you're self-hosting Novu, you'll need to pass the env flag, IS_MULTI_PROVIDER_CONFIGURATION_ENABLED
to all services.
Note: In the nearest future, you will be allowed to select a provider based on a tenant and other execution conditions.
Multi-tenancy Support (BETA)
We've been hard at work building the base flow, API and processes to support multi-tenancy. This feature is currently in beta testing. It will become generally available in the next release.
Delete Provider Credentials API
We have added support to delete a provider credentials via an API endpoint
Remove All Messages In Notification Center Widget & Headless Service
The Notification Center widget allows users to see all notification messages. Before now, you can only delete messages one after the other.
There are a few notable updates:
- We have added a useRemoveAllNotification hook in the React Notification Center widget. You can remove all notifications from a feed or entirely!
- We have also added a
removeAllNotifications
method to the headless service.
Additional Handlebar helpers
We have added a unique
and groupBy
handlebar helpers.
- unique: To remove duplicates in array iteration
{{#each (unique names "name")}}
--<b>{{this}}</b>---
{{/each}}
- groupBy: To group array values by property
{{#each (groupBy names "name")}}
<h1>{{key}}<h1>
{{#each items}}
{{age}}-
{{/each}}
{{/each}}
Notification Feed Page Size Changes (BREAKING CHANGE)
By default, the notification feed page will return 100 notifications and return a hasMore
field if more than 100 notifications exist.
Activity Feed & Subscriber API Changes (BREAKING CHANGE)
The Activity Feed & Subscriber API will no longer return totalCount
. Due to performance optimizations, they will return a hasMore
boolean flag in cases where there are more results to fetch.
listenNotificationReceive in Headless Service.
We have added a new function, listenNotificationRecieve
, to listen to when a new notification comes in!
It can be used to retrieve a new notification in real-time and trigger UI changes.
headlessService.listenNotificationReceive({
listener: (message: IMessage) => {
console.log(JSON.stringify(message));
},
});
Sendchamp SMS Provider Integration
Now, you can use the Sendchamp SMS provider on Novu.
Update on Workers
Workers will now wait for health check to pass before accepting jobs to process, and will perform a graceful shutdown on a terminate signal received by the service manager.
Docs, Cookbook & Guides
We currently offer [quickstart guides](https://docs.novu.co/overview/quickstart/general-quickstart) for a wide range of major languages and technologies. Feel free to explore these guides to swiftly begin your projects in your preferred programming language.
We have added a [Cookbook section](https://docs.novu.co/cookbook/introduction) to our docs to provide recipes on common tasks.
All Changes
- fix: add delete provider credentials endpoint by @jainpawan21 in #3516
- feat: add remove all messages endpoint in widget by @jainpawan21 in #3523
- feat: add transactionId filter in get messages by @jainpawan21 in #3619
- feat: add ip pool override for sendgrid by @djabarovgeorge in #3646
- feat: add removeAllMessages function in react nc by @jainpawan21 in #3643
- feat: add unique handlebar helper by @jainpawan21 in #3717
- feat: add group by handlebar helper by @jainpawan21 in #3749
- Nv 2405 workflows crud controller by @BiswaViraj in #3745
- fix: add mark message read method in node sdk by @jainpawan21 in #3807
- feat(headless): add listen to notification_received in headless service by @iv-stpn in #3834
- BREAKING: Default notification feed page size is changed to 100, and will return a
hasMore
field if more than 100 notifications exist @davidsoderberg in #3631 - BREAKING: Due to performance optimizations Activity feed and subscriber API, will no return totalCount, but a
hasMore
boolean flag in case there are more results to fetch. - Nv 2578 add removeallnotifications method in headless package by @BiswaViraj in #3829
- chore(deps): update react monorepo by @renovate in #3605
- feat(infra): pause workers in bootstrap until queues are ready by @p-fernandez in #3396
- fix: Update Subscribers API allowing null by @jayavardhan3112 in #3169
- fix(deps): update dependency rxjs to v7.8.1 by @renovate in #3607
- chore(deps): update react monorepo by @renovate in #3609
- feat: add popular template by @djabarovgeorge in #3612
- feat: add feature flag check for deactive integrations by @davidsoderberg in #3618
- NV-2225 - 🐛 Bug Report: Visual bug - dual scroll in integration configuration modal by @gitstart in #3439
- feat(notification-center): smaller bundle size by @LetItRock in #3621
- feat(web): the table skeleton loading by @LetItRock in #3628
- docs: Add Termii provider documentation by @peoray in #3635
- NV-2457 - Create Tenant Repository by @djabarovgeorge in #3620
- Nv 2458 - Add Tenant Create Usecase by @djabarovgeorge in #3623
- NV 2459 - Get Tenant By ID Endpoint by @djabarovgeorge in #3629
- feat(dal): update integration entity schema for multi provider by @p-fernandez in #3625
- feat: add feature flag for multi-provider configuration by @davidsoderberg in #3617
- Add IP Pool Name In Integration by @djabarovgeorge in #3647
- fix: update how to add new provider docs by @jainpawan21 in #3653
- 🐛 CreateNotificationJobCommand fix - update templateProviderIds Map to Record. by @djabarovgeorge in #3614
- feat: refactor template preference logic by @djabarovgeorge in #3596
- Add citation file for any academic research that uses Novu by @Cliftonz in #3652
- fix(ci): debugging cypress by @p-fernandez in #3669
- NV 2418 - Integration Selection Caching by @djabarovgeorge in #3666
- Nv 2460 - Update Tenant Endpoint by @djabarovgeorge in #3638
- Add better Uptime Annoucement for System issues by @Cliftonz in #3664
- Reuse existing env variables that denotates cloud hosted instead of a new one by @Cliftonz in #3676
- Adding github actions to assist PR management and SLAs by @Cliftonz in #3651
- feat(web): integrations list page by @LetItRock in #3644
- feat(api): update get integrations endpoints by @p-fernandez in #3650
- feat: select integration usecase by @BiswaViraj in #3660
- chore(web): use is_multi_provider_configuration_enabled feature flag by @LetItRock in #3654
- feat(docs): Add Infobip SMS provider documentation by @peoray in #3636
- NV 2461 - Delete Tenant Endpoint by @djabarovgeorge in #3639
- NV 2466 - Get Tenant List by @djabarovgeorge in #3641
- feat: add sort function for providers by @davidsoderberg in #3692
- fix(deps): update dependency styled-components to v5.3.11 by @renovate in #3611
- chore(deps): update commitlint monorepo to v17.6.6 by @renovate in #3694
- chore(deps): update dependency @nestjs/cli to v9.5.0 by @renovate in #3695
- chore(api,worker): use select integration usecase before we do a send by @LetItRock in #3662
- Nv 2430 the update integration sidebar by @davidsoderberg in #3680
- Nv 2426 the create integration sidebar by @ainouzgali in #3673
- chore(api,worker): use feature flag when selecting the integration during the send phase by @LetItRock in #3677
- feat: add logging and restart to docker compose by @harrisyn in #3697
- feat(api): update the post, put integration endpoints to allow passing the name, identifier, skip passing credentials by @LetItRock in #3674
- NV2402 - [STACKED PR's] Tenancy CRUD API by @djabarovgeorge in #3682
- feat(web): integrations list page show novu integrations by @LetItRock in #3693
- fix(notification-center): changed the popover prop name for the web-component by @LetItRock in #3712
- feat: add integration scheme migration script by @djabarovgeorge in #3668
- Update docusaurus.config.js by @iampearceman in #3721
- feat: add name field to update sidebar by @ainouzgali in #3714
- feat: search empty state by @ainouzgali in #3713
- fix: aggregation of events by digest key, fix nested digest key by @ainouzgali in #3722
- chore(api,worker): chat oauth flow allow to provide the integration identifier by @LetItRock in #3699
- Nv 2431 integrate the create/update integration sidebar with api by @ainouzgali in #3705
- fix: remove undefined ip pool name by @djabarovgeorge in #3735
- fix: digest and delay values are reset to default values on update by @ainouzgali in #3734
- fix(api): expose api keys only for current environment by @michaldziuba03 in #3640
- fix: k8s component labels hard coded by @aexei in #3731
- fix: helm values.yaml missing web endpoints by @aexei in #3732
- fix: web deployment using wrong NODE_ENV by @aexei in #3733
- format code with prettier by @deepsource-autofix in #3744
- fix(worker): fixed the fcm data message issue with payload messed with additional data by @LetItRock in #3743
- chore(deps): update dependency stylelint to v15 [security] by @renovate in #3748
- fix: mark popover as deprecated by @jainpawan21 in #3752
- feat(worker): store only minimal job info instead of full job by @p-fernandez in #3706
- feat: Helm Repo by @aexei in #3730
- chore(deps): update microsoft/pr-metrics action to v1.5.4 by @renovate in #3757
- fix(worker): set the proper argument order in the logger error function by @p-fernandez in #3756
- feat: add execution details item for the selected integration by @ainouzgali in #3754
- fix(notification-center): remove storybook testing library by @p-fernandez in #3758
- fix(deps): update dependency docusaurus-plugin-sass to v0.2.4 by @renovate in #3759
- fix: add ITriggerOverrideExpo type by @birdgg in #3658
- feat: add update sidebar for novu providers by @davidsoderberg in #3723
- chore(deps): update dependency @vue/tsconfig to ^0.4.0 by @renovate in #3760
- feat: add delete integration ui by @davidsoderberg in #3727
- fix(notification-center-vue): revert the @vue/tsconfig lib update by @LetItRock in #3765
- refactor: rename dtos to workflow, and other minor changes by @BiswaViraj in #3761
- [NV-2437] bug - Union received device tokens by @djabarovgeorge in #3716
- chore(deps): update dependency karma-chrome-launcher to ~3.2.0 by @renovate in #3762
- feat(web): integrations sidebar for the novu in-app by @LetItRock in #3740
- NV-2446 - 🐛 Bug Report: Workflows visual bug by @gitstart in #3630
- feat(infra): consolidate usage of redis instance by bull-mq by @p-fernandez in #3772
- fix: notification template dual state by @michaldziuba03 in #3642
- Nv 2569 update provider instances display in the provider tab of the by @davidsoderberg in #3778
- Content is changed in two sms steps with a delay in between. by @djabarovgeorge in #3780
- fix(infra): provider generator should have version 0.16.3 by @p-fernandez in #3790
- fix: node uses non existing endpoint by @ainouzgali in #3781
- NV-2420 - Update the active integrations endpoint by @djabarovgeorge in #3681
- fix: export TriggerRecipientsTypeEnum in Node.js SDK by @michaldziuba03 in #3795
- fix(web,shared): added missing novu providers to the providers array by @LetItRock in #3774
- fix: export missing enums in node sdk for create template by @jainpawan21 in #3793
- NV-3571 - 🐛 Bug Report: tls options should be hidden when ignore tls has been selected and default value should be {}. by @gitstart in #3715
- fix: webhook enabled if app is not self-hosted by @djabarovgeorge in #3782
- Fix register error by @ainouzgali in #3804
- feat(web): multi channel provider config - integrations list modal by @LetItRock in #3791
- chore(web): integrations list sidebar e2e tests by @LetItRock in #3798
- chore(web): email editor and preview show correct sender name by @LetItRock in #3801
- fix(deps): update dependency mongoose to v6.11.3 [security] by @renovate in #3818
- Docs next js quickstart update by @sumitsaurabh927 in #3799
- Nv 2434 update workflow sets variables to default value by @ainouzgali in #3819
- fix(api,application-generic): active integrations endpoint fixes by @LetItRock in #3809
- fix: flaky test because first sms step was not being added by @ainouzgali in #3823
- feat(app-generic): add cluster mode e2e tests for cache service by @p-fernandez in #3811
- fix(web): intercom launcher floating button overflows the integrations sidebar by @LetItRock in #3821
- fix: updated the types and onsuccess method by @BiswaViraj in #3824
- test: skip failing test until we can control feature flag in worker by @ainouzgali in #3828
- feat(provider): Add Sendchamp SMS provider integration by @peoray in #3656
- chore(web): eslint react hook rules (part 1) by @LetItRock in #3816
- feat(docs): Add sendchamp provider documentation by @peoray in #3719
- Docs(chore): Add cookbook with few recipes by @unicodeveloper in #3837
- fix: variable manager throwing error for array vars by @ainouzgali in #3822
- Docs: Add Uml flow to Cookbook & Architecture pages by @unicodeveloper in #3841
- refactor: remove duplicate code from renaming to workflow by @ainouzgali in #3838
- fix: first update of in app with avatar not saved by @ainouzgali in #3815
- feat(api,node): subscribers mark all messages as read, unread, seen or unseen by @LetItRock in #3832
- chore(web): fixing eslint warnings for the react hooks rules - part 2 by @LetItRock in #3836
- fix: error handling in nodejs sdk by @jainpawan21 in #3839
- feat(docs): add quickstart section by @americano98 in #3830
- fix: change markInAppMessageAs to markMessageAs by @jainpawan21 in #3848
- feat: add subscriber migration page + script by @jainpawan21 in #3803
- Update subscriber trigger payload by @scopsy in #3856
- refactor: update asset by @BiswaViraj in #3853
New Contributors
- @jayavardhan3112 made their first contribution in #3169
- @harrisyn made their first contribution in #3697
- @aexei made their first contribution in #3731
- @birdgg made their first contribution in #3658
- @iv-stpn made their first contribution in #3834
Full Changelog: v0.16.4...v0.17.1
You can find the full changelog on [GitHub](v0.16.4...v0.17.1).