Older Release Notes
R85 (December 6, 2023)
@axinom/mosaic-message-bus
Messages that are sent and received in Mosaic-based solutions contain now the additional
aggregate_id
and aggregate_type
fields. Those fields are used to describe on the
message level what entity is associated with that message. The aggregate ID field
contains the unique identifier (e.g. database ID) of the entity and the aggregate type
field contains the name of the entity (suggested to use kebab-case). For bulk operations,
the aggregate_id field contains the value MULTIPLE_IDS
, and if there is no unique
identifier (yet) the value UNDEFINED_ID
is used.
DEPRECATION NOTE: Messages that you send to the Managed Services must include an
aggregate_id
and the aggregate_type
in addition to e.g. the message_type
. If you
update the @axinom/mosaic-message-bus
library, the aggregate types are already defined in
the MultiTenantMessagingSettings
objects. Backward compatibility is available but
please check the Planned Deprecations page when the deprecation
date is reached.
@axinom/mosaic-messages
Please upgrade the @axinom/mosaic-messages
in your projects to the latest version as
it includes the new aggregate type and the action (event or command) settings. Those
are required to send commands and help when receiving events.
@axinom/mosaic-cli
The @axinom/mosaic-cli
library was adjusted to create the messaging settings with the
additional aggregate type. The async-api specification files need to be adjusted to
include a tag in the form aggregate-type:<your-type> for all messages like this:
environment-created-event:
tags:
- name: aggregate-type:environment
Mosaic Identity Service
Three messaging events in the ID Service were renamed to be in line with the naming
convention of managed services. The event UserDeleted
was renamed to
UserDeleteFinished
, UserRoleDeleted
was renamed to UserRoleDeleteFinished
, and the
ServiceAccountDeleted
was renamed to ServiceAccountDeleteFinished
. In addition, the
three events UserDeleteFailed
, UserRoleDeleteFailed
, and ServiceAccountDeleteFailed
were introduced for cases where the delete operation failed.
DEPRECATION NOTE: please upgrade to the latest version of the
@axinom/mosaic-messages
library and adjust your code to listen to those messages. After
you switch to the new messages it is recommended that you delete any RMQ Queues created
under the older event names via the RMQ Management UI for good housekeeping.
Mosaic Frontend Samples
The Frontend Samples now support importing & exporting your profiles (in JSON
format).
This will enable better shareability of profiles between your team members.
Mosaic Media Template
The MessagingSettings
were regenerated based on the latest @axinom/mosaic-message-bus
update. The messaging broker publication code was adjusted to include the aggregate ID and
aggregate type.
There is now a new filter on the ingest details station that allows you to filter the list by status (e.g. Success or In Progress), in case there are multiple statuses present:
R83 (November 2, 2023)
Managed Services
-
AxAuth Service: A new field
Enforce Strict Password Policy
is added to the End-User Store Details station in the Admin Portal. This setting will be enabled by default for all End-User stores. You may change it as necessary. Details of the applied policy can be found in the station details. When enabled, the password policy will be enforced for the following scenarios.- End-user sign-up is initiated by providing a password.
- End-user sign-up is completed by providing a password.
- End-user password is reset.
-
We added a way to copy the current user token from the
/About
page. This makes obtaining the token for e.g. performing manual request throughgraphiql
more accessible.
@axinom/mosaic-ui
List
andDynamicDataList
columns now have the option to not specify apropertyName
. If a column does not specify apropertyName
it must specify arender
value. This renderer can then use the fulldata
object, passed as second argument, to render the column content. This makes it easier to have completely calculated columns that will not display the data of a single property. These 'unbound' columns will not be sortable.
R82 (October 19, 2023)
Managed Services
- Video Service: Reworked the video detail stations to show more detailed information about the different streams of a video.
Customizable Services
- Media Service: Fixed an issue where the deployment manifest of the Media Service didn’t declare the
CUE_POINT_TYPES_DECLARE
permission on the video service. (https://github.com/Axinom/mosaic-media-template/pull/159 ) - Media Service: Fixed an issue with the alignment of the statistics on the Genres details stations (https://github.com/Axinom/mosaic-media-template/pull/162 )
@axinom/mosaic-cli
- Added the
unpublish-pilet
command to the Mosaic-CLI. This will allow you to delete a pilet that is no longer required to be published in the microfrontend Pilet Feed. Note that the service account used to perform the operation must have thePilets: Delete
permission.
@axinom/mosaic-service-common
- A new method
setupServiceHealthEndpoint
is introduced to the@axinom/mosaic-service-common
library. It exposes a/health
route on the service API URL, that can be used to check for a HTTP 200 OK response to determine if a service is available for use. Optionally, the response body may also contain an arbitrary JSON document specified by the service that describes the health of individual components of the service. See this PR for more details on its usage. - A new method
isServiceAvailable
is introduced to the@axinom/mosaic-service-common
library. This method will query the route configured via thesetupServiceHealthEndpoint
method to check if the target service is available for use. If the response contains a HTTP 200 response code, it will returntrue
, else will returnfalse
. The method will retry the availability check for a default 15 attempts with an exponential back-off strategy before returningfalse
. See this PR for more details on its usage.
R81 (October 9, 2023)
General
- We’re going to remove support for fields using
NodeId
from the GraphQL APIs of all managed services in the future. If you’re using such fields, please refer to Planned Deprecations for more information and let us know if you have any questions or concerns.
Managed Services
-
Encoding Service got renamed to Video Service, to making it more clear, that the service can now also manage videos that were not encoded by the Axinom Encoding Service (more details on this here).
The change is done in a backward compatible way, so the service currently still supports permissions or messages that are using the old name. However we plan to remove the support of the old name in the future. To find out more details about the deprecation please have a look at our Planned Deprecations page.
-
Image Service: Added a 'Image Upload' webhook. This webhook is called when an image is uploaded. The webhook can be used to validate the image and reject it if it does not meet the requirements.
-
AxAuth: Fixed a bug in the AxAuth Service that requested Management System users to Sign In more frequently than they needed to. The fix is now applied to the refresh cookie issuing logic, and the Sign In session will be valid until the refresh cookie actually expires.
-
Video Service: Existing cue points can now be edited directly inside the list on the cue point management station.
Customizable Services
- The Mosaic Encoding Service was renamed to Mosaic Video Service. This means you should upgrade the mosaic libraries to the latest version which provides you with all the adjustments. The adjustment also affected the RabbitMQ queues that were used for video encodings. Those obsolete queues need to be removed now. Please stop your Media Service instance, deploy the latest version, run
yarn migrate:rmq-video
, and then start the Media Service normally. - Media Service: Added a link that allows navigating to the detail pages of an entity to all selection explorers (See https://github.com/Axinom/mosaic-media-template/pull/125 )
- Media Service: Fixed an issue when reordering genres and items inside collections (https://github.com/Axinom/mosaic-media-template/pull/142 and https://github.com/Axinom/mosaic-media-template/pull/143 )
- Media Service: Changed the transaction isolation level used for publishing ot
RepeatableRead
to avoid deadlocks when publishing multiple entities at the same time. (https://github.com/Axinom/mosaic-media-template/pull/132 ) - Media Service: Removed the
externalTypes
module in favour of the new@axinom/mosaic-managed-workflow-integration
package. (https://github.com/Axinom/mosaic-media-template/pull/124 )
@axinom/mosaic-managed-workflow-integration
- Introducing the
@axinom/mosaic-managed-workflow-integration
library. This library contains type definitions of things shared by managed workflows, making it easier to integrate and maintain the shared elements in your custom code. More details can be found in the@axinom/mosaic-managed-workflow-integration
documentation
@axinom/mosaic-ui
- Added column resizing to the
DynamicDataList
component. - Extended the
DynamicDataList
component to support inline editing. To enable this behavior, set theallowEditing
property totrue
. By default, the List will use thedataEntryRenderer
for the editing experience of a cell. To control the editing experience for a column more granular, developers can use the new, optionaldataEditRender
property on the column definition. - Fixed an issue where the
positionPropertyName
property on theDynamicDataList
component was not used in some cases. - Fixed an issue where content of
List
components could get hidden when resizing columns.
@axinom/mosaic-id-guard
- Added a new method checkSigningKeyExists to the
@axinom/mosaic-id-guard
library. This will be helpful in situations you need to check if a given JWT signature can be verified by the RSA keys currently in use for the Mosaic Environment that issued the JWT.
@axinom/mosaic-db-common
-
We’ve improved the performance of initializing DB transactions when using the
transactionWithContext
method of the@axinom/mosaic-db-common
library. For an averagepgSettings
object with 3 properties (i.e. role, username, permissions). The time taken earlier would’ve been ~150ms and now it’s down to ~50ms.To receive this performance boost, you simply need to update
@axinom/mosaic-db-common
to version0.26.0
or later.
R79 (September 12, 2023)
Managed Services
-
Hosting Service: We now support hosting of customized Mosaic services via the Hosting Service. You can read more about it here.
To get started quickly, we’ve provided instructions on how-to deploy the customized Mosaic Media Template through the Hosting Service. You can follow the steps here.
-
Video Service: We updated the Video Processing Profile to include more processing options such as
Video Format
,Optimize For: Speed/Quality
,Normalize Audio
, etc. You can read more on the configuration options here.
@axinom/mosaic-ui
- An additional property
customIcon
is now added to theButton
andCompositeButton
components for custom icon support. - The styles for the
BooleanViewField
component has been updated to be more consistent with the other form fields. - Integrated
react-beautiful-dnd
to handle reordering of theDynamicDataList
.
@axinom/mosaic-graphql-common
- A new library
@axinom/mosaic-graphql-common
is introduced. This library contains all common utility functions related toGraphQL
andPostgraphile
plugins. These functions and plugins were previously inside@axinom/mosaic-service-common
.- Classes and methods:
- PostgraphileOptionsBuilder
- enhanceGraphqlErrors (previously
graphqlErrorsHandler
in@axinom/mosaic-service-common
) - getWebsocketFromRequest
- Postgraphile Plugins:
- AddErrorCodesEnumPluginFactory
- AnnotateTypesWithPermissionsPlugin
- DeprecateStrayNodeIdFieldsPlugin
- GenericBulkPluginFactory
- GraphiqlManagementModePluginHook
- OmitFromQueryRootPlugin
- OperationsEnumGeneratorPluginFactory
- SubscriptionsPluginFactory
- ValidationDirectivesPlugin
- Classes and methods:
Refer this PR for more details on the actual changes.
@axinom/mosaic-portal
- Deprecated
app.registerRouteResolver
in favor ofapp.setRouteResolver
for enhanced TypeScript type safety. This change formalizes the contract between workflow registration and resolver consumption by merging the custom resolver registration typeRegistrationFunction
with@axinom/mosaic-portal
- Updated
app.resolveRoute
to require merging@axinom/mosaic-portal
type declarations with the customResolverFunction
for each route resolver. These shared types can now be utilized with thesetRouteResolver
method, ensuring consistent type safety across the workflows.
R77 (August 11, 2023)
Managed Services
- Image Service: Focal points on Image Service workflows now allow more precision.
- Channel Service: Items within a program on the channel service can now be re-ordered using drag & drop.
- Channel Service: It is now possible to add multiple items to a program on the channel service at once.
Customizable Services
- Entitlement service: Support for
channels
is now added to the entitlement service.
Admin Portal
- The "saving indicator" feature is also added to the admin portal.
@axinom/mosaic-ui
-
We’ve added column resizing to all
Lists
, includingExplorer
components. To resize, simply drag the column separator. Double click it, to return everything to their default width.
This feature is enabled for all Lists, after updating to this version of the UI-library. Developers can disable that behavior per-column by settingdisableResizing
to true on the column definition. Resizing support forDynamicDataList
components will be added in future updates. -
For
CustomFilter
, a new prop calledselectedValueRenderer
was added which can be used to override the default rendered value. -
Fixed an issue with the
FileUploadControl
that prevented the upload when the same file was selected again on the same component instance. -
The
onChange
event was removed from Form Fields components which are not managed byFormik
directly. -
Fixed an issue with some home tiles not rendering correctly. *-
SelectionExplorer
components will now render an inline menu with a link to the details of the item, if agenerateItemLink
property is provided.
Mosaic Frontend Samples
- Added
channel
support to relevant FE sample scenarios. - The Mosaic Frontend Samples now includes a utility script that allows you to start a localhost
proxy
for routing the traffic to the hosted Mosaic User Service. This will allow you to run the Mosaic Frontend Samples (or a similar custom frontend application) on your localhost, and connect it successfully with the hosted Mosaic User Service and get the full Authentication functionality working without any issues for setting cookies in different domains top-level domains. See the PR for more details.
R75 (July 24, 2023)
Management System
-
Introducing Indicators:
Enabling developers to add custom indicators to the Management System, to give users information independent of the stations they are currently on.We also added a well-known "saving indicator" to the Management System. This will be used by
FormStation
components to indicate when the form is having unsaved changes or it is currently saving.
You can find more information about the new feature in the @axinom/mosaic-portal documentation. -
Reduced size of the tiles on the landing page.
Admin Portal
- New color scheme for the Admin Portal. Making it easier distinguishable from the Management System:
Managed Services
- AxAuth: Fixed a bug that throws a webhook invocation error sometimes during End-User sign-up and password reset.
Customizable Services
- Vod-to-Live service: Added a this service as experimental implementation for a Vod-to-Live service using Unified Virtual Channels to the media template. This service demonstrates how the output of the Channel Service can be used to create a 24/7 linear channel from a playlist of VOD entities.
Check out it’s README for more details on this service, or the VOD-to-Live Service documentation for more details about the concept.
This service is experimental and has to be built and started manually. It will not get started automatically with the dev:services
scripts on the root package.json.
- Media Service: Improved TV Show, Seasons, Episode workflows:
-
Added parent entity information in the info panels for the Season and Episode details stations, allowing to navigate to the parent entity directly from the info panel.
-
Added parent entity columns and filters for the Season and Episode explorer stations.
Check out this PR for more details.
-
- Media Service: Added video cue point support to Media and Catalog services. See this PR for more information.
- Entitlement Service: Added support for entitlement requests for channels. See this PR as well as this PR for more details.
@axinom/mosaic-ui
- Introducing
errorMappers
: Error mappers are functions that can be used to transform an error before it is shown to the user. Out of the box theApolloErrorMapper
is enabled, which makes network errors returned fromApolloClient
more user-friendly. Workflows can use thesetErrorMappers
method to change the mappers that should be used in a particular workflow. - Bulk operations on
Explorer
components are triggering a notification whenever they get started to give the user the feedback that the operation was successfully started. This may not be needed for all bulk operations, so we added a new, optional propertyshowStartedNotification
that can be set on the bulk action definition to allow to disable this behavior e.g. for non-asynchronous operations. Section
components inside theInfoPanel
can now be collapsed by the user. Developers can make aSection
render collapsed by default by setting theexpandedByDefault
property tofalse
.- Adding a new Filter component:
MultiOptionFilter
, allowing users to select multiple options in one Filter: Storybook FormStation
now shows an error when a navigation attempt or an action execution got canceled because of an invalid form. This allows users to better understand why the intended action was not performed, especially in long forms where the inline validation messages may appear only off-screen.- deprecated
Navigation
option removed fromPageHeaderActionType
- deprecated enum
ActionType
removed fromActions
component
Documentation
- Added a how-to-guide showcasing how you can debug the scenarios published in the Mosaic FE Samples to help you better understand the interactions and integrations. You can read more here.
- Added documentation for all functionalities offered by the PiletApi exposed by
@axinom/mosaic-portal
. You can read more here.
R73 (June 15, 2023)
Services
- The ID Service now displays more details for the Identity Provider related error messages that may occur during user authentication. Displaying these hints will help administrators to troubleshoot scenarios such as expired IDP secrets or invalid IDP secrets.
- The AxAuth Service will now display the "Email Verified" column in the Admin Portal. This should now make it more clear to the administrators what the current state of the user is. It will also be possible to manually trip the value of this field via the Admin Portal if needed.
@axinom/mosaic-portal
- We extended the documentation of the @axinom/mosaic-portal package with descriptions of each of the available methods on the
PiletApi
object. This should make it easier to understand what each method does and how to use it.
@axinom/mosaic-ui
- With this release we applied the changes to the Navigation and Context that were introduced to the Detail pages and Inline Menus in R72 also to the
PageHeaderActions
.
With these changes, page header actions can now be rendered as either an anchor tag or an element with a JavaScript click handler, depending on the properties specified.
The corresponding changes on the media template were implemented in this PR. - This release also introduces support for anchor tag rendering in the following components:
Button
,TextButton
, andCompositeButton
.
Key Changes:-
The
buttonContext
property with the valueButtonContext.Navigation
has been deprecated and is no longer used. -
The default
buttonContext
has been changed fromNavigation
toActive
. As a result, buttons of these components will now have a dark blue background color by default instead of light blue. -
For buttons of the
Navigation
type in these components, use the path property instead of theonButtonClicked
andonBlur
action handlers, as well as the type property. This will render a link instead of a button. -
Examples:
/** to render a button element */
<Button icon={IconName.X} type="button" onButtonClicked={()=>{}}/>
/** to render an anchor element */
<Button icon={IconName.X} path="/home" />
-
- The
List
component now also accepts a function as value for theshowActionButton
, allowing to decide row-by-row whether or not to show render an action button.
R72 (June 6, 2023)
Services
- User Service now has a new Webhook that will be called when a new User is created. This will help you to track/maintain a list of users in an external system.
You will see the new Webhook in the Admin Portal when you visit the User Service configuration station. - Mosaic Frontend Samples received a new update, and this time we introduced scenarios targeting use-cases around the Personalization Service.
You can find the the changes made via these PRs - https://github.com/Axinom/mosaic-frontend-samples/pull/86 , https://github.com/Axinom/mosaic-frontend-samples/pull/88 , https://github.com/Axinom/mosaic-frontend-samples/pull/100 . - We added actions to allow editors to directly launch the "New" workflow of the corresponding entity type from all Selection Explorers.
This will allow editors to quickly trigger the create workflow without the need to manually navigate to the corresponding workflow first.
The corresponding change the media template can be found in this PR.
@axinom/mosaic-ui
- With this update, we made some changes to the interfaces and behavior for Navigation and Context type actions on Detail pages as well as Inline Menus:
-
Previously, the
actionType
property was used to determine the type of action. This property has been removed. The action will determine its type from the properties it gets. -
If a
path
is provided, the action will be rendered as a Navigation type action. IfonActionSelected
is provided, the action will be rendered as a Context type action. -
Navigation actions will now render as anchor tags and can not trigger any side effects beside navigation.
-
Context actions will continue to render with a click handler that allows any code to be executed and also allow for confirmation options using
confirmationMode
andconfirmationConfig
. -
The color of the action will be dependent on the type of action, giving the editor a clearer understanding of what an action will do.
Please note that all actions will be displayed and behave as Context type actions if no changes are made. To migrate a Navigation type action, simply provide a
path
and remove theonActionSelected
property. For a Context type action, you only need to remove theactionType
property. Here is an example:// Before migration
const action: ActionData[] = [
{
label: 'Navigation Action',
onActionSelected: () => history.push('/station-name')
},
{
label: 'Context Action',
onActionSelected: () => {}
actionType: ActionType.Context
},
];
// After migration
const action: ActionData [] = [
{
label: 'Navigation Action',
path: 'station-name',
},
{
label: 'Context Action',
onActionSelected: () => {}
},
];The corresponding changes on the media template were implemented in this PR.
-
- Introduced a new component
MaskedSingleLineText
which can be used for use cases which require masking in the input field. An additional componentMaskedSingleLineTextField
is introduced to be used within Forms. To play around with the new component please visit the Mosaic Storybook. - The published version of the ui library now ships with source maps. This will allow you to debug your application more easily.
R71 (May 23, 2023)
General
- With this release we upgraded the
media-template
to the latest LTS version of Node.js (version 18) and upgraded several other dependencies to newer versions, including thepiral
packages. (see this PR for more details) - We rolled back our usage of the
importmaps
feature, as we were experiencing some issues with the way it is handling peerDependencies. We will re-introduce it in the future when the issues are resolved. For now we recommend to not make use of this feature in your own Pilets.
Managed Services
deleted${EntityName}NodeId
fields are deprecated fromDelete${EntityName}Payload
graphql schema types for most Managed Mosaic services. They were always returning null before and not used. These fields will be completely dropped in the future.- Video Service: Added a mute button for the video player on the cue point management station. Also improving the error messages in case the playback fails because of invalid DRM configurations.
- Channel Service: Improved error messaging when adding invalid program entities to a playlist.
Libraries
- @axinom/mosaic-ui:
- Added a new optional property
horizontalColumnAlign?: 'left' | 'center' | 'right'
to theColumn
definitions used inList
andExplorer
components now allows for defining varying alignment options for each column. - The
result
argument ofcreateUpdateGQLFragmentGenerator
does now also support querying of nested fields. - We upgraded our Storybook to the latest version of Storybook. The stories now include more control options, making stories even more interactive. They now also display the TypeScript type annotations of the component props giving more information about the components directly inside Storybook.
- Better disabled styles and focus indicators for different form elements.
- Fixed an issue where station message bodies were displayed below the station content.
- Added a new optional property
- @axinom/mosaic-portal:
- Extended the
PiletApi
with a new method:getDataHelper
. It helps to retrieve data from Portal data store set by other pilets/workflows usingsetData
. Unlike the already existinggetData
, this method waits for the data to be set if not available immediately and then executes the callback passing in the data as argument. It’s a wrapper around thegetData
method that makes it easier to avoid race conditions when usingsetData
andgetData
in different workflows.
- Extended the
- @axinom/mosaic-e2e-page-model:
- Selectors to support e2e tests for toast notifications added. Toast message selectors are available in page model under `uiShell.notifications`` property.
R69 (April 26, 2023)
General
-
With this release we upgraded
Piral
to version0.15.8
.This change is backward compatible for Pilets built with older versions of
Piral
.However with the upgrade we also started to make use of
importmaps
for our managed Pilets to allow for quicker loading times of the management systems. Because of this change, the managed pilets will make them stop working when using older versions of@axinom/mosaic-portal
as emulator during development time.No worries, this is only affecting the development time. When the Pilet is published through the Microfrontend Service it will always run using the latest version of mosaic-portal.
To make the managed workflows working again on development time, please update the devDependencies for
@axinom/mosaic-portal
in your workflow(s) to the latest version.
It is recommended to always update the version of @axinom/mosaic-portal
frequently to minimize differences between development- and production-runtime.
From now on, the @axinom/mosaic-portal
will also warn you during development time if you’re using an old version of the emulator.
- Added the
helmet
middleware to all services for increased security.
We don’t expect any impact on applications caused by these changes. If you still encounter some issues, please let us know.
Managed Services
- User Service: When you update to the latest version of
@axinom/mosaic-user-auth
library, it will be possible to receive more granular response codes than before during Sign In errors, so that your FE application can provide more meaningful error messages. - Video Service: Adding support for PerScene encoding mode, for smaller video output file sizes while maintaining quality.
- Channel Service: Many fixes and smaller improvements on the channel management workflows.
Libraries
- @axinom/mosaic-ui:
- Introducing a new filter type:
FilterTypes.SearcheableOptions
. This filter consist of a text input where a user can enter search values and a list of options that match the query.This can be used to make filters with many options (potentially asynchronously loaded) more user friendly. - Visual improvements for
SelectionExplorer
. - Some fixes for better support of Safari browsers.
- Introducing a new filter type:
R68 (April 10, 2023)
Introducing Channel Service
With this release we’re introducing the latest addition to our managed Service - the Channel Service.
This service is designed to give you the ability to create and manage your own channels and curate playlists for these channels. You can add your existing VOD entities from e.g. your media service to the playlists, optionally define ad breaks using the cue-points and publish them to allow them to be consumed by services that will power e.g. a Free ad-based streaming TV (FAST) experience for your end users.
More information about the service can be found in the Channel Service documentation.
Managed Services
- Added a toggle to the admin portal settings of the Video Service to enable or disable the Video Preview for Cue Points feature. This feature is enabled by default but it allows to opt-out from the feature in case video playback management system is not possible or intended in your use case.
- Fixed a bug in Hosting Service where the RabbitMQ Connection details station in the Admin Portal would show incorrect hostname. The correct values are displayed now.
Media Template
- Added a main video filter for Movie/Episode Explorers, allowing to filter out entities that do not have a main video assigned. (https://github.com/Axinom/mosaic-media-template/pull/54/ )
- Added a
DEMO_MODE
to the Video Service, which allows to skip the webhook secret validation. This is useful for demo purposes and is not recommended for production use. (https://github.com/Axinom/mosaic-media-template/pull/50 ) - Improved the speed of the
test:reset:dbs
scripts (https://github.com/Axinom/mosaic-media-template/pull/48 )
Libraries
- Added a CSS class with the environmentId prefixed with
env-
to the management portalbody
element, allowing environment-specific CSS rules. This is useful to make the portal look different for different environments, e.g. to make it more obvious that you are (not) in production. - Added a new extension to the Management Portal shell to allow the registration and usage of
RouteResolvers
. Workflows can register resolvers for specific routes that other workflows can then use to resolve the route. This is useful for workflows that need to navigate to a route that is not known to them, but is known to another workflow. This is for example used on the new Channel Service to create the links to the detail pages of the entities inside a playlist which are not known to the playlist workflow but are provided by the media workflows. The new methods allow toregisterRouteResolver
,getAllRouteResolvers
or invoke a certain resolver by usingresolveRoute
. - Bulk actions triggered by an
Explorer
component will now trigger a toast notification when the action is started and another one in case that the backend returns an error. This will help the user to understand if the action was successful or not. - Fixed a bug in
@axinom/lib-id-guard
where the JWKS caches were not always used. This would result in making more calls than needed to fetch the public RSA keys when executing GQL requests.
Frontend Samples
-
We’ve added more scenarios for the Mosaic FE Samples application. These new scenarios will showcase how to use the Mosaic Billing Service with the Stripe payment connector.
You can checkout the source over here or play around with the live demo over here.
Stripe Payment Connector
-
The payment connector service will no longer use ENV vars for supplying redirect URLs that are used during the payment flows, and instead will use those that are configured in your Billing Service admin area.
You can see the change over here.
R67 (March 21, 2023)
Managed Services
-
We added a video player to the cue point management station of our Video Service, to allow editing cue points very conveniently by picking the timing directly from the video itself.
This feature will work out of the box for non-DRM protected videos, which are stored on a publicly accessible storage.
If your videos are DRM protected or the manifest is not accessible directly through the storage URL, you can use the Admin Portal to configure the “Manifest” and “Entitlement” Webhooks we introduced in R65.
The Manifest webhook can be used to instruct the Management System the correct URL that should be used to playback the video.
The Management System uses the Entitlement webhook whenever a DRM protected video should be played. The webhook should validate the request and return an entitlement token if the playback is permitted.
The Entitlement Service on our Media Template is already implementing both webhooks, so you can take that implementation as inspiration - or even configure your version of the entitlement service as target for these Webhooks.
-
We added the option to change and delete existing webhook configurations on our Video Service.
-
Fixed a bug which allowed to create a New IDP Connection in User Service for AxAuth, when the AxAuth User Store did not have a valid OAuth Client. Now there will be an exception to stop this.
Media Template
- The entitlement message included also empty DRM keyIds when some streams were not DRM protected (e.g. subtitle or closed-caption streams). Empty keyId values are now excluded.
Frontend Samples
-
We’ve added more scenarios for the Mosaic FE Samples application.
These new scenarios will showcase how to use the Mosaic Billing Service for managing your End User subscriptions
You can checkout the source over here.
R65 (March 08, 2023)
General
-
We added the capability to raise toast notifications to the
@axinom/mosaic-portal
. There are now three new methods toshowNotification
,updateNotification
anddismissNotification
which can be used to trigger toast notifications inside your workflows.We plan to add more usage of these (and other APIs) inside also the components coming from
@axinom/mosaic-ui
. So make sure you add a call toinitializeUi
, passing over theapp
object (like this), to allow the components to also leverage these features on the shell application to e.g. automatically raise toast notifications in relevant situations. -
The RabbitMQ vhosts that are used by the customizable-services are now created with following limits. We don’t expect this to affect any of your currently running customized-services as the limits are fairly generous.
Please contact Axinom Support if you have any special requirements in this regard.
max-connections = 10
max-queues = 150
-
Due to a change in how Postgraphile subscription lifecycle methods are executed, we’ve now updated all
Postgraphile
and related libraries to the latest minor version, and also released a new version of@axinom/mosaic-id-guard
to handle the new approach of subscription authorization.The following combinations of libraries should play well together when it comes to authorizing GQL subscriptions:
graphile-build@4.12.2, graphile-build-pg@4.12.2, graphile-utils@4.12.2, postgraphile@4.12.4
+mosaic-id-guard@0.17.0
graphile-build@4.13.0, graphile-build-pg@4.13.0, graphile-utils@4.13.0, postgraphile@4.13.0
+mosaic-id-guard@0.18.0
Action Points:
-
If you are on
postgraphile@4.12.4
or below, and do not intend to upgrade it - no change is required, the existingmosaic-id-guard@0.17.0
or below would work fine with it. -
If you are expecting to upgrade to
postgraphile@4.13.0
or later, then themosaic-id-guard
library would need to be upgraded along with it to match as mentioned above.- You can find details about the needed change in this PR.
-
We improved the performance of row-level-security database permission checks.
The corresponding changes on the media template were added in this PR. To manually upgrade an existing customized version based on the media template please upgrade the mosaic libraries to the latest version. Then call the
util:define-func-migration
scripts in all the projects to get the latestax_define
functions into the databases of each service. Then include a call to thedefine_authentication
function into a new database migration for every protected table like:SELECT ax_define.define_authentication('<your view permissions>', '<your edit permissions>', '<table name>', 'app_public');
Managed Services
-
The Image and Video Service will now send an error message in case a image type or cue point type is already registered by another service. Services can now subscribe to the error message and handle it accordingly.
-
The Video Service now allows the configuration of two new webhooks. A Manifest webhook that should return a manifest URL to use for the video playback and an entitlement endpoint that grants an entitlement message to play back a DRM protected video. These are preparations for new features that will be released in the future, and will allow the management System to playback videos. The webhooks can be configured in the 'Video Service' settings inside the Admin Portal.
-
Fixed an issue in Video Service where the source video file extension was always set as
.mp4
even for other source video file types. -
We have improved the integration of AxAuth Service and User Service. This will now make it straightforward to pick the “User Store” you want to use from AxAuth Service when configuring the AxAuth IDP in the User Service.
Please read more details about it here.
-
We have fixed a bug in the User Service which resulted in an exception during 'Sign In with Credentials' if the 'Allowed Proxy URLs' were not configured under User Service configuration.
-
The Billing Service exposes now the PayPal related (non-secret) settings as part fo the GraphQL API. Consuming applications can now use those values and don’t need to configure them in every application.
-
When a user subscribed to a subscription plan using the Billing Service he is redirected back from e.g. PayPal to the webpage from where he started the subscription workflow. The corresponding URLs are configured in the admin portal. When those URLs contained a GET parameter, the parameter was missing when redirecting the subscriber. This is now fixed to retain all GET parameters.
-
Fixed a bug on Hosting Service where in some intermittent situations, you receive an error 'Database already exists' when attempting to deploy a service that was previously deployed, and then undeployed.
-
We have added new scenarios to Mosaic Frontend Samples that demonstrates how to use the Image Service as well as how to subscribe to a subscription plan using the Billing & Monetization Services.
Libraries
- The
PostgraphileOptionsBuilder
from@axinom/mosaic-service-common
got updated:- the constructor parameters were moved to a dedicated function
setDefaultSettings
- the
setDevProperties
was dropped and replaced withsetConditionalProperties
to be more flexible on when to use specific properties - the function
addConditionalPlugins
was added to enable fine granular decisions which plugins should be added e.g. in a development, testing, or production area and similar. TheaddDevPlugins
function was removed.
- the constructor parameters were moved to a dedicated function
- Improved the
validateWebhookRequest
method to support both, the raw request body and an already parsed JSON object for the webhook validation.
R63 (February 09, 2023)
This is the 1st release we’re making for the year 2023, and we’re bringing some goodies your way to make up for the long wait!
- Revamped navigation with the new Navigation Panel
- We’ve introduced a new
Navigation Panel
into the Management System that will make it faster to find what you’re looking for in less steps. - You can read more details about the Navigation Panel over here.
- We’ve introduced a new
- Deploy Mosaic Media Template via the Hosting Service
- We’ve extended the
Hosting Service
to be capable of provisioning necessary infrastructure and deploying customizable services from Mosaic Media Template to your environments. - You can read more details about deploying customizable services over here.
- We’ve extended the
R60 (December 16, 2022)
-
With this release we remove the support for the deprecated messages mentioned in R55. If you didn’t update your solution yet, please find the instructions below.
-
The
VideoStream
data type on the Video Service was added to describe all the video, audio, subtitle, and closed caption streams within a video. These stream objects are providing detailed information about the different representations of the encoded video. Please note that these values may only get filled for newly encoded videos. -
Introducing an improved breadcrumb in the management system as well as the admin portal, making better use of the available space and also visually more light-weight:
-
We reduced the bundle size of
@axinom/mosaic-ui
by ~35% which should result in better loading times of the management system. We will continue looking into improving loading times in future releases. -
Various other improvements, fixes and preparations for future features.
-
Release 60 of Mosaic Media Template
R58 (November 28, 2022)
- Various improvements, fixes and preparations for future features.
- Release 58 of Mosaic Media Template.
R56 (October 25, 2022)
-
Introducing improved ways to handle errors in Mosaic services. More details can be found at Error Handling Development Guide (Basic).
-
Adding three new configuration options for Processing Profiles on Video Service.
More information about the features can be found on the information text on the station or in the Content Processing documentation.
-
The Mosaic Media Template is now available on Github
-
Various other improvements and fixes.
-
Release 56 of Mosaic Media Template.
R55 (October 12, 2022)
- Mosaic Media Template R55 is published
With this release we aligned the names of event and command messages that are sent via the RabbitMQ message bus. We use now consistently a naming pattern of entity/task + actionable verb
for commands and entity/task + past tense verb
for events in all places.
Our services will be compatible with both, the old and the new event and command messages until November 14th 2022. After that date we’re planning to stop supporting messages using the old names. Please make sure to update your solution as described below until that date or let us know if this is not feasible for you.
To update your solution, please update the @axinom/mosaic-messages
package to the latest version, then execute yarn
and yarn build
from the solution root. If this does result in some errors in your messaging implementation please adjust the following types:
Service | Old Message Name | New Message Name | Old Settings Name | New Settings Name |
---|---|---|---|---|
ID Service | SynchronizePermissionsStartCommand | SynchronizePermissionsCommand | SynchronizePermissionsStart | SynchronizePermissions |
Video Service | EnsureVideoExistsStartCommand | EnsureVideoExistsCommand | EnsureVideoExistsStart | EnsureVideoExists |
Video Service | ArchiveVideosStartCommand | ArchiveVideosCommand | ArchiveVideosStart | ArchiveVideos |
Image Service | EnsureImageExistsStartCommand | EnsureImageExistsCommand | EnsureImageExistsStart | EnsureImageExists |
Image Service | ImagesArchivedEvent | ArchiveImagesFinishedEvent | ImagesArchived | ArchiveImagesFinished |
Monetization Grants Service | SynchronizeClaimDefinitionsStartCommand | SynchronizePermissionsCommand | SynchronizeClaimDefinitionsStart | SynchronizeClaimDefinitions |
Commands are accepted in a backward-compatible way and the queues to handle the commands are within our managed services. So no adjustment is required.
Events are also sent in a backward-compatible way. Some target queues were renamed to follow a consistent naming schema. Once you are done with your migration you can delete the following queues - they only exist if you subscribed to the corresponding events:
- ID Service based event queues:
synchronize_permissions.finished
synchronize_permissions.failed
user.deleted
user_role.deleted
- Video Service based event queues:
ensure_video_exists.start
archive_videos.start
ensure_video_exists.already_existed
ensure_video_exists.creation_started
ensure_video_exists.failed
archive_videos.finish
- Image Service based event queues:
ensure_image_exists.start
image.archive
ensure_image_exists.already_existed
ensure_image_exists.image_created
ensure_image_exists.failed
images.archived
- Monetization Grants Service based event queues:
synchronize_claim_definitions.start
synchronize_claim_definitions.finished
synchronize_claim_definitions.failed
R54 (September 22, 2022)
- Mosaic Media Template R54 is published
- The Video Service was upgraded to support Cue point management, including a first simple management workflow.
R53 (September 06, 2022)
- Mosaic Media Template R53 is published
- The Hosting Service receives the alpha version of service-deployment support for early adopters.
R52 (August 24, 2022)
- Mosaic Media Template R52 is published
- We have now published a new open-source repository that will give best practices for FE developers who plan on integrating with Mosaic Services. More details of the Mosaic Frontend Samples can be found here
R51 (August 11, 2022)
- Mosaic Media Template R51 is published
- The
mosaic-ui
library was updated to provide support for Explorer stations to use GraphQL Subscriptions for identifying dirty states. Now when you are viewing data on an Explorer station, and if some of that displayed data is mutated by another user, the Explorer station will show a notification to the user indicating the displayed data maybe stale and a refresh maybe required.- This logic is currently implemented on Image & Video explorers.
R50 (August 01, 2022)
- Mosaic Media Template R50 is published
- The Video Service now has the ability to configure content acquisition and publishing profiles with AWS S3 as well. Earlier it only supported Azure storage accounts.
- Similar to above feature, the Image Service also now supports configuring acquisition profiles with AWS S3.
R48 (July 19, 2022)
- Mosaic Media Template R48 is published
- Improved loading times of the Management System by distributing the microfrontend Pilets to be served via object-storages rather than by the service. This should significantly improve the waiting time of the CMS initial load.
R47 (June 20, 2022)
- Mosaic Media Template R47 is published
- Preliminary support to use the User Service on native devices (i.e. Android) was added. Current
mosaic-user-auth
was updated to work with React Native to offer this compatibility.
R46 (June 06, 2022)
- Mosaic Media Template R46 is published
- The Hosting Service is now promoted as a core-service. What this means is, it will always be enabled for every environment created via the Admin-Portal, and it cannot be disabled. This service will be also responsible for generating the Rabbit MQ Connections required for the customizable services, and the corresponding stations to configure them are moved under Hosting Service.
R45 (May 23, 2022)
- Mosaic Media Template R45 is published
- Several improvements and bug-fixes to the managed workflows were made.
- User Role Permissions station now applies correct filters.
- Video details station now has a re-encode action in the UI.
R44 (May 16, 2022)
- Mosaic Media Template R44 is published
- The Billing Service is now ready for Production usage. It supports the PayPal provider out-of-the-box, with both
redirect
&pop-up
based flows. - An improvement was made for the Micro-FE Service to support publishing pilets with dynamic target URLs (build-once & deploy anywhere). This will significantly streamline build pipelines of the customized workflows, and now you do not need to rebuild the same workflow with different deployment target URLs.
R43 (April 26, 2022)
- Mosaic Media Template R43 is published
- A big documentation update was pushed describing one of the most commonly used scenario Media Service Publishing.
R42 (April 12, 2022)
- Mosaic Media Template R42 is published
- The Billing Service was updated to allow configuring Payment Providers via the Admin Portal.
R41 (March 29, 2022)
- Mosaic Media Template R41 is published
- The User Service now supports Delegated Access Tokens, a feature that would cut down the time needed to migrate pre-existing end-user stores into the Mosaic User Service stores.
R40 (March 10, 2022)
- Mosaic Media Template R40 is published
- The
Google
Identity Provider used for the Management System now supports to be configured in one-click via the 'Use Built-In IDP' setting in the admin-portal. - The Management System received an update with new workflow stations to browse and manage End-Users created via the User Service.
R39 (February 24, 2022)
- Mosaic Media Template R39 is published
- The Billing Service how has an end-user facing API and supports PayPal as a payment provider.
R38 (February 15, 2022)
- Mosaic Media Template R38 is published
- First version of the Entitlement Service is included to the Mosaic Media Template. This is a customizable service showing how to generate an Entitlement Message for the DRM License Service to enable playback of DRM-protected videos.
- Communication to Video Service is now using Mosaic Service Accounts
- User Service - AxAuth support - possibility to register end-users with an email and password without using an external identity provider
- User Service - Support for custom Identity Providers
- Initial version of the Hosting Service now allows manage storage accounts via the Admin Portal.
R37 (December 17, 2021)
- Mosaic Media Template R37 is published
- An alpha version of the Monetization Service API is now available for testing by early adopters.
R33 (December 6, 2021)
- Mosaic Media Template R33 is published
- First version of the Personalization Service is now available for use from our Managed Services offering.
- Documentation for User Service and related libraries are now updated. Read more details at User Service Lib Documentation
R32 (November 30, 2021)
- Mosaic Media Template R32 is published
- User Service is available in the initial scope
- GraphQL Subscriptions now support authentication & authorization. This support is added via the
mosaic-id-guard
library.