import type { AccountId, ConnectionId, CorrelationId, CredentialReferenceId, OperationId, ProviderId } from "./ids.js";
import type { AuthorityContext } from "./security.js";
export type ProviderErrorCategory = "unavailable" | "rate-capacity" | "auth" | "permission" | "missing-resource" | "unsupported-capability" | "conflict-stale" | "terminal-provider" | "adapter-protocol";
export interface ProviderDescriptor {
    readonly providerId: ProviderId;
    readonly kind: string;
    readonly adapterVersion: string;
    readonly capabilities: readonly string[];
    readonly authModes: readonly string[];
    readonly resourceTypes: readonly string[];
    readonly healthFeatures: readonly string[];
}
export interface ProviderReference {
    readonly providerId: ProviderId;
    readonly accountId?: AccountId;
    readonly resourceType: string;
    readonly nativeId: string;
    readonly nativeRevision?: string;
    readonly url?: string;
    readonly observedAt: string;
}
export interface ProviderOperationContext {
    readonly operationId: OperationId;
    readonly idempotencyKey: string;
    readonly correlationId: CorrelationId;
    readonly authority: AuthorityContext;
    readonly connectionId: ConnectionId;
    readonly credentialReferenceId: CredentialReferenceId;
}
export interface ProviderError {
    readonly category: ProviderErrorCategory;
    readonly retryable: boolean;
    readonly providerId: ProviderId;
    readonly accountId?: AccountId;
    readonly resourceRef?: ProviderReference;
    readonly safeMessage: string;
    readonly observedAt: string;
}
export interface ProviderResult<T> {
    readonly value: T;
    readonly references: readonly ProviderReference[];
    readonly observedAt: string;
    readonly reconciliationToken?: string;
}
//# sourceMappingURL=providers.d.ts.map