Skip to content

Releases: Joystream/orion

Orion-v3.2.1

09 Jan 17:31
8e8aecb
Compare
Choose a tag to compare

3.2.1

Misc

  • Added index on timestamp fields on Video, Event and OwnedNft entities
  • update docker.yml github workflow to build and publish docker images.
  • added generate-migrations makefile command to generate migrations
  • adds OpenTelemetry tracing integration with graphql-server and auth-server
  • update nodejs version to node:18

Bug Fixes:

  • Extend session based on activity after initial expiry is over.
  • Fix/notification email title.
  • Improves off-chain import/export script

Orion-v3.2.0

06 Dec 13:49
3dc596a
Compare
Choose a tag to compare

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 either EmailSuccess or EmailFailure (which includes an error status).
  • Introduced Read and Unread types to track if a notification has been read. Both are part of the ReadOrUnread 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 and ChannelRecipient.
  • 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 the OperatorOnly middleware, meaning it can only be accessed by operators returning a list of VerifyChannelResults (each contaning the id of the new suspension, the channelId of the suspended channel, and the createdAt timestamp of when the suspension was created)
    • Added excludeChannel mutation (protected by the OperatorOnly middleware) to the GraphQL schema. This mutation is used to exclude a channel. It takes channelId and rationale as arguments and returns an ExcludeChannelResult (contaning the id of the new suspension, the channelId of the suspended channel, and the createdAt timestamp of when the suspension was created)
    • Added suspendChannels mutation (protected by the OperatorOnly middleware) to the GraphQL schema. This mutation is used to suspend. It takes channelIds as an argument and returns a list of SuspendChannelResult (each contaning the id of the new suspension, the channelId of the suspended channel, and the createdAt timestamp of when the suspension was created)
  • 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 of notificationIds 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 of newPreferences 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 the setAccountNotificationPreferences mutation to update each preference.
  • Notification email attepmts and assets
    • Added setMaxAttemptsOnMailDelivery mutation. This mutation sets the maximum number of attempts to deliver an email notification. It takes newMaxAttempts as an argument and returns the new maximum attempts. The mutation is protected by the OperatorOnly middleware.
    • Introduced setNewNotificationCenterPath mutation. This mutation sets the new notification center path. It takes newMaxAttempts as an argument and returns the new maximum attempts. The mutation is protected by the OperatorOnly middleware.
    • Added setNewAppRootDomain mutation. This mutation sets the new application root domain. It takes newRootDomain as an argument and returns an object indicating whether the new root domain was applied. The mutation is protected by the OperatorOnly middleware.

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 the main 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

Orion-v3.1.0

14 Nov 14:53
f9387ae
Compare
Choose a tag to compare

This is a minor release that adds two main features:

  • relevance score booster for a channel
  • A new permission model for non-root Users in order to perform specific authorised tasks

Entities

  • Adds User.permission to the User entity, this however doesn't require migration logic.
  • Adds Channel.channelWeights in order to boost channel relevance. This value can be set via the setChannelWeights mutation by a user with appropriate permission. The RELEVANCE_WEIGHTS env variable now needs to include an additional last parameter for the channel relevance booster. See the .env file for example

Resolvers

  • Adds supports for new permissions model for gateway operator users. Now the root user can assign/revoke operator permission/s to users using grantPermissions & revokePermissions mutations

Orion-v3.0.4

08 Nov 09:23
19dc2ce
Compare
Choose a tag to compare

Description

This is a patch release needed by the Atlas front end to display highest paid channels in the referrals page carousel

Schema changes

  • Adds non null constraint to Channel.cumulativeRewardClaimed as the value is now initialized at 0
  • Adds field Channel.cumulativeReward to keep track from the channel revenue coming from payouts and member transfer

Orion-v3.0.3

03 Nov 09:26
5305427
Compare
Choose a tag to compare

Description

This is a patch release, with minor but important improvements

Optimisation:

  • Solves n+1 query issue on the AssetResolver resolvedUrls field resolver, by reusing storageBagId field if available. Resulting in faster query times and inpacting home page loading speed for front end application significantly. This fix involves only the orion_graphql-server microservice

Misc

  • adds http://localhost:3000 and http://127.0.0.1:3000 as authorized CORS origins for local front end testing

3.0.2

30 Oct 15:50
4484149
Compare
Choose a tag to compare

This is a small patch for a bug arising during utf-8 decoding of the member handle

Bug Fixes

  • uniqueness constraint on Membership entity violated due to correct decoding of the member handle raw bytes

Schema changes

  • uniqueness constraint on the handle field for Membership dropped
  • added a new field rawHandle with a uniqueness constraint on the Membership entity to store raw handle bytes

3.0.1

11 Sep 11:22
002b1f0
Compare
Choose a tag to compare

This is a minor release with the following improvements:

  • Graphql Api changes: Anonymous authentication / login is no longer needed to access the graphql schema at the graphql server endpoint. This should ease apps interaction with the graphql api.

  • Optimizations: Added a btree index to the Video videoRelevance field, to optimize query used by apps to display relevant videos in their home page.

  • Bug Fixes:

    • Added the locking mechanism to prevent multiple asynchronous operation from having concurrent access to Overlay (Orion processor's in-memory cache layer), which otherwise could lead to one asynchronous operation overriding the changes made (to the cache) by the other asynchronous operation.
    • Added migration for account identifier global counter

3.0.0

20 Jul 08:46
8965f66
Compare
Choose a tag to compare

Release Notes

  • Major release introducing the user accounts feature.
  • New authentication API based on the OpenAPI specification, with routes for anonymous authentication, login, account creation, email confirmation, and more.
  • Updated configuration variables for improved customisation and security.
  • Changes to entity models in order to accommodate to the new user account feature
  • Middleware authentication introduced to restrict access to registered users and subsequent changes to queries and mutations, including improved account information retrieval and updated argument structures.
  • Improved documentation with additional tutorials and explainers.

Changelog

https://github.com/Joystream/orion/blob/master/CHANGELOG.md#300

2.3.0

06 Jun 13:08
6f3c654
Compare
Choose a tag to compare

Release notes

  • The values of Video.videoRelevance have changed due to a new video relevance formula. Adjust the weights in the config of your Gateway accordingly based on the information provided in the CHANGELOG.

CHANGELOG: https://github.com/Joystream/orion/blob/master/CHANGELOG.md#230