/** * `@hyperframes/producer/distributed` — the distributed render primitives. * * The three activities (`plan` → `renderChunk` × N → `assemble`) are pure * functions over local file paths; networking + orchestration live in * adapters. * * Adopters (AWS Lambda, Cloud Run Jobs, Temporal, K8s Jobs, plain SSH): * * ```ts * import { * plan, * renderChunk, * assemble, * } from "@hyperframes/producer/distributed"; * * // Controller-side: produce a self-contained planDir + content-addressed planHash. * const planResult = await plan(projectDir, config, planDir); * * // Worker-side: render one chunk. Byte-identical retries on the same * // (planDir, chunkIndex) — Temporal / Step Functions retry policies are * // safe to point at this. * const chunk = await renderChunk(planDir, chunkIndex, outputChunkPath); * * // Controller-side: stitch chunks into the final deliverable. * await assemble(planDir, chunkPaths, audioPath, outputPath); * ``` * * No networking, no AWS SDK, no Temporal SDK — those live in adapter * packages. This module is library code only. */ // ── Plan (Activity A) ─────────────────────────────────────────────────────── export { // Functions buildChunkSlices, measurePlanDirBytes, plan, rejectUnsupportedDistributedFormat, resolveChunkPlan, // Types type DistributedRenderConfig, type PlanResult, // Constants DEFAULT_CHUNK_SIZE, DEFAULT_MAX_PARALLEL_CHUNKS, MIN_CHUNK_SIZE, PLAN_DIR_SIZE_LIMIT_BYTES, PLAN_PROJECT_DIR_SKIP_SEGMENTS, // Error codes + classes FORMAT_NOT_SUPPORTED_IN_DISTRIBUTED, FormatNotSupportedInDistributedError, PLAN_TOO_LARGE, PlanTooLargeError, } from "./services/distributed/plan.js"; // ── RenderChunk (Activity B) ──────────────────────────────────────────────── export { applyRuntimeEnvSnapshot, readWebGlVendorInfoFromCanvas, renderChunk, // Types type ChunkResult, // Error codes + classes FFMPEG_VERSION_MISMATCH, PLAN_HASH_MISMATCH, RenderChunkValidationError, } from "./services/distributed/renderChunk.js"; // ── Assemble (Activity C) ─────────────────────────────────────────────────── export { assemble, type AssembleResult } from "./services/distributed/assemble.js"; // ── Cloud-agnostic adapter helpers ────────────────────────────────────────── // Shared by the distributed-render adapters (aws-lambda, gcp-cloud-run, …) so // the config-shape validator lives in one place; each adapter layers only its // own wire-format size cap on top. export { InvalidConfigError, type SerializableDistributedRenderConfig, validateDistributedRenderConfig, validateVariablesPayload, } from "./services/distributed/renderConfigValidation.js"; export { hashProjectDir } from "./services/distributed/projectHash.js"; // ── Format union ──────────────────────────────────────────────────────────── // Canonical output-format type. The aws-lambda package re-exports it so // CLI / adopter SDKs can derive runtime allowlists from one source. export type { DistributedFormat } from "./services/distributed/shared.js"; // ── Plan-time shared types from `freezePlan` ─────────────────────────────── // Re-exported so adopters that deserialize a planDir's `meta/encoder.json` // or `meta/chunks.json` see the same shapes the producer wrote them as. export type { ChunkSliceJson, CompositionMetadataJson, LockedRenderConfig, } from "./services/render/stages/freezePlan.js"; // ── Plan-time validation errors ──────────────────────────────────────────── // Export typed deterministic validation codes so orchestration adapters can // mark authoring/configuration failures as terminal while still retrying real // infrastructure faults. export { DISTRIBUTED_DURATION_OUT_OF_RANGE, MAX_DISTRIBUTED_DURATION_SECONDS, PlanValidationError, } from "./services/render/planValidation.js";