mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-07 10:06:21 +00:00
108 lines
4.4 KiB
TypeScript
108 lines
4.4 KiB
TypeScript
/**
|
||
* `@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";
|