Releases: novuhq/novu
v0.9.0 - Hacktoberfest Release
Excited to announce our biggest release so far at Novu. This release is the work of our team and over 100 contributors from all around the world. Welcome to version 0.9.0. Let's explore what's new!
Notification Observability
We have overhauled how we store and display the execution of the notification workflow. This change allows much more visibility on the errors or successful execution happening. Here are some of the highlights of the activity feed:
- Each step workflow can be inspected
- Execution details for each step are displayed with information and timestamps
- Inspect raw provider error response
- Understand delayed and digested events
We hope that this release will provide a ground for improvement and iteration to later support webhook information, etc... Looking forward to hearing your thoughts!
Seen and Read for notification center - Breaking Change
Since our initial launch, we've been asked countless times to provide a true seen functionality and, on top of that, to allow distinguish read
from seen
.
Currently, we've only had a seen
property that was behaving like a read
, in this release, we have introduced another property named read
and the actual seen
behavior is only triggered once the user has seen the notification center.
BREAKING CHANGE
seen
behavior has changed to now be modified for when the user sees the notification, and the new read
property should be updated on click of the notification.
Testing workflows from the UI
Want quickly to test your new notification template? From now you can easily trigger a notification and specify the payload variable without leaving the template editor.
APNS integration (beta)
Recently we have introduced the Push channel with support for FCM. From this release, you will be able to send notifications using APNS. This integration is still in beta, and we would love to hear your feedback or suggestions.
Subscribers List Page
In this version new subscribers list page was added to inspect your registered subscribers, right now we don't allow creating or editing subscribers. This will be implemented in the upcoming versions.
Integrated provider credentials check
Hearing your feedback for onboarding to Novu, we now test the providers during the integration phase by performing a test email to the provider using the credentials provided. Errors will be displayed inline when you try to integrate.
We hope this will help to identify issues much faster when connecting new providers.
New navigation Spotlight
Scheduled delay notifications
It is now possible to specify a delayed key following the ISO format, and the delay functionality will be delayed until this timestamp. This could be useful to delay the execution of a message until a predefined dynamic date rather than a hardcoded number of minutes or days.
Adding steps in the middle of the workflow
Steps could be now added in the middle between 2 existing nodes in the UI
Other notable changes
- Regenerating API Keys is now possible by visiting the settings page
- The novu notification center is available in 45+ new languages! 🌍
- Novu is now available at the Vercel marketplace, for easier integration with your vercel deployed projects
- New MS Teams chat provider
- Various UI and bug fixes resolved (more details in the change list)
- Documentation improvements
- Better Kubernetes examples and support
- Fixed invite link for self-hosted deployments
- Improved API support in our
@novu/node
SDK - Implemented delivery providers webhook parsing, will be supported fully in next release
- Higher unit tests coverage for our WEB platform components
- A lot more!
Changelist
- remove last ; by @matigumma in #1260
- feat: add subscibers list page by @jainpawan21 in #1182
- feat: Add new provider for MS Teams by @dcamarasa in #1238
- feat: ability to invite existing user by @venarius in #1244
- fix: curl req for notification-groups gets error 500 by @ainouzgali in #1262
- Fix embed runtime env variables by @djabarovgeorge in #1266
- Fix for BUG #1269 by @JakovGlavac in #1270
- test: fix so test are testing so defaults are not overriding trigger payload by @davidsoderberg in #1272
- chore: small design improvements for the README file by @andrewgolovanov in #1273
- fix bug #1275 by @JakovGlavac in #1276
- style: bg-color of step card and zindex of error tooltip by @DanishOnGit in #1268
- APNS Integration by @ainouzgali in #1264
- Add SendGrid provider doc by @scopsy in #1281
- fix(jarvis): run docs script branch by @p-fernandez in #1284
- feat: Add Global and Service Specific Context Path Capibility to all Novu Apps by @Cliftonz in #1285
- fix: smaller fixes for subscriber table by @venarius in #1293
- feat: Add Capability to set Custom Redis Prefix by @Cliftonz in #1287
- Add save button for digest by @Wyfy0107 in #1172
- feat: added functionality to test providers creds during creation by @BiswaViraj in #1254
- fix: add run local doc link in readme by @jainpawan21 in #1296
- feat: Add interface to prepare for webhook feature by @davidsoderberg in #1279
- feat: add so limit can be provided to endpoint by @davidsoderberg in #1277
- refactor: workflow queue service by @davidsoderberg in #1288
- feat: add spotlight for navigation and some actions by @davidsoderberg in #1257
- feat(wip): scheduled delay feature by @ainouzgali in #1283
- feat(api): Inforce API key generation is unique by @p-fernandez in #1299
- Regenerate api keys by @florian-lefebvre in #1292
- fix: api script for e2e tests in root package.json by @jainpawan21 in #1298
- fix: missing error message due object object print by @djabarovgeorge in #1290
- feat: add empty workflow file for webhook service by @davidsoderberg in #1309
- fix: webhook deploy in main by @davidsoderberg in #1310
- Changed the Contribution Guidelines link by @mohanthilak in #1314
- Copyedit the Getting Started Page under Notification Center in Novu Docs Website by @Rutam21 in #1340
- Added how to get Novu's swag by @iampearceman in #1332
- test describe wrong by @LucasLeandroBR in #1325
- docs: add gitpod quick open by @krshkun in #1329
- [NV-796] - i18n - Sanskrit Support by @Rutam21 in #1338
- (docs): fix typos in multiple files by @stanulilic in #1335
- [NV-933] - Activity Feed - fix month day by @ozanuslan in #1351
- NV-1327 i18n - Odia Support by @Rutam21 in #1328
- feat: add webhook endpoint for email providers by @davidsoderberg in #1265
- feat: add mark all as read functionality by @jainpawan21 in #1080
- fix: so messages endpoints are shown in swagger json by @davidsoderberg in #1360
- Fix some typos by @Chii-Onan in #1354
- Add Nepali language support for @novu/notification-center by @diwash007 in #1361
- feat: add invite link by @djabarovgeorge in #1308
- Seen read test by @djabarovgeorge in #1295
- Updated the API Key insertion step for SendGrid. by @mohanthilak in #1364
- fix: close button acts as submit button by @geisterfurz007 in #1369
- Fix typo in architecture.md by @kVarunkk in #1388
- Grammatical errors fixed by @VasuDevrani in https://github.com/novuhq/novu/pu...
v0.8.0 - Delay and Step Filters
Exciting news to share with you all! This cycle was a bit shorter because the team was on our very first company offsite, and it was the first time we met in person 😍
Nonetheless, we prepared some of the long-awaited features based on your request. So let's dive in!
Delay Step
Starting with the v0.8.0
release, you will be able to add a new Delay step type that will delay the sending of the next step by the time you specify it too. This is useful if you wish to wait a day or an hour before sending something to the user.
In the next feature, we will also allow passing a dynamic delay timestamp on the API request so you can create reminders and snooze for users based on a dynamic field. Exciting times 🤯 And thanks to our fantastic @ainouzgali, that took ownership of this one.
Step Filters
You can now filter step execution based on the request criteria from subscriber
and payload
. This can help customize flows for translation and only send specific steps based on subscriber properties such as paying customers, etc...
Kudus to @davidsoderberg 🇸🇪 for making this a reality!
Integration Store Encryption
From this version, all secret credentials on the integration store will be encrypted on the database and decrypted in real time when needed to send an actual request. @djabarovgeorge made sure this feature is backward compatible, but you must add a new secret environment key when upgrading to v0.8.0
.
Migration guide
You must pass a STORE_ENCRYPTION_KEY
environment variable to your docker-compose .env
file. This key should be 32 characters long and stored in a secret store.
Multiple organizations switch on the web
Thanks to @venarius you can now switch between multiple organizations you are part of. Look at the new organization switcher at the left bottom part of the navigation menu 😍
Template variable protection and defaults
One of the most exciting features of this release was done by the one and only @venarius. On the template level, you can make some variables required or provide polyfill values for each.
No more Hello null
!
And much more!
- feat: add ability for users to switch and create multiple organizations by @venarius in #1127
- feat: add on tab click property to notification center by @davidsoderberg in #1194
- i18n - Chinese support by @miles170 in #1195
- feat: allow disabling of user registration in docker environment by @venarius in #1142
- Linked License, Contribution Guidelines and Contributors List in README.md by @AmanNegi in #1192
- fix: social image and add keywords by @jainpawan21 in #1179
- feat: add the externalUrlRegex param for Algolia by @andrewgolovanov in #1185
- i18n - Bengali support by @samaranand in #1139
- Fixed broken link to react components page by @SpencerMiller23 in #1201
- feat: add pagination support in templates page by @jainpawan21 in #1131
- Delete message endpoint by @davidsoderberg in #1193
- feat: added handlebar variable checker and defaults by @venarius in #1145
- fix: flow editor height by @venarius in #1210
- fix: added new languages to docs by @venarius in #1212
- feat(readme): change contributors link to community heroes by @nevo-david in #1216
- feat: added env variables & explanation to docs by @venarius in #1213
- Feat position notification center by @BiswaViraj in #1184
- fix: workaround with validation pipe nan casting by @scopsy in #1217
- added croatian by @JakovGlavac in #1214
- fix: sentry reporting errors by @scopsy in #1218
- test: basic e2e tests for delay by @ainouzgali in #1219
- Provider api key encryption by @djabarovgeorge in #1207
- docs: delay doc by @ainouzgali in #1221
- fix: embed <--> widget communication issue on safari by @LetItRock in #1197
- remove mongoose import by @ainouzgali in #1226
- feat: upgrade widget cypress version by @scopsy in #1228
- fix: update api key creator when he is removed by @scopsy in #1233
- fix: fcm fallback by @djabarovgeorge in #1235
- fix: fix inactive integrations still being used by @venarius in #1250
- fix: add red dot in node if content is empty by @jainpawan21 in #1143
- feat: iframe callbacks by @venarius in #1243
- fix: added base url for mailgun provider by @venarius in #1253
- feat: add endpoint to fetch messages by @davidsoderberg in #1227
New Contributors
- @miles170 made their first contribution in #1195
- @AmanNegi made their first contribution in #1192
- @samaranand made their first contribution in #1139
- @JakovGlavac made their first contribution in #1214
Full Changelog: v0.7.3...v0.8.0
v0.7.3 - Small improvements and bug fixes
What's Changed
- docs: Twilio example with numbers by @eddiejaoude in #1159
- feat: Allow adding a custom header to the notification center component by @davidsoderberg in #1163
- fix: Fix subscriber endpoints for the notifications feed by @davidsoderberg in #1166
- fix: Margin issue in settings page by @adarshajit in #1133
- feat: Update redirects for API documentation by @andrewgolovanov in #1170
- refactor: Introduce a @novu/client package to handle reusable js front-end logic by @wpoynter in #1113
- feat: Add a step to deploy API documentation by @andrewgolovanov in #1154
- fix: Slug for redirects on API pages by @andrewgolovanov in #1171
- refactor: Use date-fns instead of moment by @venarius in #1122
- docs: Updated the readme documentation to make email param as array. by @mrajen27 in #1161
- fix: Redirects for API documentation by @andrewgolovanov in #1175
- fix: Add set credentials info in push by @jainpawan21 in #1178
- Added documentation for triggering events when self-hosting by @SpencerMiller23 in #1168
New Contributors
- @eddiejaoude made their first contribution in #1159
- @adarshajit made their first contribution in #1133
- @wpoynter made their first contribution in #1113
- @mrajen27 made their first contribution in #1161
- @SpencerMiller23 made their first contribution in #1168
Full Changelog: v0.7.2...v0.7.3
v0.7.2 - Community Patch Release
A small patch release with work created by the community and our core team.
What's changed
- Support for notification identifier update by @jainpawan21 in #1089
- Support custom language for iframe embed widget by @venarius in #1115
- Use react-router link for navbar menu instead of a tag by @venarius in #1094
- Add showLastUpdateAuthor and showLastUpdateTime in docs by @jainpawan21 in #1096
- Redis installation docs by @KarlGusta in #1110
- Update the links and logo in the navbar by @andrewgolovanov in #1121
- Add ability for admin to change member roles by @venarius in #1091
- Added better errors for signup by @venarius in #1116
- Normalize email on password reset by @venarius in #1117
- Add seen unseen combined count check by @djabarovgeorge in #1106
- Refactor auth provider by @djabarovgeorge in #1123
- Refactor web user preference design by @djabarovgeorge in #1112
- Add rebuild command by @djabarovgeorge in #1108
- Fix minor spelling errors by @asgeirf in #1126
- Add in app editor error alert by @djabarovgeorge in #1119
- Cleanup email workflow visuals by @venarius in #1132
- Remove max width in hmac desc by @jainpawan21 in #1134
- Use cursor pointer for switch by @venarius in #1135
- Enforce pnpm 7.5.0 by @venarius in #1125
- Throttle refetch of notifications by @venarius in #1109
- Remove embedded CSS to body done by widget embed by @davidsoderberg in #1130
- Fix unhandled SES errors generated by @davidsoderberg in #1146
- Add i18n Malayalam support by @varghesejose2020 in #1136
- Configure redirect and rewrite rules for Netlify by @andrewgolovanov in #1150
- Filter steps can be used for step filters by @davidsoderberg in #1149
- Fix failing web e2e test by @venarius in #1141
New Contributors
- @KarlGusta made their first contribution in #1110
- @asgeirf made their first contribution in #1126
- @varghesejose2020 made their first contribution in #1136
Full Changelog: v0.7.1...v0.7.2
v0.7.0 - Slack, Discord, Push and Subscriber Preferences
This is our biggest release yet, with over 30 contributors and 130 Pull requests with awaited features such as Push, Chat, Subscriber Preference API, API Reference documentation, and more... Let's dive in!
Subscriber Preferences API
From this release, your application notification subscriber will be able to configure their preferences from within the notification center or directly via our API.
By default, all existing templates prior to 0.7.0 will be marked as critical
and will be excluded from the preference list. To add them, go to the template editor page and un-mark the critical template from the preference defaults.
New templates created after this release will be added to the preference list, and the user can select from the available channels what to not receive and over which channel.
To read more about Subscriber Preference visit the documentation.
Push notifications with FCM
Excited to share that from now it's possible to send push notifications to mobile devices using FCM. This feature was entirely built by our amazing community members and specifically by @raikasdev 💖.
APNS and other providers' support will be landed in the next release. Looking for other push providers? Create a GitHub issue or contribute directly.
To send over the push channel, deviceTokens
should be added to the specified subscribers. To read more about it visit the documentation on subscriber credentials and our FCM guide.
Chat Apps (Slack and Discord)
One of our requested features was to send notifications with chat applications such as Slack and Discord. And now you can! Chat apps could be directly configured from the template editor and delivered using the webhook_url
mechanism of the chat providers.
To read more about it, visit our guide.
API Reference documentation
With so many requests by the community members, we just had to do something about it ;) With help from @andrewgolovanov and the entire pixel point team, we are honored to present the first version of our API reference.
Notable changes
- feat(web): Allow removing a team member for admins #841 by @MaurerKrisztian in #888
- feat: Customize notification list item by @davidsoderberg in #880
- feat: Support for google cloud storage by @Lian1230 in #934
- feat(web): Invite for a team member can be resent by @venarius in #998
- feat: Azure blob storage support by @proDOOMman in #1001
- feat: Migrate from moment to date-fns by @venarius in #1032
New notification center languages
- Spanish 🇪🇸 🥘 by @csachdeva83
- Finish 🇫🇮 ☕ by @raikasdev
- Hindi 🇮🇳🍛 by @jainpawan21
- Gujarti 🇮🇳🍛 by @thisaakash
- Russian 🇷🇺🪆 by @proDOOMman
- French 🇫🇷🥖 by @csachdeva83
- Arabic 🇸🇦🕌 by @ArshErgon
- Italian 🇮🇹🍕 by @Zed93
- Ukrainian 🇺🇦🌻 by @proDOOMman
Other improvements
- Fix activity emails filter by @djabarovgeorge in #576
- Netcore provider logos for dark and white by @EmiliyaGrossman in #825
- Docker tag action for packages by @scopsy in #905
- feat: Implement optional credential fields by @WinterCore in #909
- fix: breaking page on deleted template by @scopsy in #913
- feat: add netcore provider by @davidsoderberg in #813
- Docker staged build on API docker file by @scopsy in #933
- refactor: api get use case by @djabarovgeorge in #927
- feat: add endpoint to get subscriber by subscriber id by @davidsoderberg in #945
- Template IDs for invites and password reset can be configured by environment by @proDOOMman in #797
- fix: User should be logged out when API sends 401 Unauthorized error by @chavda-bhavik in #935
- Cypress tests for user preference by @ainouzgali in #952
- fix: add stop-only dev dependency by @jainpawan21 in #960
- fix: safari in-app notification template glitches by @LetItRock in #937
- fix: move drop zone to add node by @jainpawan21 in #950
- Events for user preferences by @ainouzgali in #976
- Allow hiding user preferences cog by @ainouzgali in #981
- feat: improve the command.create static function to be reused by @LetItRock in #987
- refactor: update theme default by @djabarovgeorge in #990
- fix: upgrade node-fetch by @Lian1230 in #988
- Compound index for (_environmentId, subscriberId) by @proDOOMman in #980
- changed invite link to a working one by @crismxiex in #997
- fix: upgrade semantic-release by @Lian1230 in #995
- Switch deprecated faker.name.title function to jobTitle by @Rutam21 in #1017
- fix: added docs and libs folders to lint-staged by @venarius in #1010
- feat: add loading overlay to invites page by @venarius in #1013
- fix: Fix lint staged for multiple folders and added eslint step by @venarius in #1025
- fix: update the logo of documentation by @vannyle in #1028
- fix: notification center moment locale change by @venarius in #1026
- Added toggleTabIndex attribute in PasswordInput for focus Management … by @sachinsom93 in #1029
- Upgrade Novu Issue Templates to use Github Issue Forms by @Rutam21 in #1035
- fix: promotion of delete notification template change by @davidsoderberg in #1042
- fix: user preference promotion by @djabarovgeorge in #1043
- feat: better error for login page by @venarius in #1038
- feat: add accept term and privacy query by @djabarovgeorge in #1020
- feat: added support and docs bottom links to sidenav by @venarius in #1045
- Update arrow functionality on missing provider by @Rutam21 in #1046
- Fixed text for email field for provider connection by @oba2311 in #1036
- feat: add swagger for feeds controller by @davidsoderberg in #1051
- fix: 200 and 201 for same endpoint by @davidsoderberg in #1053
- feat: show supported locales for notification-center in docs by @venarius in #1044
- fix: external api accessible for endpoints with swagger by @davidsoderberg in #1059
- feat: add missing alerts pre action for push chat by @djabarovgeorge in #1061
- feat: show save notification on email template button by @venarius in #1060
- web accept terms and privacy by @djabarovgeorge in #1055
- Fixed Typo [Line 51]✔️ by @CodrShiv in #1071
- feat: change email template text direction to text align by @venarius in #1063
- feat: add broadcast to node package by @davidsoderberg in #1069
New Contributors
- @EmiliyaGrossman made their first contribution in #825
- @dha-stix made their first contribution in #882
- @oba2311 made their first contribution in #946
- @jainpawan21 made their first contribution in #963
- @csachdeva83 made their first contribution in #967
- @proDOOMman made their first contribution in #797
- @chavda-bhavik made their first contribution in #935
- @LetItRock made their first contribution in #937
- @thisaakash made their first contribution in #972
- @ArshErgon made their first contribution in #974
- @crismxiex made their first contribution in #997
- @Zed93 made their first contribution in #996
- @venarius made their first contribution in #998
- @Rutam21 made their first contribution in #1017
- @sachinsom93 made their first contribution in #1029
- @andrewgolovanov made their first contribution in #1070
- @CodrShiv made their first contribution in #1071
Full Changelog: https://gith...
0.6.2 - i18n support for notification center
i18n support for notification-center component
It is now possible to translate the notification center UI elements by passing a translation object or a premade translation. More info can be found on the documentation page.
Custom object implementation:
<NovuProvider i18n={{
// Make sure that the following is a proper 2 letter language code,
// since this is used by moment.js in order to calculate the relative time for each notification
lang: "de",
translations: {
poweredBy: "unterstützt von",
markAllAsRead: "Alles als gelesen markieren",
notifications: "Benachrichtigungen",
},
}}>
</NovuProvider>
Premade languages created by the community:
<NovuProvider i18n={'en'}>
</NovuProvider>
What else has changed
- fix: so dkim can be undefined by @davidsoderberg in #892
- fix: remove console errors by @ainouzgali in #889
- fix: remove un-needed node-fetcher dependency by @scopsy in #895
- fix: add button type for unstyled buttons by @scopsy in #894
- fix: use notification default storeid by @djabarovgeorge in #897
- Cypress component testing seed for WEB project by @scopsy in #899
- fix: add subject rendering variables with handlebars by @scopsy in #903
- fix: add missing shared exports by @scopsy in #902
Full Changelog: v0.6.0...v0.6.2
v0.6.0 - Digest Engine & Notification Center Upgrades
Version v0.6.0 introduces so many long-awaited features such as: Digest Engine, multi-tab support on notification center, notifications actions and so many other improvements and bug fixes. This release is the hard work of more 16 individual contributors and collaborators that made this version possible.
Digest Engine
The digest engine collects multiple trigger events and aggregates them into a single message delivered to the subscriber in form of an email, ,in-app notification or any other supported novu channel.
This becomes useful when a user needs to be notified on a large number of triggers, and you want to avoid sending too many notifications. Novu will automatically batch the incoming trigger events based on the subscriberId
and an optional digestKey
that can be added to control the digestion of the events.
Here is an overview of the digest flow, including both supported strategies: Regular and Backoff.
To learn more about the digest engine and the additional strategies and usage guide, visit our docs page here.
Notification Actions
Now, creating an even richer experience with the novu notification center is possible, and adding action buttons to a dedicated notification template. Subscribers can make interactions such as accepting invites or friend requests from the notification center without navigating to a different URL.
Multiple notification feeds
It is now possible to configure multiple feed configurations for various notification center templates. The feeds created can be used to fetch notifications for each feed separately. This can help to achieve a multi-tab experience for subscribers depending on the actual use-cases.
New delivery providers
- Termii by @samsoft00
- Gupshup by @davidsoderberg
System sync for dark and light modes
Thanks to @FidalMathew you can now choose to sync your theme preference for you system, or select light & dark modes which will be persistent across browser refreshes.
New Go-lang SDK
Created by our amazing community member @samsoft00 you can now interact with Novu using the new go-lang SDK. Info can be found here: https://github.com/novuhq/go-novu
Other notable changes
- Docs: improve react-component code block by @murtuzaalisurti in #742
- Remove unnesessary docker socket mount in docker-compose by @kymppi in #757
- Upgrade pnpm to version 7 by @scopsy in #740
- feat: add endpoint to get all subscribers by @davidsoderberg in #766
- Node v16 support by @scopsy in #765
- adding backendurl option for iFrame embed solution by @AlexVCS in #611
- Create codeql-analysis.yml by @scopsy in #773
- feat: upgrade node version images by @scopsy in #782
- Fix docs links by @raikasdev in #785
- fix: add pointer cursor to cta by @remirobichet in #798
- NV-626: fix: Move focus to "YES" in the delete workflow step confirmation modal by @WinterCore in #800
- fix (docs): missing link to guide on how to create a provider by @zakariaelas in #792
- fix(apps/web): close menu on click outside in flow editor by @zakariaelas in #802
- Update passport by @raikasdev in #805
- Fix docs broken /docs/ redirect by @raikasdev in #806
- feat: add trigger id to list and settings page by @raikasdev in #808
- Add remove notification by @raikasdev in #809
- fix: add a return statement on invite accept by @scopsy in #814
- Parallel cypress testing by @scopsy in #815
- NV-631 - fix(web): Redirect to getting started on first session by @WinterCore in #812
- Updated Discord Invite Link by @iampearceman in #816
- Fix organization invite issue by @scopsy in #821
- feat: upgrade api nestjs to v9 by @scopsy in #822
- Upgrade WS typescript version by @scopsy in #849
- Update run-locally.md by @josephjosedev in #856
- fix: Disable the delete step button on production by @WinterCore in #857
- feat: added nest module async provider option by @shahriar-shojib in #844
- Fix embed widget position option by @remirobichet in #864
- docs: include golang code snippets to dashboard by @samsoft00 in #853
- feat: add gupshup provider by @davidsoderberg in #862
- feat: add so a text template can be provided for emails text version by @davidsoderberg in #874
- fix: Theme is persistent by @FidalMathew in #852
- fix: ses provider with attatchments by @davidsoderberg in #876
- feat: add dkim config option for nodemailer by @davidsoderberg in #875
- Use a docker image with both nodejs and python by @Lian1230 in #886
- fix(logo): update mailjet logo in dark theme #878 by @MaurerKrisztian in #887
New Contributors
- @remirobichet made their first contribution in #798
- @WinterCore made their first contribution in #800
- @zakariaelas made their first contribution in #792
- @josephjosedev made their first contribution in #856
- @shahriar-shojib made their first contribution in #844
- @Lian1230 made their first contribution in #886
- @MaurerKrisztian made their first contribution in #887
Full Changelog: v0.5.1...v0.6.0
v0.5.1 - UI/UX improvements and bug fixes
This minor release brings some UI and UX improvements to the notification workflow editor and some bug fixes.
Upsert subscriber on event trigger
Previously when a subscriber was created using the trigger.event method, we wouldn't update it's details with new information brought from the to
object when another triggered was performed. This caused multiple users not to receive an email or SMS due to invalid email saved originally on the subscriber.
Now the subscriber entity will be updated upon delivery.
Bug Fixes
When importing the @novu/notification-center
using the method suggested in docs an error was received:
Uncaught TypeError: Cannot read properties of undefined (reading 'unseenBadge')
This is now fixed.
What else Changed
- test: refactor notifications editor spec by @davidsoderberg in #718
- fix: not set as dirty when clicking on trigger by @ainouzgali in #719
- fix: updated web/public/index.html and removed unused default-react logos by @devblin in #716
- feat: add delete step modal by @davidsoderberg in #720
- edit message not shown after delete, deleted node not shown again by @ainouzgali in #721
- fix: add redirect / to /docs by @vannyle in #717
- fix: reintroduce attachments support by @djabarovgeorge in #723
- Notication center docs default values by @ainouzgali in #724
- Nv 447 plus button, add a step close to the next node by @ainouzgali in #727
- Remove unimplemented property border radius by @ainouzgali in #728
- fix: so job is removed on complete by @davidsoderberg in #731
- fix: use only one unsaved changes error by @ainouzgali in #730
- NV 546 fix: clipped blocked html by @djabarovgeorge in #722
- feat: subscriber id validation by @djabarovgeorge in #726
- feat: save event trigger payload in the message instance by @djabarovgeorge in #725
- fix: change redirect match to slug by @vannyle in #732
- feat: update subscriber via trigger by @djabarovgeorge in #729
- Fix a typo in quick-start.md & react-components.md file by @murtuzaalisurti in #736
- fix notification center bell props by @djabarovgeorge in #733
New Contributors
- @murtuzaalisurti made their first contribution in #736
Full Changelog: v0.5.0...v0.5.1
v0.5.0 - ⭐ New workflow engine and UI Editor
Extremly excited to anounce our latest release which includes an entire redesign of our trigger engine, a brand new and shining workflow editor on the web management platform, notification center theme customization, and a lot more goodies! Let's check it out:
Redesigned backend trigger engine
To support a more complex Novu usecase with custom flows and events we had to reimagine how our trigger engine works, instead of processing just the hardcoded configuration of delivery a user can now specify a tree-like flow with a custom order of nodes. This infra change will help us to support the upcoming: Digest, Delay, Decision trees, and more.
In this change, we also introduced BullMQ to manage or step execution Queue to support better persistency and scalability as it will allow us to scale trigger processing across multiple machines in the next upcoming releases.
Redesigned Notification Template Editor
One of the biggest steps to support our future plans is the redesigned Workflow Editor when editing a notification template. Previously, you could only decide on a channel but couldn't control more than one message of this particular channel, and couldn't control the order of execution.
Introducing the new workflow editor powered by React-Flow:
This new workflow will be the basis of more exciting features we are about to release in the upcoming weeks!
Attachment support on email providers
Thank to our amazing contributor @devblin, it is possible to send attachments with your emails. You can easily add attachments using the following API:
import { Novu } from '@novu/node';
const novu = new Novu(process.env.NOVU_API_KEY);
novu.trigger('event-name', {
to: {
subscriberId: '...'
},
payload: {
attachments: [{
file: fs.readFileSync(__dirname + '/data/test.jpeg'),
name: 'test.jpeg',
mime: 'image/jpg'
}]
}
})
Notification center theme customization
Based on a lot of your requests, it is possible now to customize the notification center component visuals for in our React component. Here is how you can do that:
const theme = {
dark: {
// Dark Theme Props
},
light: {
// Light Theme Props
},
common: {
// Common
}
};
return (
<PopoverNotificationCenter theme={theme}>
</PopoverNotificationCenter>
);
For more information about the different parts of the theme configuration:
export interface INovuTheme {
layout?: IThemeLayout;
header?: IThemeHeader;
popover?: IThemePopover;
notificationItem?: IThemeNotificationListItem;
footer?: IThemeFooter;
loaderColor?: string;
unseenBadge?: IThemeUnseenBadge;
}
export interface IThemeLayout {
background?: string;
boxShadow?: string;
borderRadius?: string;
wrapper?: {
secondaryFontColor?: string;
};
}
export interface IThemeHeader {
badgeColor?: string;
badgeTextColor?: string;
fontColor?: string;
}
export interface IThemePopover {
arrowColor?: string;
}
export interface IThemeNotificationListItem {
seen?: {
fontColor?: string;
background?: string;
timeMarkFontColor?: string;
};
unseen?: {
fontColor?: string;
background?: string;
boxShadow?: string;
notificationItemBeforeBrandColor?: string;
timeMarkFontColor?: string;
};
}
export interface IThemeFooter {
logoTextColor?: string;
logoPrefixFontColor?: string;
}
export interface IThemeUnseenBadge {
color?: {
fillColor?: string | ISvgStopColor;
borderColor?: string;
};
}
More changes and improvements
- fixed grammatical error in notification form by @tusharsrivastav in #613
- Made changes in the CONTIBUTING.md file for ports information by @AakashRaj20 in #637
- update readme by @souravjain540 in #638
- fix: added support for attachments passing within Novu API by @devblin in #608
- Proper Error Message when used without NovuProvider by @BiswaViraj in #639
- Added env flag for github oauth option by @BiswaViraj in #644
- Upgrade Widget cypress to v10 by @kymppi in #658
- Docker-compose for local development by @kymppi in #659
- style changed integration to integrations by @AlexVCS in #669
- changed api to API by @Tosin-webdev in #670
- Fixed typo on line 36 by @AlexVCS in #673
- fix: updated the docker env to string by @BiswaViraj in #688
- fix: updated scripts to use cross-env by @BiswaViraj in #685
- fix: team invite not working when already logged in by @samsoft00 in #678
- feat: #686 add termii sms provider by @samsoft00 in #690
- import IMessage + Dark mode (colorScheme update) Documentation by @Lorakus in #698
- Added unseenCount in popover notification component by @Lorakus in #699
- Update Types to support nested payload properties by @dcbartlett-fadv in #701
- Upgraded apps/web cypress to v10 by @devblin in #689
- Fix/update provider hygen template by @samsoft00 in #710
New Contributors
- @tusharsrivastav made their first contribution in #613
- @AakashRaj20 made their first contribution in #637
- @souravjain540 made their first contribution in #638
- @kymppi made their first contribution in #658
- @Tosin-webdev made their first contribution in #670
- @samsoft00 made their first contribution in #678
- @Lorakus made their first contribution in #698
- @vannyle made their first contribution in #558
- @dcbartlett-fadv made their first contribution in #701
Full Changelog: v0.4.2...v0.5.0
v0.5.0-alpha.0
v0.5.0-alpha.0