v0.22.0
版本发布时间: 2023-12-14 18:29:53
novuhq/novu最新发布版本:v0.24.0(2024-03-18 17:44:43)
What’s new in Novu 0.22?
TL;DR: All you need to know about the latest Novu 0.22.0 release. Multi-tenancy Variants, API Idempotency, API Rate Limiting, Filter conditional variables and more!
0.22 Release Updates
We're excited to highlight the newest features introduced in our latest release. Join us as we explore what awaits you!
Multi-tenancy Variants
Variants is an integral component of our multi-tenancy feature and aims to empower users to create multiple variants for a given workflow step, such as the Email step. These step variations are linked to specific conditions.
Within the multi-tenancy context, these conditions may pertain to tenants; for instance, if the tenant is named "Nike", a specific email variant will be chosen.
However, these conditions extend beyond tenants, allowing users to base their criteria on the trigger payload, subscriber data, or webhook data.
During the notification sending phase, the system’s logic will determine the appropriate variant based on the contextual information that was passed with the trigger event and the conditions applied to the variants. Only a single variant will be selected and sent to the user at the end.
Note: We have renamed the Filters functionality to Conditions.
Adding a variant to email step
In this gif above, we added a variant to our email step, thus making us have the root variant (with no condition) that will be sent if there's no tenant identifier specified, and a variant that will be sent if the tenant identifier is Nike.
Idempotency
To enhance the resilience and dependability of our API system, especially during disruptive scenarios like network interruptions, we have introduced the Idempotency headers to POST and PATCH HTTP methods within the API.
We have now granted users the ability to include Idempotency headers in their requests. A given operation will not be executed more than once, even if users resubmit the request following a perceived failure.
This guarantees that we process changes in a fail-safe manner, and the system caches the response for a day for future reference. This approach ensures that only valid and unique changes are processed, contributing to the overall robustness and reliability of our API system.
Note: Currently, the Idempotency headers are not enabled on the Novu cloud but functionality is available for self-hosting. We are currently integrating it into all of our SDKs as well.
Huge shoutout to @mahendraHegde for bringing in the Idempotency feature and to @michaldziuba03 for implementing the exponential retry mechanism in Node SDK! Your contribution rocks, much appreciated! 🙌
PRs:
- feat: add idempotency interceptor by @mahendraHegde in https://github.com/novuhq/novu/pull/4531
- fix(api): Use correct idempotency documentation link by @rifont in https://github.com/novuhq/novu/pull/4710
- feat(node): add exponential retry mechanism with idempotency headers by @michaldziuba03 in https://github.com/novuhq/novu/pull/4462
API Rate Limiting
Rate limiting is an essential functionality for establishing a robust and resilient system. It safeguards system resources from being misused by malicious actors or being monopolized by one client.
It plays a vital role in sustaining consistent system performance by regulating traffic and preventing sudden increases that could degrade service quality.
Note: It's not currently enabled on Novu Cloud yet. We'll inform all users whenever we want to enable this option for all cloud users. If you're self-hosting, you can enable API rate limiting immediately with the IS_API_RATE_LIMITING_ENABLED
flag in the environment variable.
PRs:
- feat(application-generic, shared): Add Rate Limiting feature flag in https://github.com/novuhq/novu/pull/4667
- feat(dal, shared, api): Add rate limit DAL attributes by @rifont in https://github.com/novuhq/novu/pull/4758
- feat(api, shared): Add use cases to resolve an environment's api rate limit in https://github.com/novuhq/novu/pull/4774
- chore(api, shared, app-generic): Convert API rate limit FF to be LaunchDarkly compatible in https://github.com/novuhq/novu/pull/4857
- feat(api): Add evaluate api rate limit use case in https://github.com/novuhq/novu/pull/4844
- feat(api): Add API rate limiting NestJS guard in https://github.com/novuhq/novu/pull/4910
- feat(api): Apply rate limit decorators to api controllers and methods in https://github.com/novuhq/novu/pull/4915
- feat(api): Add variable-cost token bucket rate limiting algorithm in https://github.com/novuhq/novu/pull/4911
Variable Support in the Step Conditions aka Filters
The condition Value
field now supports the use of variables as its value, enhancing the dynamic nature of this functionality.
PRs:
- feat: add support for variables in filter values https://github.com/novuhq/novu/pull/4724
Workflow Settings Override for tenants
The workflow settings override functionality allows to update the active
and channel
preferences fields on the workflow per tenant.
A good use case for this is the ability to have the following setting preferences enabled for all users, but you want them disabled for specific tenants. For example, you have about 3 tenants: Nike, Cloudinary and Eden. You can create a new settings override by passing the tenantId
and workflowId
, and your preferences.
We have implemented the set of the API endpoints that allow the following:
- Creating, updating and deleting overrides,
- List all overrides, or for one template.
Create new workflow settings overrides
Update workflow settings overrides
PRs:
- Stacked PR's of - Workflow override in https://github.com/novuhq/novu/pull/4773
Note: We are currently working on ensuring our SDKs have support for this functionality.
Event Cancellation from Digest
We have added a new API endpoint that allows the cancellation of any event from the digest.
Note: We are currently updating all of our SDKs to support this new functionality.
PRs:
- Feature: Ability to cancel any arbitrary events from digest in https://github.com/novuhq/novu/pull/4888
Resiliency and Performance Improvements
We have done some performance plumbing to improve the speed & resilience of the overall system. Our goal is to keep working on performance, reliability and resilience in every release.
Custom SMS Provider Integration
You can now send SMS messages using custom SMS providers using REST API. Do this by setting up the Generic SMS provider:
MessageBird SMS Provider Integration
You can now send SMS messages via the MessageBird SMS provider integration:
BulkSMS Provider Integration
You can now send SMS messages via the BulkSMS SMS provider integration:
SimpleTexting SMS Provider Integration
You can now send SMS messages via the SimpleTexting SMS provider integration:
Azure SMS Provider Integration
You can now send SMS messages via the Azure SMS provider integration:
Braze Email Provider Integration
You can now send emails via the Braze Email provider integration:
Pusher Beams Provider Integration
You can now send messages via the Pusher Beams provider integration:
Grafana On Call Webhook Chat Provider Integration
You can now send messages via the Grafana On Call webhook chat provider integration:
Notable changes
- fix: change default value to true for critical switch by @jainpawan21 in https://github.com/novuhq/novu/pull/4882
- fix(web): nc loading issue for eu env by @BiswaViraj in https://github.com/novuhq/novu/pull/4904
- feat(api): scripts to remove user account and to remove organization by @LetItRock in https://github.com/novuhq/novu/pull/4190
What's Changed
- fix(@novu/fcm): use message instead of body for data-type notifications by @cherfia in https://github.com/novuhq/novu/pull/4652
- Updated the name of Twitter to X in all docs by @Arcturus22 in https://github.com/novuhq/novu/pull/4662
- 🐛 Add missing NODE_ENV for web deployment by @sachin-duhan in https://github.com/novuhq/novu/pull/4672
- Enhanced Security Information via Updating [SECURITY.md](http://security.md/) by @tvermaashutosh in https://github.com/novuhq/novu/pull/4666
- docs update by @krishvsoni in https://github.com/novuhq/novu/pull/4683
- feat: added feature to toggle visibility of settings in iframe by @ruhani2 in https://github.com/novuhq/novu/pull/4688
- Added translation for a word in Azerbaijani by @Atharva1723 in https://github.com/novuhq/novu/pull/4686
- feat: add support for tls servername for azure redis by @Cliftonz in https://github.com/novuhq/novu/pull/4690
- feat(web): add missing square logos by @michaldziuba03 in https://github.com/novuhq/novu/pull/4701
- [NV-3037] Fixed closing off the wrong socket in useUnreadCount.ts by @Khongchai in https://github.com/novuhq/novu/pull/4590
- feat(worker): manage default workers config through env variables by @p-fernandez in https://github.com/novuhq/novu/pull/4544
- Docs Feedback: js code in create-subscriber method has syntax issues by @codingis4noobs2 in https://github.com/novuhq/novu/pull/4709
- feat(infra): safe value in-memory provider configs by @p-fernandez in https://github.com/novuhq/novu/pull/4718
- added web component url by @krishvsoni in https://github.com/novuhq/novu/pull/4719
- Add badges by @git-create-devben in https://github.com/novuhq/novu/pull/4721
- Add Pushpad provider to [README.md](http://readme.md/) by @collimarco in https://github.com/novuhq/novu/pull/4720
- docs: fix grammatical error by @princerajpoot20 in https://github.com/novuhq/novu/pull/4732
- feat(infra): create dedicated services for in-memory for wf and cache by @p-fernandez in https://github.com/novuhq/novu/pull/4733
- Update [CONTRIBUTING.md](http://contributing.md/) by @krishvsoni in https://github.com/novuhq/novu/pull/4731
- fix(providers): azure sms logo and identifier by @michaldziuba03 in https://github.com/novuhq/novu/pull/4740
- feat(infra): temporary env var to decommission old cluster in azure by @p-fernandez in https://github.com/novuhq/novu/pull/4751
- feat(infra): add azure cache for redis provider without connecting it by @p-fernandez in https://github.com/novuhq/novu/pull/4739
- Fix
pr-labeler.yml
workflow by @rannn505 in https://github.com/novuhq/novu/pull/4752 - refactor(providers): Migrate from pepipost SDK to direct API calls with Axios by @Dhoni77 in https://github.com/novuhq/novu/pull/4595
- fix(web): add missing providers logos by @michaldziuba03 in https://github.com/novuhq/novu/pull/4742
- refactor(providers): migrate from @sendinblue/client SDK to direct API calls with Axios by @Dhoni77 in https://github.com/novuhq/novu/pull/4596
- refactor(providers): Migrate from clicksend SDK to direct API calls with Axios by @his-maj-esty in https://github.com/novuhq/novu/pull/4609
- feat(notification-center): header missing screen argument and React identity by @gitstart in https://github.com/novuhq/novu/pull/3463
- fix(providers): Sparkpost provider bugs by @michaldziuba03 in https://github.com/novuhq/novu/pull/3736
- NV-2195 - Bug Report: Visual bug in Add filter button icon by @gitstart in https://github.com/novuhq/novu/pull/4151
- feat(web): Add blank workflow creation button by @rohitkbc in https://github.com/novuhq/novu/pull/4323
- fix(web): fixed the dropdown issue in email editor by @sudhanshugautam2911 in https://github.com/novuhq/novu/pull/4728
- fix: events write over other digest data on up coming digests by @davidsoderberg in https://github.com/novuhq/novu/pull/4765
- chore(deps): update dependency @types/inquirer to v8.2.9 by @renovate in https://github.com/novuhq/novu/pull/4766
- feat(notification-center-vue): Make Popover.triggers a prop for notification-center-vue by @danidee10 in https://github.com/novuhq/novu/pull/3964
- chore(api): Add generic migration helper script by @rifont in https://github.com/novuhq/novu/pull/4780
- Add auto create index variables to env by @Cliftonz in https://github.com/novuhq/novu/pull/4772
- fix(worker): Add activity log for events when they digest in the mergedDigestId flow by @scopsy in https://github.com/novuhq/novu/pull/4789
- refactor(providers): migrate from sparkpost sdk to axios by @michaldziuba03 in https://github.com/novuhq/novu/pull/4785
- chore: update npm badges in readme by @michaldziuba03 in https://github.com/novuhq/novu/pull/4820
- chore: Remove Hacktoberfest and fix the top by @nevo-david in https://github.com/novuhq/novu/pull/4769
- fix(web): Invite-members icon is changed in header-nav by @maverox in https://github.com/novuhq/novu/pull/4695
- feat(web): Add Loading spinner for Update button by @iknlaxmi in https://github.com/novuhq/novu/pull/4781
- fix(api): eliminate number conversion for split message by @scopsy in https://github.com/novuhq/novu/pull/4832
- feat(infra): decommission old instance of redis cluster by @p-fernandez in https://github.com/novuhq/novu/pull/4824
- fix(api): swagger schema for integrations return array by @king-11 in https://github.com/novuhq/novu/pull/4697
- feat(api): Allow style tags and attributes in the In-App & Email Editor by @rifont in https://github.com/novuhq/novu/pull/4841
- fix(visual-bug): left spacing of frequent event in digest by @jainpawan21 in https://github.com/novuhq/novu/pull/4842
- fix(ci): docker build test.yml for forks by @scopsy in https://github.com/novuhq/novu/pull/4839
- fix(sms): add options from in sms providers by @jainpawan21 in https://github.com/novuhq/novu/pull/4845
- chore(web): segment track the user theme preference by @LetItRock in https://github.com/novuhq/novu/pull/4848
- feat(worker): add handlebar helper for number formatting by @michaldziuba03 in https://github.com/novuhq/novu/pull/4827
- Docs Feedback: js code in update-subscriber method has syntax issues by @Atharva1723 in https://github.com/novuhq/novu/pull/4862
- Updated the syntax in many of the methods by @Atharva1723 in https://github.com/novuhq/novu/pull/4864
- fix(docs): Fix Redirect Issue for "Run in Local Machine" Button by @Atharva1723 in https://github.com/novuhq/novu/pull/4870
- Update the roadmap link to the latest roadmap link by @Atharva1723 in https://github.com/novuhq/novu/pull/4865
- refactor(ws): Add newrelic metrics and refactor handle disconnect by @scopsy in https://github.com/novuhq/novu/pull/4871
- fix: so not public endpoints is hidden in swagger json by @davidsoderberg in https://github.com/novuhq/novu/pull/4406
- feat(worker): add raw error details for chat channel errors by @jainpawan21 in https://github.com/novuhq/novu/pull/4875
- refactor(providers): Migrate from onesignal-node SDK to the official @onesignal/node-onesignal by @Dhoni77 in https://github.com/novuhq/novu/pull/4840
- Create change on group and feed creation by @djabarovgeorge in https://github.com/novuhq/novu/pull/4849
- docs(providers): Fix syntax mistake by @Atharva1723 in https://github.com/novuhq/novu/pull/4895
- feat(web): Enable to copy on activity item feed - [NV-3056] by @tquocanvn in https://github.com/novuhq/novu/pull/4761
- Added the usage section in the sparkpost by @Atharva1723 in https://github.com/novuhq/novu/pull/4896
- feat: add getstream by @vikaspatil0021 in https://github.com/novuhq/novu/pull/4692
- Refactor : Split event trigger by type by @djabarovgeorge in https://github.com/novuhq/novu/pull/4859
- refactor(dal): improve subscriber preference schema by @scopsy in https://github.com/novuhq/novu/pull/4898
- fix: senderName and subject override for email providers by @jainpawan21 in https://github.com/novuhq/novu/pull/4903
- Add inbound mail Queue to metrics by @Cliftonz in https://github.com/novuhq/novu/pull/4180
- fix: [NV-2841] Fixed issue of channel icons in light theme due to duplicate id in SVG by @Gaurav0493 in https://github.com/novuhq/novu/pull/4358
- feat: added option to override html for emails by @vichustephen in https://github.com/novuhq/novu/pull/4894
- refactor(web): remove unused logrocket by @scopsy in https://github.com/novuhq/novu/pull/4924
- fix: shutdown server on worker not enabled with pm2 by @scopsy in https://github.com/novuhq/novu/pull/4926
- feat(app-gen, worker): Add MetricsService by @rifont in https://github.com/novuhq/novu/pull/4928
- refactor(worker): singleton queue and fix inject issues with queues and workers by @scopsy in https://github.com/novuhq/novu/pull/4929
- fix(worker): addressing type backward compatibility by @djabarovgeorge in https://github.com/novuhq/novu/pull/4934
- feat: add update merged digest flag by @djabarovgeorge in https://github.com/novuhq/novu/pull/4917
- fix(worker): Properly Unescape Button Templates (fixes #4851) by @JoeyEamigh in https://github.com/novuhq/novu/pull/4852
- fix(sdk): Make node sdk topic ITopicPayload types required by @peoray in https://github.com/novuhq/novu/pull/4931
- chore(providers): Upgrade vonage sdk to latest version by @sr-26 in https://github.com/novuhq/novu/pull/4937
- chore(providers,root,api): update axios version to latest - NV-3179 by @scopsy in https://github.com/novuhq/novu/pull/4925
- fix(worker): inbound parse worker initialize by @djabarovgeorge in https://github.com/novuhq/novu/pull/4938
- style(web): Fix add tenant button location by @nick2432 in https://github.com/novuhq/novu/pull/4935
- fix(api): hide create environment api by @jainpawan21 in https://github.com/novuhq/novu/pull/4914
- chore(providers): Update axios versions by @scopsy in https://github.com/novuhq/novu/pull/4940
- chore(providers): Update provider packages for older axios versions by @scopsy in https://github.com/novuhq/novu/pull/4942
- chore(deps): bump tj-actions/branch-names from 5.2 to 7.0.7 in /.github/workflows by @dependabot in https://github.com/novuhq/novu/pull/4948
New Contributors
- @cherfia made their first contribution in https://github.com/novuhq/novu/pull/4652
- @firassziedan made their first contribution in https://github.com/novuhq/novu/pull/4149
- @sachin-duhan made their first contribution in https://github.com/novuhq/novu/pull/4672
- @tvermaashutosh made their first contribution in https://github.com/novuhq/novu/pull/4666
- @ruhani2 made their first contribution in https://github.com/novuhq/novu/pull/4688
- @Khongchai made their first contribution in https://github.com/novuhq/novu/pull/4590
- @git-create-devben made their first contribution in https://github.com/novuhq/novu/pull/4721
- @princerajpoot20 made their first contribution in https://github.com/novuhq/novu/pull/4732
- @im-perativa made their first contribution in https://github.com/novuhq/novu/pull/4704
- @rannn505 made their first contribution in https://github.com/novuhq/novu/pull/4752
- @Dhoni77 made their first contribution in https://github.com/novuhq/novu/pull/4595
- @his-maj-esty made their first contribution in https://github.com/novuhq/novu/pull/4609
- @rohitkbc made their first contribution in https://github.com/novuhq/novu/pull/4323
- @danidee10 made their first contribution in https://github.com/novuhq/novu/pull/3964
- @iknlaxmi made their first contribution in https://github.com/novuhq/novu/pull/4781
- @king-11 made their first contribution in https://github.com/novuhq/novu/pull/4697
- @tquocanvn made their first contribution in https://github.com/novuhq/novu/pull/4761
- @vikaspatil0021 made their first contribution in https://github.com/novuhq/novu/pull/4692
- @Gaurav0493 made their first contribution in https://github.com/novuhq/novu/pull/4358
- @vichustephen made their first contribution in https://github.com/novuhq/novu/pull/4894
- @nick2432 made their first contribution in https://github.com/novuhq/novu/pull/4935
Full Changelog: https://github.com/novuhq/novu/compare/v0.21.0...v0.22.0