import { Container, Module, ModuleDeclaration } from 'ditox';
type LogLevel = 'debug' | 'info' | 'warn' | 'error';
type LogMetadata = Readonly<Record<string, string>>;
type LogEvent = Readonly<{
  timestamp: number;
  level: LogLevel;
  tag: string;
  messages: ReadonlyArray<unknown>;
  meta?: LogMetadata;
}>;
type LogFunction = (...data: unknown[]) => void;
type Logger = {
  /**
   * Returns a nested logger
   */
  getLogger: typeof getLogger;
  withMeta: (meta: LogMetadata) => Logger;
  debug: LogFunction;
  log: LogFunction;
  info: LogFunction;
  warn: LogFunction;
  error: LogFunction;
};
declare function getLogger(tag: string, meta?: LogMetadata): Logger;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type AnyObject = Record<string, any>;
/**
 * Jazz SDK Plugin provides additional features.
 */
type JazzSdkPlugin<T extends Module<AnyObject> = Module<AnyObject>> = Promise<
  () => {
    key: string | undefined;
    module: JazzSdkModuleDeclaration<T>;
  }
>;
type JazzSdkModuleDeclaration<
  T extends JazzSdkModule<AnyObject> = JazzSdkModule<AnyObject>,
> = ModuleDeclaration<T>;
type JazzSdkModule<T extends AnyObject = AnyObject> = Module<T>;
type JazzSdkAdditionalPlugins = ReadonlyArray<JazzSdkPlugin>;
type PlatformLogEvent = LogEvent;
type PlatformLogLevel = LogLevel;
type LogLevel$0 = PlatformLogLevel;
type LogEvent$0 = PlatformLogEvent;
type JazzSdkElectronMainOptions = {
  container?: Container;
  plugins?: JazzSdkAdditionalPlugins;
};
type JazzSdkElectronMain = {
  container: Container;
  destroy: () => void;
};
declare const createJazzSdkElectronMain: (
  options?: JazzSdkElectronMainOptions,
) => Promise<JazzSdkElectronMain>;
export { createJazzSdkElectronMain, JazzSdkElectronMainOptions };
export type { JazzSdkPlugin, LogEvent$0 as LogEvent, LogLevel$0 as LogLevel };
