Release Next v3.0.0-next.6
Pre-release@cloudpdf/contract@3.0.0-next.6
Minor Changes
-
#766 by @bobsingor – Extend
documents.importFromwithmode: "async". Async requests accept operator-registered connection sources and return 202 withtag: "accepted"and a pending document that callers can poll withGET /documents/:id; presigned URL sources remain synchronous. -
#766 by @bobsingor – Add the provider-neutral
connectionsource todocuments.importFrom. Requests identify an operator-registered connection and object key, plus an optional opaque provider-specific revision, without exposing storage-provider configuration or credentials in the public wire contract. -
#766 by @bobsingor – Add the
documents.importFromoperation for importing a PDF from a caller-supplied URL. The request supports optional size and SHA-256 integrity pins, metadata, deduplication, and idempotency fields, while responses distinguish completed imports from validation, authorization, conflict, and upstream transport failures. -
#766 by @bobsingor – Rename the contract operation from
documents.importtodocuments.importFromso generated Java, Python, and Ruby SDKs expose a consistent method name. The HTTP path remainsPOST /v1/tenants/{tenantId}/documents/import. The OpenAPI emitter now rejects group or method segments that collide with reserved words in those target languages.
@cloudpdf/sdk@3.0.0-next.6
Minor Changes
- #766 by @bobsingor – Add the generated
documents.importFromclient method and request and response types. The SDK accepts URL or operator-registered connection sources, supports synchronous and asynchronous import modes, exposes integrity, deduplication, metadata, and idempotency options, and maps upstream transport failures toBadGatewayError.
@cloudpdf/server@3.0.0-next.6
Minor Changes
-
#766 by @bobsingor – Add durable asynchronous document imports backed by the
document_importsjob table and an in-process worker with one claim loop per replica. Document and job creation is atomic, lease-token-fenced transitions prevent stale workers from overwriting replacements, reconcile-on-claim avoids duplicate transfers after crashes, and exhausted retries fail the document and clean destination bytes. Retries stay pinned to one content identity, filesystem sources requireexpected.sha256, and queued or running imports are protected from the stale-pending sweeper. Migration 027 stores the re-drivable source descriptor insource_json. -
#766 by @bobsingor – Add operator-registered import connections through
CLOUDPDF_IMPORT_CONNECTIONSfor S3 and S3-compatible stores, GCS, Azure Blob, and filesystem roots. Connections enforce credential classes, tenant allowlists, scoped prefixes or tenant-bound key templates, provider-specific revision pinning, and fail-closed authorization. Canonical backend fingerprints reject self-imports, and each import records sanitized source provenance and outcome in the newdocument_importstable from migration 026. A shared conformance suite keeps URL and connection adapters aligned on source-opening behavior. -
#766 by @bobsingor – Implement server-side PDF imports from caller-supplied URLs through the existing document lifecycle. Deployment policy controls size, timeout, concurrency, HTTPS, and public-network requirements; URL handling blocks private and metadata addresses with DNS pinning, rejects redirects, and requires
Content-Length. Imports enforce optional size and SHA-256 pins, sanitize failures so URL secrets do not leak, leave documents pending after retryable transport failures, and add thepullupload kind in migration 025.
Patch Changes
-
#766 by @bobsingor – Mount the document import handler under the renamed
documents.importFromcontract operation and align the server's import policy and lifecycle terminology. The HTTP route and runtime behavior remain unchanged. -
#766 by @bobsingor – Cloud ObjectStore adapters (S3, GCS, Azure Blob) now truly stream
putbodies: aReadableis hashed and length-enforced as it flows (constant memory) instead of being buffered whole. Under- or over-delivery aborts before a visible object can appear, any prior object at the key survives a failed attempt, and the SHA-256 metadata is attached post-stream (S3 via a same-key server-side copy). FsObjectStore now cleans up its.partialfile when the source stream errors mid-put.
@embedpdf/react@3.0.0-next.6
Minor Changes
-
#768 by @bobsingor – Consolidate base-page and deep-zoom tile painting into
RenderLayer, with atilesoption for lenses that explicitly disable tiling. The separateTileLayersurface is removed because tile engagement is now render-policy arithmetic owned byRenderLayer.Tiles are positioned directly in view-pixel space and use the shared painted-image lifecycle, keeping retained coverage until replacements have a presentation opportunity and avoiding deep-zoom rounding drift, incomplete-image outlines, and transient seams.
@embedpdf/web@3.0.0-next.6
Minor Changes
- #768 by @bobsingor – Add
bindPaintedImage, a framework-neutral browser adapter for binding object-URL raster sources to image elements. It hides incomplete images, owns abort and URL-revocation cleanup, and reports painted and unpainted state around the image's presented lifetime so React, Vue, Svelte, and Angular adapters can share the same minimal lifecycle.
@embedpdf/plugin-render@3.0.0-next.6
Minor Changes
-
#768 by @bobsingor – Add a configurable render strategy for exact and lattice-backed deployments, with separate full-page and tile-plane budgets, format conformance, settled level selection, and public paint settings.
Deep-zoom tiling now uses bled overlap, presentation-aware generation retention, bounded fetch backpressure and raster residency, stage-less demand limits, stronger raster identities, failure isolation, and optional diagnostics. These changes keep tile memory bounded while preventing stale reuse, visible seams, and quality regressions during zoom and pan transitions.
@embedpdf/plugin-stage@3.0.0-next.6
Minor Changes
- #768 by @bobsingor – Expose transient
cameraRestingstate and defer page-origin device snapping while zoom is moving. Pages retain fractional placement through continuous zoom and snap once the camera settles, preventing anchor jitter and per-step content movement without sacrificing crisp resting placement.
@embedpdf/engine@3.0.0-next.6
Patch Changes
- #768 by @bobsingor – Fix the default inline image-encoder worker path so it creates the bundled blob worker instead of attempting to fetch
/inlineand silently falling back to main-thread encoding. Tile rendering now keeps encoding work off the main thread under the default configuration.
@embedpdf/engine-services@3.0.0-next.6
Patch Changes
- #768 by @bobsingor – Bound individual annotation-appearance raster allocations at deep zoom by reducing the effective appearance scale while preserving the original placement rectangle. Oversized page-spanning appearances now degrade softly instead of exhausting the wasm heap with multi-gigabyte bitmap requests.
@embedpdf/viewer-chrome@3.0.0-next.6
Patch Changes
- #768 by @bobsingor – Adopt the unified
RenderLayerpage composition so the full viewer gets policy-driven deep-zoom tiling without mounting a separate tile layer. Base and sharp tile pixels now follow one rendering lifecycle through zoom, pan, annotation, and page-view surfaces.