import { type AssetReference } from "@skenora/contracts"; import type { ResourceResolver } from "./types.js"; export interface PortableResourceFile { path: string; blob: Blob; sha256: string; size: number; role: "asset" | "dependency"; } export interface PortableResourceSet { files: PortableResourceFile[]; assets: { assetId: string; path: string; sha256: string; size: number; }[]; unresolved: { assetId: string; code: string; }[]; requiredDecoders: string[]; } export interface PortableResourceOptions { signal?: AbortSignal; maxFiles?: number; maxBytes?: number; maxFileBytes?: number; /** Host-owned redistribution decision. Provider acquisition policy still applies. */ authorizeRedistribution(asset: Readonly): void | Promise; /** Decoders explicitly supplied offline by the destination host. */ offlineDecoders?: readonly string[]; } /** Collects authorized bytes, rewrites glTF URIs and never returns source locators. */ export declare function collectPortableResourceFiles(assets: readonly Readonly[], resolver: ResourceResolver, options: PortableResourceOptions): Promise; export declare function hashResourceBlob(blob: Blob): Promise; export declare class PortableResourceError extends Error { readonly code: string; constructor(code: string); } /** Structured glTF JSON / GLB container inspection, not a renderer or decoder. */ export declare function readPortableModel(blob: Blob, format: "glb" | "gltf"): Promise<{ dependencies: { record: Record; uri: string; }[]; decoders: string[]; encode: () => Blob; }>; /** Signature/decoder precheck only; it does not decode pixels or claim readiness. */ export declare function preflightPortableFile(blob: Blob, extension: string): Promise; //# sourceMappingURL=portable-files.d.ts.map