interface JSONObject {
  [key: string]: any;
}

interface Message<T = JSONObject> {
  type: string;
  data: T;
}

type CallbackData<T> = (data: T) => void;
