@foxglove/ws-protocol-examples
Version:
Foxglove WebSocket protocol examples
262 lines • 7.13 kB
TypeScript
export declare enum BinaryOpcode {
MESSAGE_DATA = 1,
TIME = 2,
SERVICE_CALL_RESPONSE = 3,
FETCH_ASSET_RESPONSE = 4
}
export declare enum ClientBinaryOpcode {
MESSAGE_DATA = 1,
SERVICE_CALL_REQUEST = 2
}
export declare enum StatusLevel {
INFO = 0,
WARNING = 1,
ERROR = 2
}
export declare enum ServerCapability {
clientPublish = "clientPublish",
time = "time",
parameters = "parameters",
parametersSubscribe = "parametersSubscribe",
services = "services",
connectionGraph = "connectionGraph",
assets = "assets"
}
export declare enum FetchAssetStatus {
SUCCESS = 0,
ERROR = 1
}
export type ChannelId = number;
export type ClientChannelId = number;
export type SubscriptionId = number;
export type ServiceId = number;
export type Channel = {
id: ChannelId;
topic: string;
encoding: string;
schemaName: string;
schema: string;
schemaEncoding?: string;
};
type ServiceRequestDefinition = {
encoding: string;
schemaName: string;
schemaEncoding: string;
schema: string;
};
type ServiceResponseDefinition = ServiceRequestDefinition;
export type Service = {
id: number;
name: string;
type: string;
request?: ServiceRequestDefinition;
response?: ServiceResponseDefinition;
/**
* Must be given if request is not given.
* @deprecated Use request instead.
*/
requestSchema?: string;
/**
* Must be given if response is not given.
* @deprecated Use response instead.
*/
responseSchema?: string;
};
export type Subscribe = {
op: "subscribe";
subscriptions: Array<{
id: SubscriptionId;
channelId: ChannelId;
}>;
};
export type Unsubscribe = {
op: "unsubscribe";
subscriptionIds: SubscriptionId[];
};
type ClientChannelSchemaInfo = {
schema: string;
schemaEncoding: string;
} | {
schema?: undefined;
schemaEncoding?: undefined;
};
type ClientChannelBase = {
id: ClientChannelId;
topic: string;
encoding: string;
schemaName: string;
};
export type ClientChannel = ClientChannelBase & ClientChannelSchemaInfo;
export type ClientChannelWithoutId = Omit<ClientChannelBase, "id"> & ClientChannelSchemaInfo;
export type ClientAdvertise = {
op: "advertise";
channels: ClientChannel[];
};
export type ClientUnadvertise = {
op: "unadvertise";
channelIds: ClientChannelId[];
};
export type ClientMessageData = {
op: ClientBinaryOpcode.MESSAGE_DATA;
channelId: ClientChannelId;
data: ArrayBufferView;
};
export type ServiceCallPayload = {
serviceId: ServiceId;
callId: number;
encoding: string;
data: ArrayBufferView;
};
export type ServiceCallRequest = ServiceCallPayload & {
op: ClientBinaryOpcode.SERVICE_CALL_REQUEST;
};
export type ClientMessage = Subscribe | Unsubscribe | ClientAdvertise | ClientUnadvertise | GetParameters | SetParameters | SubscribeParameterUpdates | UnsubscribeParameterUpdates | ClientMessageData | ServiceCallRequest | SubscribeConnectionGraph | UnsubscribeConnectionGraph | FetchAsset;
export type ServerInfo = {
op: "serverInfo";
name: string;
capabilities: string[];
supportedEncodings?: string[];
metadata?: Record<string, string>;
sessionId?: string;
};
export type StatusMessage = {
op: "status";
level: StatusLevel;
message: string;
id?: string;
};
export type RemoveStatusMessages = {
op: "removeStatus";
statusIds: string[];
};
export type Advertise = {
op: "advertise";
channels: Channel[];
};
export type Unadvertise = {
op: "unadvertise";
channelIds: ChannelId[];
};
export type ParameterValues = {
op: "parameterValues";
parameters: Parameter[];
id?: string;
};
export type GetParameters = {
op: "getParameters";
parameterNames: string[];
id?: string;
};
export type SetParameters = {
op: "setParameters";
parameters: Parameter[];
id?: string;
};
export type SubscribeParameterUpdates = {
op: "subscribeParameterUpdates";
parameterNames: string[];
};
export type UnsubscribeParameterUpdates = {
op: "unsubscribeParameterUpdates";
parameterNames: string[];
};
export type AdvertiseServices = {
op: "advertiseServices";
services: Service[];
};
export type UnadvertiseServices = {
op: "unadvertiseServices";
serviceIds: ServiceId[];
};
export type SubscribeConnectionGraph = {
op: "subscribeConnectionGraph";
};
export type UnsubscribeConnectionGraph = {
op: "unsubscribeConnectionGraph";
};
export type FetchAsset = {
op: "fetchAsset";
uri: string;
requestId: number;
};
export type ConnectionGraphUpdate = {
op: "connectionGraphUpdate";
publishedTopics: {
name: string;
publisherIds: string[];
}[];
subscribedTopics: {
name: string;
subscriberIds: string[];
}[];
advertisedServices: {
name: string;
providerIds: string[];
}[];
removedTopics: string[];
removedServices: string[];
};
export type MessageData = {
op: BinaryOpcode.MESSAGE_DATA;
subscriptionId: SubscriptionId;
timestamp: bigint;
data: ArrayBufferView;
};
export type Time = {
op: BinaryOpcode.TIME;
timestamp: bigint;
};
export type ServiceCallResponse = ServiceCallPayload & {
op: BinaryOpcode.SERVICE_CALL_RESPONSE;
};
export type FetchAssetSuccessResponse = {
op: BinaryOpcode.FETCH_ASSET_RESPONSE;
requestId: number;
status: FetchAssetStatus.SUCCESS;
data: ArrayBufferView;
};
export type FetchAssetErrorResponse = {
op: BinaryOpcode.FETCH_ASSET_RESPONSE;
requestId: number;
status: FetchAssetStatus.ERROR;
error: string;
};
export type FetchAssetResponse = FetchAssetSuccessResponse | FetchAssetErrorResponse;
export type ServiceCallFailure = {
op: "serviceCallFailure";
serviceId: number;
callId: number;
message: string;
};
export type ClientPublish = {
channel: ClientChannel;
data: ArrayBufferView;
};
export type ParameterValue = undefined | number | boolean | string | {
[key: string]: ParameterValue;
} | ParameterValue[];
export type Parameter = {
name: string;
value: ParameterValue;
type?: "byte_array" | "float64" | "float64_array";
};
export type ServerMessage = ServerInfo | StatusMessage | RemoveStatusMessages | Advertise | Unadvertise | AdvertiseServices | UnadvertiseServices | MessageData | Time | ServiceCallResponse | ParameterValues | ConnectionGraphUpdate | FetchAssetResponse | ServiceCallFailure;
/**
* Abstraction that supports both browser and Node WebSocket clients.
*/
export interface IWebSocket {
binaryType: string;
protocol: string;
onerror: ((event: any) => void) | null | undefined;
onopen: ((event: any) => void) | null | undefined;
onclose: ((event: any) => void) | null | undefined;
onmessage: ((event: any) => void) | null | undefined;
close(): void;
send(data: string | ArrayBuffer | ArrayBufferView,
/** Options available in Node "ws" library */
options?: {
fin?: boolean;
}): void;
}
export {};
//# sourceMappingURL=types.d.ts.map