@gitorial/sync
Version:
Universal sync library for real-time tutorial state synchronization between websites and VS Code extensions with built-in relay server orchestration
70 lines • 2.07 kB
TypeScript
/**
* Client role types for dynamic role switching
*/
export declare enum ClientRole {
UNINITIALIZED = "uninitialized",// Before any session connection
CONNECTED = "connected",// Connected but role undecided
PASSIVE = "passive",// Connected, pushing state to active client
ACTIVE = "active"
}
/**
* Role transfer state tracking
*/
export declare enum RoleTransferState {
IDLE = "idle",
REQUESTING = "requesting",
TRANSFERRING = "transferring",
SYNCHRONIZED = "synchronized"
}
/**
* Role transfer request data
*/
export interface RoleTransferRequest {
requestingClientId: string;
targetClientId: string;
requestTimestamp: number;
reason?: string;
}
/**
* Client role change event data
*/
export interface RoleChangeEvent {
clientId: string;
previousRole: ClientRole;
newRole: ClientRole;
timestamp: number;
}
/**
* Role conflict resolution strategies
*/
export declare enum ConflictResolution {
FIRST_COME_FIRST_SERVED = "first_come_first_served",
DENY_BOTH = "deny_both",
USER_CHOICE = "user_choice"
}
/**
* Role permissions and capabilities
*/
export declare class RolePermissions {
static canSendTutorialState(role: ClientRole): boolean;
static canRequestTutorialState(role: ClientRole): boolean;
static canChooseRole(role: ClientRole): boolean;
static canOfferControl(role: ClientRole): boolean;
static canReleaseControl(role: ClientRole): boolean;
static canRequestControl(role: ClientRole): boolean;
static canAcceptControlOffer(role: ClientRole): boolean;
static canDisconnect(role: ClientRole): boolean;
static isConnected(role: ClientRole): boolean;
static getValidTransitions(currentRole: ClientRole): ClientRole[];
}
/**
* Role state machine for enforcing valid transitions
*/
export declare class RoleStateMachine {
private currentRole;
getCurrentRole(): ClientRole;
canTransitionTo(newRole: ClientRole): boolean;
transitionTo(newRole: ClientRole): boolean;
reset(): void;
}
//# sourceMappingURL=roles.d.ts.map