import type { BaseProvider } from '@kubricate/core';
import type { BaseStack } from '../stack/BaseStack.js';
import { SecretInjectionBuilder } from './SecretInjectionBuilder.js';
import type { SecretManager } from './SecretManager.js';
import type { AnySecretManager, ExtractSecretManager } from './types.js';
export type ExtractProviderKeyFromSecretManager<SM extends AnySecretManager, Key extends keyof ExtractSecretManager<SM>['secretEntries']> = ExtractSecretManager<SM>['secretEntries'][Key] extends {
    provider: infer P;
} ? P : never;
export type GetProviderKindFromConnector<SM extends AnySecretManager, ProviderKey> = ProviderKey extends string ? ExtractSecretManager<SM>['providerInstances'][ProviderKey] extends BaseProvider<any, infer Instance> ? Instance : never : never;
export type GetProviderKinds<SM extends AnySecretManager, Key extends keyof ExtractSecretManager<SM>['secretEntries']> = GetProviderKindFromConnector<SM, ExtractProviderKeyFromSecretManager<SM, Key>>;
export declare class SecretsInjectionContext<SM extends SecretManager = AnySecretManager> {
    private stack;
    private manager;
    private secretManagerId;
    private defaultResourceId;
    private builders;
    constructor(stack: BaseStack, manager: SM, secretManagerId: number);
    /**
     * Set the default resourceId to use when no explicit resource is defined in a secret injection.
     */
    setDefaultResourceId(id: string): void;
    /**
     * Start defining how a secret will be injected into a resource.
     * This only resolves the provider, not the actual secret value.
     *
     * @param secretName - The name of the secret to inject.
     * @returns A SecretInjectionBuilder for chaining inject behavior.
     */
    secrets<NewKey extends keyof ExtractSecretManager<SM>['secretEntries'] = keyof ExtractSecretManager<SM>['secretEntries'], ProviderKinds extends GetProviderKinds<SM, NewKey> = GetProviderKinds<SM, NewKey>>(secretName: NewKey): SecretInjectionBuilder<ProviderKinds>;
    resolveAll(): void;
}
//# sourceMappingURL=SecretsInjectionContext.d.ts.map