import type { ActionOrActionTupleFromAction, AnyAction, CheckedReconciliatoryActions, ToCheckedAction } from '../action'; import type { CheckedState, Checksum, MovexClientResourceShape, IOPayloadResult, MovexClient, ResourceIdentifier, SanitizedMovexClient } from '../core-types'; import { MovexMasterContext } from '../masterContext'; export type IOEvents = { /** * The following events are directed from Client to Master * */ createResource: (p: { resourceType: TResourceType; resourceState: TState; resourceId?: string; }) => IOPayloadResult, unknown>; addResourceSubscriber: (p: { rid: ResourceIdentifier; clientInfo?: MovexClient['info']; }) => IOPayloadResult, unknown>; getResourceState: (p: { rid: ResourceIdentifier; }) => IOPayloadResult, unknown>; getResourceSubscribers: (p: { rid: ResourceIdentifier; }) => IOPayloadResult['subscribers'], unknown>; getResource: (p: { rid: ResourceIdentifier; }) => IOPayloadResult, unknown>; emitActionDispatch: (payload: { rid: ResourceIdentifier; action: ActionOrActionTupleFromAction; }) => IOPayloadResult<({ type: 'ack'; nextChecksum: Checksum; } | { type: 'masterActionAck'; nextCheckedAction: ToCheckedAction; } | ({ type: 'reconciliation'; } & CheckedReconciliatoryActions)) & { masterContext: MovexMasterContext; }, 'MasterResourceInexistent' | string>; /** * The following events are directed from Master to Client * */ onReady: (p: SanitizedMovexClient) => void; onFwdAction: (payload: { rid: ResourceIdentifier; masterContext: MovexMasterContext; } & ToCheckedAction) => IOPayloadResult; onReconciliateActions: (payload: { rid: ResourceIdentifier; masterContext: MovexMasterContext; } & CheckedReconciliatoryActions) => IOPayloadResult; onResourceSubscriberAdded: (p: { rid: ResourceIdentifier; client: SanitizedMovexClient; masterContext: MovexMasterContext; }) => IOPayloadResult; onResourceSubscriberRemoved: (p: { rid: ResourceIdentifier; clientId: MovexClient['id']; }) => IOPayloadResult; /** * The following events are by-directional (from Client to Master and vice-versa) * */ ping: () => IOPayloadResult; pong: () => IOPayloadResult; };