trufflesuite/truffle

View on GitHub
packages/dashboard-message-bus-common/lib/messages.ts

Summary

Maintainability
A
2 hrs
Test Coverage
export interface Message {
  id: number;
  type?: string;
  payload: any;
}

export interface Response {
  id: number;
  payload: any;
}

export type CliEventMessageType = "cli-event";
export const cliEventMessageType = "cli-event";
/**
 * Message to inform subscribers of Truffle CLI event data.
 * The message payload label helps identify the type of event data.
 */
export interface CliEventMessage<T> extends Message {
  type: CliEventMessageType;
  payload: {
    label: string;
    data: T;
  };
}

export type DashboardProviderMessageType = "provider";
export const dashboardProviderMessageType = "provider";
/**
 * Message intended to be passed on to the injected provider of a dashboard instance.
 * The message payload is an RPC request that should be forwarded.
 */
export interface DashboardProviderMessage extends Message {
  type: DashboardProviderMessageType;
  payload: {
    jsonrpc: "2.0";
    method: string;
    params: any[];
    id: number;
  };
}

export type LogMessageType = "log";
export const logMessageType = "log";
/**
 * Message intended to log messages across the message bus.
 * The message payload includes a "debug" namespace as well as a message.
 * This is an internal message type that is not intended to be used by publishers or subscribers.
 */
export interface LogMessage extends Message {
  type: LogMessageType;
  payload: {
    namespace: string;
    message: any;
  };
}

export type DebugMessageType = "debug";
export const debugMessageType = "debug";
/**
 * Message to log in Dashboard browser console
 */
export interface DebugMessage extends Message {
  type: DebugMessageType;
  payload: {
    message: string;
  };
}

export type InvalidateMessageType = "invalidate";
export const invalidateMessageType = "invalidate";
/**
 * Message intended to invalidate earlier messages.
 * The payload is the ID of the message that should be invalidated.
 * This is an internal message type that is not intended to be used by publishers or subscribers.
 */
export interface InvalidateMessage extends Message {
  type: InvalidateMessageType;
  payload: number;
}

export const isCliEventMessage = <T>(
  message: Message
): message is CliEventMessage<T> => {
  return message.type === cliEventMessageType;
};

export const isDashboardProviderMessage = (
  message: Message
): message is DashboardProviderMessage => {
  return message.type === dashboardProviderMessageType;
};

export const isLogMessage = (message: Message): message is LogMessage => {
  return message.type === logMessageType;
};

export const isDebugMessage = (message: Message): message is DebugMessage => {
  return message.type === debugMessageType;
};

export const isInvalidateMessage = (
  message: Message
): message is InvalidateMessage => {
  return message.type === invalidateMessageType;
};

export type MessageType =
  | CliEventMessage<unknown>
  | DashboardProviderMessageType
  | LogMessageType
  | DebugMessageType
  | InvalidateMessageType;