export declare function exposeMethod(target: T, propertyKey: keyof T, descriptor: TypedPropertyDescriptor): void; export declare function getExposedMethods(instance: T): Set; export declare function rateLimit(interval?: number): (target: T, propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise>) => { value: (this: T) => any; enumerable?: boolean | undefined; configurable?: boolean | undefined; writable?: boolean | undefined; get?: (() => (...args: any[]) => Promise) | undefined; set?: ((value: (...args: any[]) => Promise) => void) | undefined; }; export declare function throttle(callLimit: number, interval?: number): (target: T, propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise>) => { value: (this: T) => any; enumerable?: boolean | undefined; configurable?: boolean | undefined; writable?: boolean | undefined; get?: (() => (...args: any[]) => Promise) | undefined; set?: ((value: (...args: any[]) => Promise) => void) | undefined; }; export declare type APIOptions = { apiName: string; system: any; on(event: string, handler: (params: Array | O) => void): void; notify(event: string, params?: Object | Array): void; expose(event: string, handler: (params: Array | O) => Promise): void; getAPIInstance(component: { new (options: APIOptions): X; }): X; getAPIInstance(name: string): API | null; }; export declare type APIClass = { new (options: APIOptions): T; }; export declare type ExposableMethod = (...args: any[]) => Promise; export interface API { apiDidMount?(): Promise | void; apiWillUnmount?(): Promise | void; } export declare abstract class API { protected options: APIOptions; static expose: typeof exposeMethod; constructor(options: APIOptions); static factory(ctor: APIClass, options: APIOptions): API; } export declare abstract class SubscribableAPI extends API { abstract subscribe(event: string): Promise; } export interface ISubscribableAPI { subscribe(event: string): Promise; unsubscribe(event: string): Promise; onSubscribedEvent(fn: (data: any) => void): void; }