npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@morgan-stanley/composeui-messaging-message-router

v0.1.0-alpha.11

Published

TypeScript messaging implementation for ComposeUI. It uses the MessageRouter client library.

Readme

ComposeUI Messaging

A TypeScript implementation of the messaging abstraction library using MessageRouter client library.

Installation

This is not an npm package that can be installed. You need to embed the generated bundle into your shell application, similar to how it is handled in the current Shell POC. In that example, a .NET WPF application includes the bundle as an embedded resource. When using WebView2 to load web windows, the application initializes the bundle as a script and injects it into the page. To use this you'll need a system that use messaging abstraction library, and get the implementation from the window.composeui.messaging.communicator object.

Dependencies

  • @morgan-stanley/composeui-messaging-abstractions
  • @morgan-stanley/composeui-messaging-client
  • rxjs

Usage

Basic Messaging


import { IMessaging } from '@morgan-stanley/composeui-messaging-abstractions';
// Initialize the messaging system
const messaging = window.composeui.messaging.communicator

// Subscribe to a topic
const subscription = await messaging.subscribe('my-topic', (message) => {
    console.log('Received:', message);
});

// Publish to a topic
await messaging.publish('my-topic', 'Hello, World!');

// Unsubscribe when done
subscription.unsubscribe();

Service Registration and Invocation

// Register a service
const disposable = await messaging.registerService('my-service', async (request) => {
    return `Processed: ${request}`;
});

// Invoke a service
const response = await messaging.invokeService('my-service', 'test request');
console.log(response); // Output: "Processed: test request"

// Unregister the service when done
await disposable.dispose();

Using with JSON Messaging

import { JsonMessaging } from '@morgan-stanley/composeui-messaging-abstractions';

// Create a JSON-enabled messaging wrapper
const jsonMessaging = new JsonMessaging(messaging);

// Work with typed objects
interface MyData {
    id: number;
    value: string;
}

// Subscribe with type safety
await jsonMessaging.subscribeJson<MyData>('my-topic', (data) => {
    console.log(data.id, data.value);
});

// Publish typed objects
await jsonMessaging.publishJson('my-topic', {
    id: 1,
    value: 'test'
});

API Reference

MessageRouterMessaging

The main implementation of the IMessaging interface using the MessageRouter client.

Methods

  • subscribe(topic: string, subscriber: TopicMessageHandler, cancellationToken?: AbortSignal): Promise<Unsubscribable>

    • Subscribes to messages on a specific topic
    • Returns an unsubscribable object to cancel the subscription
    • TopicMessageHandler is a function that takes a string and returns a Promise of void
  • publish(topic: string, message: string, cancellationToken?: AbortSignal): Promise<void>

    • Publishes a message to a specific topic
  • registerService(serviceName: string, serviceHandler: ServiceHandler, cancellationToken?: AbortSignal): Promise<AsyncDisposable>

    • Registers a service handler
    • Returns a disposable object to unregister the service
    • ServiceHandler is function that either takes string or null and returns a Promise of string or null
  • invokeService(serviceName: string, payload?: string | null, cancellationToken?: AbortSignal): Promise<string | null>

    • Invokes a registered service
    • Returns the service response or null

Contributing

Please see the Contributing Guide for guidelines on how to contribute to this project.

License

Apache License 2.0 - See LICENSE for more information.