import { type VaultAssetKind } from './assets'; export declare const VAULT_ASSETS_PATH = "/api/v1/vault/assets"; export declare const VAULT_ASSET_LICENSES: readonly ["helix_standard", "cc0", "cc_by", "all_rights_reserved"]; export type VaultAssetLicense = (typeof VAULT_ASSET_LICENSES)[number]; /** The transport slice this needs — HelixApi satisfies it; tests inject a fake. */ export type VaultPublishApi = { postMultipart(path: string, form: FormData): Promise; }; export type VaultPublishInput = { /** Bytes of the file being published. */ bytes: Buffer; /** The name the Vault stores it under — the artifact part's filename. */ filename: string; /** Vault kind. Inferred from the extension when omitted. */ kind?: string; /** Human title. Defaults to the filename without its extension. */ title?: string; description?: string; tags?: string[]; /** `public` (default) | `private`. A held publish comes back as `held`. */ visibility?: string; license?: VaultAssetLicense; contentRating?: string; /** Free-form metadata merged into the payload. */ metadata?: Record; /** * Texture files this mesh REFERENCES rather than embeds. * * A mesh that names its textures instead of carrying them is unreadable on * its own, and the Vault renders its thumbnail from the mesh alone. Without * these the render fails, the pin is refused, and the mesh silently degrades * to a bundle file -- so they are part of the upload, not an optimisation. * The FILENAME is the link: it must match the uri inside the GLB exactly. */ companionTextures?: Array<{ filename: string; bytes: Buffer; }>; }; export type VaultPublishResult = { assetId: string; visibility?: string; artifact: { version: number; checksumSha256: string; url?: string | null; sizeBytes?: number; mimeType?: string; }; }; export declare function isVaultAssetKind(value: string): value is VaultAssetKind; export declare function isVaultAssetLicense(value: string): value is VaultAssetLicense; /** The Vault kind and content type for a file, or a message naming the fix. */ export declare function classifyVaultFile(filename: string, declaredKind?: string): { kind: VaultAssetKind; contentType: string; }; /** The title a bare `helix assets publish thing.glb` gets: `thing`. */ export declare function defaultTitleFor(filename: string): string; /** Build the JSON `payload` field. Split out from the request so a test can * assert the exact body without a transport. The DTO is `forbidNonWhitelisted`: * an extra key is a 400, not an ignored field — so nothing is sent speculatively. */ export declare function buildVaultPublishPayload(input: VaultPublishInput): Record; export declare function vaultArtifactForm(input: VaultPublishInput): FormData; export declare function publishVaultAsset(api: VaultPublishApi, input: VaultPublishInput): Promise;