import type { AppEnvironmentId } from '../environments';
import type { INFRA_ADAPTER_CATALOG } from '../infra/constants';
import type { InfraDestroyRequest, InfraGeneratedArtifact, InfraLedger, InfraOutput, InfraOwnedResource, InfraPlanAction, InfraResourceStatus, InfraResult } from './infraLifecycle';
import type { InfraAdapterId, InfraComputeProviderId, InfraComputeSelection, InfraEnvironmentSpec, InfraRuntimeProviderId, InfraRuntimeSelection } from './infraManifest';
import type { InfraControlPlaneCredentialRef, InfraSecretReference } from './infraSecrets';
import type { InfraComputeTarget } from './infraTargets';
import type { InfraWorkloadSpec } from './infraWorkload';
/** Package exports must match this exact catalog entry; optional operations are advertised explicitly. */
export type InfraAdapterDescriptor
= {
[K in P]: (typeof INFRA_ADAPTER_CATALOG)[K] & {
readonly operations?: readonly ('suspend' | 'resume' | 'generate' | 'diagnostics')[];
};
}[P];
/** Trusted execution-only control-plane credential lookup, resolution and persistence. */
export interface InfraCredentialPort {
/** Return a credential bundle when present; absence is not an error. */
findAsync(reference: InfraControlPlaneCredentialRef): Promise> | null>>;
/** Resolve a required credential bundle; absence is an error. */
resolveAsync(reference: InfraControlPlaneCredentialRef): Promise>>>;
/** Persist an opaque provider-owned credential bundle without exposing its schema to the host. */
persistAsync(reference: InfraControlPlaneCredentialRef, values: Readonly>): Promise>;
}
/** Trusted execution-only ports. Implementations must not serialize resolved credential values. */
export interface InfraExecutionContext {
readonly projectId: string;
readonly environment: AppEnvironmentId;
readonly desired: InfraEnvironmentSpec;
readonly previous?: InfraLedger;
readonly signal?: AbortSignal;
readonly credentials: InfraCredentialPort;
readonly secrets: {
resolveAsync(reference: InfraSecretReference): Promise>;
};
}
export interface InfraReconcileResult {
readonly resources: readonly InfraOwnedResource[];
readonly outputs: readonly InfraOutput[];
}
/** Current portable compute state resolved without creating, updating or deleting resources. */
export interface InfraComputeSnapshot extends InfraReconcileResult {
readonly targets: readonly InfraComputeTarget[];
}
export interface InfraComputeAdapter {
readonly descriptor: InfraAdapterDescriptor
;
/** Read-only prerequisites, config and control-plane credential validation. */
validateAsync(context: InfraExecutionContext, selection: InfraComputeSelection
): Promise>;
/** Read-only discovery for planning and stateless runtime projection. Missing compute is empty. */
inspectAsync(context: InfraExecutionContext, selection: InfraComputeSelection): Promise>;
planAsync(context: InfraExecutionContext, selection: InfraComputeSelection): Promise>;
ensureAsync(context: InfraExecutionContext, selection: InfraComputeSelection): Promise>;
statusAsync(context: InfraExecutionContext): Promise>;
destroyAsync(context: InfraExecutionContext, request: InfraDestroyRequest): Promise>;
}
export interface InfraRuntimeDesiredState {
readonly selection: InfraRuntimeSelection
;
readonly targets: readonly InfraComputeTarget[];
readonly workloads: readonly InfraWorkloadSpec[];
/** Previously resolved outputs available to portable workload value references. */
readonly availableOutputs: readonly InfraOutput[];
}
export interface InfraRuntimeAdapter
{
readonly descriptor: InfraAdapterDescriptor
;
/** Read-only prerequisites and desired-state validation; no cluster creation. */
validateAsync(context: InfraExecutionContext, desired: InfraRuntimeDesiredState
): Promise>;
planAsync(context: InfraExecutionContext, desired: InfraRuntimeDesiredState): Promise>;
ensureAsync(context: InfraExecutionContext, desired: InfraRuntimeDesiredState): Promise>;
statusAsync(context: InfraExecutionContext, desired: InfraRuntimeDesiredState): Promise>;
suspendAsync(context: InfraExecutionContext, desired: InfraRuntimeDesiredState): Promise>;
destroyAsync(context: InfraExecutionContext, desired: InfraRuntimeDesiredState, request: InfraDestroyRequest): Promise>;
generateAsync?(context: InfraExecutionContext, desired: InfraRuntimeDesiredState): Promise>;
}
/** A service can own several capabilities but contributes one deduplicated platform instance. */
export interface InfraServiceAdapter {
readonly descriptor: InfraAdapterDescriptor<'supabase' | 'cerbos' | 'r2' | 'supabase-vault'>;
/** Read-only service config, bootstrap credentials and dependency validation. */
validateAsync(context: InfraExecutionContext): Promise>;
planAsync(context: InfraExecutionContext): Promise>;
/** Mutating pre-runtime preparation invoked only by an orchestrated `up` operation. */
prepareAsync?(context: InfraExecutionContext): Promise>;
desiredWorkloadsAsync(context: InfraExecutionContext): Promise>;
reconcileAsync(context: InfraExecutionContext, runtimeOutputs: readonly InfraOutput[]): Promise>;
statusAsync(context: InfraExecutionContext): Promise>;
destroyAsync(context: InfraExecutionContext, request: InfraDestroyRequest): Promise>;
suspendAsync?(context: InfraExecutionContext): Promise>;
}
//# sourceMappingURL=infraAdapters.d.ts.map