import { PluginRuntimeError } from "../errors.mjs";
import { AnyPlugin, AnyPluginConstructor, LoadedPlugin, PluginInstance, PluginMetadata, PluginRegistry } from "../../types.mjs";
import { ModuleFederationService } from "./module-federation.service.mjs";
import { SecretsService } from "./secrets.service.mjs";
import { InferSchemaInput, InferSchemaOutput } from "@orpc/contract";
import { Context, Effect, Scope } from "effect";

//#region src/runtime/services/plugin-loader.service.d.ts
declare const PluginRegistryTag_base: Context.TagClass<PluginRegistryTag, "PluginRegistry", PluginRegistry>;
declare class PluginRegistryTag extends PluginRegistryTag_base {}
declare const PluginMapTag_base: Context.TagClass<PluginMapTag, "PluginMap", Record<string, AnyPluginConstructor>>;
declare class PluginMapTag extends PluginMapTag_base {}
declare const RegistryService_base: Effect.Service.Class<RegistryService, "RegistryService", {
  readonly effect: Effect.Effect<{
    get: (pluginId: string) => Effect.Effect<{
      constructor: AnyPluginConstructor;
      metadata: PluginMetadata;
    } | {
      constructor: null;
      metadata: PluginMetadata;
    }, PluginRuntimeError, never>;
    getModule: (pluginId: string) => Effect.Effect<AnyPluginConstructor | null, never, never>;
  }, never, PluginRegistryTag | PluginMapTag>;
}>;
declare class RegistryService extends RegistryService_base {}
declare const PluginLoaderService_base: Effect.Service.Class<PluginLoaderService, "PluginLoaderService", {
  readonly effect: Effect.Effect<{
    loadPlugin: (pluginId: string) => Effect.Effect<{
      ctor: any;
      metadata: PluginMetadata;
    }, PluginRuntimeError, never>;
    instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<{
      plugin: T;
      metadata: PluginMetadata;
    }, PluginRuntimeError, never>;
    initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
      variables: InferSchemaInput<T["configSchema"]["variables"]>;
      secrets: InferSchemaInput<T["configSchema"]["secrets"]>;
    }, plugins?: Record<string, unknown>) => Effect.Effect<{
      plugin: T;
      metadata: PluginMetadata;
      config: {
        variables: InferSchemaOutput<T["configSchema"]["variables"]>;
        secrets: InferSchemaOutput<T["configSchema"]["secrets"]>;
      };
      context: any;
      scope: Scope.CloseableScope;
    }, PluginRuntimeError, never>;
  }, never, ModuleFederationService | SecretsService | RegistryService>;
}>;
declare class PluginLoaderService extends PluginLoaderService_base {}
//#endregion
export { PluginLoaderService };
//# sourceMappingURL=plugin-loader.service.d.mts.map