import type { ArkmeRecordLocationCapture, ArkmeRichSendInput, ArkmeSourceSendResult, ArkmeUploadedAsset } from './types.js'; export declare const ARKME_TOOL_FILE_MAX_BYTES: number; export interface ArkmeFilePolicy { version: 1; maxFileBytes: number; maxImageBytes: number; maxAttachments: number; } export interface ArkmeLocalFile { fileRef: string; fileName: string; mimeType: string; size: number; fileKind: 1 | 2 | 3 | 4; } export interface ArkmeFileProgress { phase: 'preparing' | 'uploading' | 'completing' | 'ready'; sentBytes: number; totalBytes: number; } export interface ArkmeFileSendInput { sourceRef: string; recordUid: string; relationUid: string; fileRefs: string[]; /** Captured current-account fence. It is validated before acceptance and is never persisted in a task. */ expectedUserId?: number; /** Every background ref is also present once in `fileRefs`; the role is never inferred from MIME. */ backgroundSound?: ArkmeFileBackgroundSoundInput; /** Send-scoped browser capture persisted until the owner confirms the record and applies its location post-effect. */ location?: ArkmeRecordLocationCapture; content: Omit; } export interface ArkmeFileBackgroundSoundInput { fileRefs: string[]; amplitudes: number[]; } export interface ArkmeFileSendTask extends ArkmeFileSendInput { taskRef: string; createdAtMillis: number; state: 'queued' | 'uploading' | 'sending' | 'sent' | 'failed' | 'uncertain'; files: Array; result?: ArkmeSourceSendResult; /** Sanitized owner error code. Definite rejection and unknown outcome remain distinct via state. */ errorCode?: string; /** Definite terminal rejection remains terminal across restart and later permission changes. */ retryable?: boolean; error?: string; } export interface ArkmeFileReception { state: 'missing' | 'receiving' | 'ready' | 'failed'; receivedBytes: number; totalBytes: number; file?: ArkmeLocalFile; error?: string; } export interface ArkmeFileOpenResult { opened: true; file: ArkmeLocalFile; } export declare function arkmeVisibleUploadFraction(progress: ArkmeFileProgress): number; export type ArkmeMediaKind = 'image' | 'video' | 'audio'; type ArkmeBrowserVisualKind = Exclude; /** Recover the real media MIME when the platform supplied no useful metadata. */ export declare function arkmeNormalizedFileMimeType(mimeType: string, fileName?: string): string; /** Classify presentation independently from whether this browser can decode it inline. */ export declare function arkmeMediaKind(mimeType: string, fileName?: string): ArkmeMediaKind | undefined; /** A filename suffix is authoritative when it contradicts legacy visual metadata. */ export declare function arkmeBrowserVisualKind(mimeType: string, fileName?: string): ArkmeBrowserVisualKind | undefined; export declare function arkmeCanInlineLocalFile(mimeType: string, fileName?: string): boolean; /** Picked audio keeps generic upload metadata; presentation still recognizes it as audio. */ export declare function arkmePickedFileKind(mimeType: string, fileName?: string): ArkmeLocalFile['fileKind']; export {}; //# sourceMappingURL=file-transfer-contract.d.ts.map