import * as bot from '../../bot'; import * as utils from '../../utils/type-utils'; import { BasePlugin } from '../common'; type _EnumerateStates = { [TStateName in keyof TPlugin['states']]: TPlugin['states'][TStateName] & { name: TStateName; }; }; type _FilterStates = Extract>, { type: TStateType; }>['name']; type _GetStatePayload = TPlugin['states'][utils.Cast]['payload']; export type StateRepo = { get: (id: string) => Promise; set: (id: string, payload: TPayload, options?: { expiryMs: number; }) => Promise; getOrSet: (id: string, payload: TPayload, options?: { expiryMs: number; }) => Promise; delete: (id: string) => Promise; patch: (id: string, payload: Partial) => Promise; }; export type StateProxy = utils.Normalize<{ [TStateType in bot.StateType]: { [TStateName in _FilterStates]: StateRepo<_GetStatePayload>; }; }>; export {};