movex-core-util
Version:
Movex Core Util is the library of utilities for Movex
67 lines (66 loc) • 3 kB
TypeScript
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<TState = unknown, A extends AnyAction = AnyAction, TResourceType extends string = string> = {
/**
* The following events are directed from Client to Master
* */
createResource: (p: {
resourceType: TResourceType;
resourceState: TState;
resourceId?: string;
}) => IOPayloadResult<MovexClientResourceShape<TResourceType, TState>, unknown>;
addResourceSubscriber: (p: {
rid: ResourceIdentifier<TResourceType>;
clientInfo?: MovexClient['info'];
}) => IOPayloadResult<MovexClientResourceShape<TResourceType, TState>, unknown>;
getResourceState: (p: {
rid: ResourceIdentifier<TResourceType>;
}) => IOPayloadResult<CheckedState<TState>, unknown>;
getResourceSubscribers: (p: {
rid: ResourceIdentifier<TResourceType>;
}) => IOPayloadResult<MovexClientResourceShape<TResourceType, TState>['subscribers'], unknown>;
getResource: (p: {
rid: ResourceIdentifier<TResourceType>;
}) => IOPayloadResult<MovexClientResourceShape<TResourceType, TState>, unknown>;
emitActionDispatch: (payload: {
rid: ResourceIdentifier<TResourceType>;
action: ActionOrActionTupleFromAction<A>;
}) => IOPayloadResult<({
type: 'ack';
nextChecksum: Checksum;
} | {
type: 'masterActionAck';
nextCheckedAction: ToCheckedAction<A>;
} | ({
type: 'reconciliation';
} & CheckedReconciliatoryActions<A>)) & {
masterContext: MovexMasterContext;
}, 'MasterResourceInexistent' | string>;
/**
* The following events are directed from Master to Client
* */
onReady: (p: SanitizedMovexClient) => void;
onFwdAction: (payload: {
rid: ResourceIdentifier<TResourceType>;
masterContext: MovexMasterContext;
} & ToCheckedAction<A>) => IOPayloadResult<void, unknown>;
onReconciliateActions: (payload: {
rid: ResourceIdentifier<TResourceType>;
masterContext: MovexMasterContext;
} & CheckedReconciliatoryActions<A>) => IOPayloadResult<void, unknown>;
onResourceSubscriberAdded: (p: {
rid: ResourceIdentifier<TResourceType>;
client: SanitizedMovexClient;
masterContext: MovexMasterContext;
}) => IOPayloadResult<void, unknown>;
onResourceSubscriberRemoved: (p: {
rid: ResourceIdentifier<TResourceType>;
clientId: MovexClient['id'];
}) => IOPayloadResult<void, unknown>;
/**
* The following events are by-directional (from Client to Master and vice-versa)
* */
ping: () => IOPayloadResult<void, unknown>;
pong: () => IOPayloadResult<void, unknown>;
};