@codesandbox/sdk
Version:
The CodeSandbox SDK
71 lines (70 loc) • 2.58 kB
TypeScript
import { PitcherCapabilities, PitcherPermissions } from "../capabilities";
import { ProtocolError, TMessage, TNotification } from "../protocol";
import { ClientSubscriptions } from "../subscriptions";
export type ClientJSON = {
clientId: string;
username: string;
name: string;
avatarUrl: string | null;
color: string;
/** app id: "vscode", "playjs", "codesandbox", ... */
appId: string;
};
export declare enum ClientAuthorization {
READ = "Read",
WRITE = "Write",
OWNER = "Owner"
}
export declare enum ClientDisposeReason {
AUTHORIZATION_CHANGED = "AuthorizationChanged",
DISCONNECT = "Disconnect",
PITCHER_SHUTDOWN = "PitcherShutdown"
}
export type CommonError = ProtocolError;
export interface ClientJoinParams {
clientInfo: {
protocolVersion: string;
/** app id: "vscode", "playjs", "codesandbox", ... */
appId: string;
};
/**
* This tells pitcher that the client will listen for async progress messages
* If this is false and pitcher is still initializing it will wait with
* sending the result until it's finished with initializing
*/
asyncProgress?: boolean;
subscriptions: ClientSubscriptions;
}
export interface ClientJoinResult {
client: ClientJSON;
workspacePath: string;
version: string;
protocolVersion: string;
latestPitcherVersion: string;
capabilities: PitcherCapabilities;
permissions: PitcherPermissions;
isProtected: boolean;
reconnectToken: string;
}
export type ClientJoinMessage = TMessage<"client/join", ClientJoinParams, {
result: ClientJoinResult;
error: CommonError;
}>;
export type ClientListMessage = TMessage<"client/list", Record<string, never>, {
result: ClientJSON[];
error: CommonError;
}>;
export type ClientMessage = ClientListMessage | ClientJoinMessage;
export type ClientRequest = ClientMessage["request"];
export type ClientResponse = ClientMessage["response"];
export type ClientDisconnectedNotification = TNotification<"client/disconnected", {
clientId: string;
reason: ClientDisposeReason;
}>;
export type ClientConnectedNotification = TNotification<"client/connected", ClientJSON>;
export type ClientUpdatedNotification = TNotification<"client/updated", ClientJSON>;
export type ClientPermissionsUpdate = TNotification<"client/permissions", {
isProtected: boolean;
permissions: PitcherPermissions;
}>;
export type ClientNotification = ClientDisconnectedNotification | ClientConnectedNotification | ClientUpdatedNotification | ClientPermissionsUpdate;