Manage customer-linked product instances, service subscriptions and product relations.
A Medusa.js plugin for managing customer-linked product instances and service subscriptions.
The plugin extends Medusa with the ability to manage physical product instances (assets) and related service subscriptions (service instances) linked to individual customers. It supports a wide range of after-sales and post-purchase use cases, such as:
The plugin enhances the Medusa admin interface with new panels for managing assets, services, and product references, enabling rich linking and management flows.
This plugin is used in Open Self Service, a composable customer portal for viewing and managing owned products, warranties, and activating additional services. You can also use the plugin independently.
Install plugin package
yarn add @o2s/medusa-plugin-assets-services
Register plugin in
...plugins: [{resolve: "@o2s/medusa-plugin-assets-services",options: {}}]...
Run DB migrations - This plugin introduces new models in database so you need to execute db migration
npx medusa db:migrate
Although this plugin is generic and can be used independently, it was developed to power one of core backend functionalities of Open Self Service, a frontend portal that allows customers to:
Explore the Open Self Service project to see how this plugin supports real-world industrial self-service scenarios.
You can find admin API definition in repo files.
---config:class:hideEmptyMembersBox: true---classDiagramServiceInstance --> PaymentTypeEnum : hasServiceInstance --> ServiceItemStatusEnum : hasServiceInstance "0..*" <--> "0..*" AssetServiceInstance "1" --> "1" ProductVariantAsset "1" --> "1" AddressAsset "1" --> "1" CustomerServiceInstance "1" --> "1" CustomerAsset "1" --> "1" ProductVariantProductVariant "1" --> "0..*" ProductReferenceProductReference --> ProductVariant_class ServiceInstance{String nameDate startDateDate endDateDate purchaseDatePrice price}class PaymentTypeEnum{ONE_TIMEWEEKLYMONTHLYYEARLY}class ServiceItemStatusEnum{ACTIVEINACTIVERETIRED}class Asset{String nameString serialNumberString thumbnailDate endOfWarranty}class Address{}class ProductVariant{}class Customer{}class ProductReference{SPARE_PARTCOMPATIBLE_SERVICE}