Orion-v3.2.0
3.2.0
This minor but important release adds notifications to the orion infrastructure
Schema changes
- Introduced
NotificationEmailDelivery
entity to handle email notifications. It includes fields for tracking the notification, delivery attempts, and a discard flag. - Added
EmailDeliveryAttempt
entity to track each delivery attempt. It includes a status and timestamp. - Created
DeliveryStatus
union type that can be eitherEmailSuccess
orEmailFailure
(which includes an error status). - Introduced
Read
andUnread
types to track if a notification has been read. Both are part of theReadOrUnread
union. - Started defining a
Notification
entity. It includes fields for the account, notification type, event, status, in-app visibility, creation timestamp, and recipient. - Defined RecipientType as a union of
MemberRecipient
andChannelRecipient
. - Introduced various notification types as part of the NotificationType union. Each type has specific fields relevant to the notification.
- Added
ChannelSuspended, NftFeaturedOnMarketPlace, ChannelVerified, ChannelExcluded, VideoExcluded, NewChannelFollower, CommentPostedToVideo, VideoLiked, VideoDisliked, NftPurchased, CreatorReceivesAuctionBid, NftOffered, DirectChannelPaymentByMember, EnglishAuctionSettled, ChannelFundsWithdrawn, ChannelCreated, CommentReply, ReactionToComment, VideoPosted, NewAuction, NewNftOnSale, HigherBidPlaced, AuctionWon, AuctionLost, BidMadeCompletingAuction, NftRoyaltyPaid
types. Each type includes fields relevant to the specific notification. - Introduced
AccountNotificationPreferences
type to handle user notification preferences. - Added fields for each notification type, each of which is of
NotificationPreference
type. - Channel notifications include:
channelExcludedFromApp, videoExcludedFromApp, nftFeaturedOnMarketPlace, newChannelFollower, videoCommentCreated, videoLiked, videoDisliked, yppChannelVerified, yppSignupSuccessful, yppChannelSuspended, nftBought, creatorTimedAuctionExpired, bidMadeOnNft, royaltyReceived, channelPaymentReceived, channelReceivedFundsFromWg, newPayoutUpdatedByCouncil, channelFundsWithdrawn
.
Member notifications include:channelCreated, replyToComment, reactionToComment, videoPosted, newNftOnAuction, newNftOnSale, timedAuctionExpired, higherBidThanYoursMade, auctionWon, auctionLost, openAuctionBidCanBeWithdrawn, fundsFromCouncilReceived, fundsToExternalWalletSent, fundsFromWgReceived
. - Introduced
ChannelYppStatus
as a union type in the GraphQL schema. This type represents the YouTube Partner Program (YPP) status of a channel.
The ChannelYppStatus can be one of three types:YppUnverified, YppVerified, YppSuspended
.
Resolvers
- Ypp status mutation resolvers have been introduced, intended for the Ypp verification ops team:
- Added
verifyChannel
mutation is protected by theOperatorOnly
middleware, meaning it can only be accessed by operators returning a list ofVerifyChannelResults
(each contaning theid
of the new suspension, thechannelId
of the suspended channel, and thecreatedAt
timestamp of when the suspension was created) - Added
excludeChannel
mutation (protected by theOperatorOnly
middleware) to the GraphQL schema. This mutation is used to exclude a channel. It takes channelId and rationale as arguments and returns anExcludeChannelResult
(contaning theid
of the new suspension, thechannelId
of the suspended channel, and thecreatedAt
timestamp of when the suspension was created) - Added
suspendChannels
mutation (protected by theOperatorOnly
middleware) to the GraphQL schema. This mutation is used to suspend. It takeschannelIds
as an argument and returns a list ofSuspendChannelResult
(each contaning theid
of the new suspension, thechannelId
of the suspended channel, and thecreatedAt
timestamp of when the suspension was created)
- Added
- Notification-related resolvers (accessible only through the
AccountOnly
middleware) are intened for the use with the front end app:- Added
markNotificationsAsRead
mutation. This mutation marks specified notifications as read. It takes an array ofnotificationIds
and returns an object with an array of IDs of notifications that were successfully marked as read. - Added
setAccountNotificationPreferences
mutation. This mutation updates the notification preferences for the current account. It takes an object ofnewPreferences
and returns the updated notification preferences. - Both mutations are protected by the
AccountOnly
middleware, meaning they can only be accessed by authenticated accounts. - Added a helper function
maybeUpdateNotificationPreference
to update individual notification preferences if a new value is provided. This function is used in thesetAccountNotificationPreferences
mutation to update each preference.
- Added
- Notification email attepmts and assets
- Added
setMaxAttemptsOnMailDelivery
mutation. This mutation sets the maximum number of attempts to deliver an email notification. It takesnewMaxAttempts
as an argument and returns the new maximum attempts. The mutation is protected by theOperatorOnly
middleware. - Introduced
setNewNotificationCenterPath
mutation. This mutation sets the new notification center path. It takesnewMaxAttempts
as an argument and returns the new maximum attempts. The mutation is protected by theOperatorOnly
middleware. - Added
setNewAppRootDomain
mutation. This mutation sets the new application root domain. It takesnewRootDomain
as an argument and returns an object indicating whether the new root domain was applied. The mutation is protected by theOperatorOnly
middleware.
- Added
Mail Scheduler module
- mail template generation using mjml (see
./src/auth-server/emails/templates/mjml/notification.html.mst.mjml
) - Introduced functions to handle email notifications.
- Added
getMaxAttempts
function to fetch the maximum number of email delivery attempts from the configuration. - Added
mailsToDeliver
function to fetch all email notifications that have not been discarded. - Added
deliverEmails
function to process each email notification. It creates the email content, executes the delivery, and records the attempt. If the delivery is successful or the maximum number of attempts has been reached, the notification is discarded. - The
deliverEmails
function is called in themain
function, which logs the result of the email delivery process. - The email delivery is meant (for the moment) to be scheduled via chron job (as explained on operator documentation)
Misc
- several unit test have been introduced along with CI checks
- Improved homepage relevance scoring logic
- Refactored migration logic in order to migrate global account counter, which will be used also to migrate Notifications counters in future releases
Environment
- Added
EMAIL_NOTIFICATION_DELIVERY_MAX_ATTEMPTS
environment variable to configure the maximum number of attempts to deliver an email notification, before the scheduler stops attending them - Introduced
APP_ASSET_STORAGE
environment variable to specify the URL where the application's assets are stored. - Added
APP_NAME_ALT
environment variable to set an alternative name for the application. - Introduced
NOTIFICATION_ASSET_ROOT
environment variable to specify the URL where the notification icons are stored.
Documentation
- added documentation for setting up the email scheduler having a Sendgrid account