import { FoundationError } from '@cosmicmind/foundationjs';
import { Observable, ObservableTopics } from './Topic';
export type Message = Record<string, unknown>;
export type MessageTopics = ObservableTopics & {
    readonly [K: string]: Message;
};
export declare class MessageObservable<T extends MessageTopics> extends Observable<T> {
}
export type MessagePropertyLifecycle<E extends Message, V> = {
    required?: boolean;
    validator?(value: V, message: E): boolean | never;
};
export type MessagePropertyLifecycleMap<E extends Message> = {
    [K in keyof E]?: MessagePropertyLifecycle<E, E[K]>;
};
export declare class MessageError extends FoundationError {
}
export type MessageLifecycle<E extends Message> = {
    created?(message: E): void;
    error?(error: MessageError): void;
    properties?: MessagePropertyLifecycleMap<E>;
};
export declare const defineMessage: <E extends Message>(handler?: MessageLifecycle<E>) => (message: E) => E;
//# sourceMappingURL=Message.d.ts.map