import { type Result } from "@fjall/generator"; import type { AwsProvider } from "../../aws/AwsProvider.js"; export interface EnsureSchemaGateImageParams { awsProvider: AwsProvider; /** The synthesised assembly directory containing `fjall-manifest.json`. */ cdkOutPath: string; onLog?: (message: string, level: "info" | "warn") => void; abortSignal?: AbortSignal; /** Test seam — production callers omit it (global fetch). */ fetchFn?: typeof fetch; } /** * Ensure every schema-gate image tag the manifest declares exists in the * target account's private ECR (`fjall/schema-gate`) before any task * definition referencing it ships. Tags are recorded only for DEFAULT-image * gates — a BYO `schemaGate.image` records nothing, so its availability stays * the author's responsibility. * * Present tag → no-op (one DescribeImages). Absent → create the repository * if needed (IMMUTABLE — release-pinned tags must never be repointed), then * mirror the tag from the public repository via the OCI distribution API * (anonymous pull) and the ECR SDK (layer upload + PutImage), preserving * digests end-to-end so the multi-arch index survives byte-identical. * * Fail-closed: any failure refuses the deploy BEFORE CloudFormation mutates — * shipping a task definition whose gate image cannot be pulled would stop * every task at provisioning with no CFN-visible cause. * * Failure messages are pre-masked at construction — callers may surface * `error.message` to log/callback sinks without re-masking. */ export declare function ensureSchemaGateImage(params: EnsureSchemaGateImageParams): Promise>;