import { MESSAGE_TYPES, PROTOCOL_VERSION } from "./constants"; import type { SharedEntry, SharedEntryMeta } from "../types"; export type MessageType = (typeof MESSAGE_TYPES)[keyof typeof MESSAGE_TYPES]; interface BaseMessage { protocolVersion: typeof PROTOCOL_VERSION; type: MessageType; key: string; tabId: string; } /** * Message sent by a tab that needs the latest value for a key. */ export interface RequestMessage extends BaseMessage { type: typeof MESSAGE_TYPES.REQUEST; } /** * Message sent in response to a REQUEST. */ export interface SnapshotMessage extends BaseMessage { type: typeof MESSAGE_TYPES.SNAPSHOT; entry: SharedEntry; } /** * Message sent after a local state update. */ export interface UpdateMessage extends BaseMessage { type: typeof MESSAGE_TYPES.UPDATE; entry: SharedEntry; } /** * Message sent when a key is deleted. */ export interface DeleteMessage extends BaseMessage { type: typeof MESSAGE_TYPES.DELETE; meta: SharedEntryMeta; } export type SharedMessage = RequestMessage | SnapshotMessage | UpdateMessage | DeleteMessage; export {};