Mosaic products documentation: Concepts, API Reference, Technical articles, How-to, Downloads and tools

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:

R85 ingest filter

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 through graphiql more accessible.

@axinom/mosaic-ui

  • List and DynamicDataList columns now have the option to not specify a propertyName. If a column does not specify a propertyName it must specify a render value. This renderer can then use the full data 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. (#159)

  • Media Service: Fixed an issue with the alignment of the statistics on the Genres details stations (#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 the Pilets: 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 the setupServiceHealthEndpoint method to check if the target service is available for use. If the response contains a HTTP 200 response code, it will return true, else will return false. The method will retry the availability check for a default 15 attempts with an exponential back-off strategy before returning false. 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 #125)

  • Media Service: Fixed an issue when reordering genres and items inside collections (#142 and #143)

  • Media Service: Changed the transaction isolation level used for publishing ot RepeatableRead to avoid deadlocks when publishing multiple entities at the same time. (#132)

  • Media Service: Removed the externalTypes module in favour of the new @axinom/mosaic-managed-workflow-integration package. (#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 the allowEditing property to true. By default, the List will use the dataEntryRenderer for the editing experience of a cell. To control the editing experience for a column more granular, developers can use the new, optional dataEditRender property on the column definition.

  • Fixed an issue where the positionPropertyName property on the DynamicDataList 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 average pgSettings 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 version 0.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 the Button and CompositeButton 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 the DynamicDataList.

@axinom/mosaic-graphql-common

  • A new library @axinom/mosaic-graphql-common is introduced. This library contains all common utility functions related to GraphQL and Postgraphile 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

    Refer this PR for more details on the actual changes.

@axinom/mosaic-portal

  • Deprecated app.registerRouteResolver in favor of app.setRouteResolver for enhanced TypeScript type safety. This change formalizes the contract between workflow registration and resolver consumption by merging the custom resolver registration type RegistrationFunction with @axinom/mosaic-portal

  • Updated app.resolveRoute to require merging @axinom/mosaic-portal type declarations with the custom ResolverFunction for each route resolver. These shared types can now be utilized with the setRouteResolver 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, including Explorer 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 setting disableResizing to true on the column definition. Resizing support for DynamicDataList components will be added in future updates.

    R77 column resizing in effect
  • For CustomFilter, a new prop called selectedValueRenderer 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 by Formik 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 a generateItemLink 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.

    R74 indicators

    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:

R74 admin portal

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.

Note
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 the ApolloErrorMapper is enabled, which makes network errors returned from ApolloClient more user-friendly. Workflows can use the setErrorMappers 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 property showStartedNotification that can be set on the bulk action definition to allow to disable this behavior e.g. for non-asynchronous operations.

  • Section components inside the InfoPanel can now be collapsed by the user. Developers can make a Section render collapsed by default by setting the expandedByDefault property to false.

  • 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 from PageHeaderActionType

  • deprecated enum ActionType removed from Actions component

Documentation

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

@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, and CompositeButton.
    Key Changes:

    • The buttonContext property with the value ButtonContext.Navigation has been deprecated and is no longer used.

    • The default buttonContext has been changed from Navigation to Active. 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 the onButtonClicked and onBlur 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 the showActionButton, 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 - #86, #88, #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. If onActionSelected 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 and confirmationConfig. ** 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 the onActionSelected property. For a Context type action, you only need to remove the actionType 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 component MaskedSingleLineTextField 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 the piral 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 from Delete${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 the Column definitions used in List and Explorer components now allows for defining varying alignment options for each column.

    • The result argument of createUpdateGQLFragmentGenerator 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.

  • @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 using setData. Unlike the already existing getData, 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 the getData method that makes it easier to avoid race conditions when using setData and getData in different workflows.

  • @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 version 0.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.

    Note
    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.

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.

R68 channel playlist

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. (#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. (#50)

  • Improved the speed of the test:reset:dbs scripts (#48)

Libraries

  • Added a CSS class with the environmentId prefixed with env- to the management portal body 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 to registerRouteResolver, getAllRouteResolvers or invoke a certain resolver by using resolveRoute.

  • 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.

    R67 cuepoint video player

    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 to showNotification, updateNotification and dismissNotification 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 to initializeUi, passing over the app 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 existing mosaic-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 the mosaic-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 latest ax_define functions into the databases of each service. Then include a call to the define_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 with setConditionalProperties 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. The addDevPlugins function was removed.

  • 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.

  • 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.

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:

    R60 new breadcrumb
  • 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.

    R56 new encoding processing settings

    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)

Action Required

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)

R42 (April 12, 2022)

R41 (March 29, 2022)

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)

R38 (February 15, 2022)

R37 (December 17, 2021)

R33 (December 6, 2021)

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.