import type { FileMeta, FileUploadOptions, StorageMeta, StorageUploadOptions } from "../../types.js"; import type { GConstructor, EntityServerClientBase } from "../../client/base.js"; export declare function FileMixin>(Base: TBase): { new (...args: any[]): { /** * 파일을 업로드합니다. (multipart/form-data) * * ```ts * const input = document.querySelector('input[type="file"]'); * const result = await client.fileUpload("product", input.files[0]); * console.log(result.data.uuid); * ``` */ fileUpload(entity: string, file: File | Blob, opts?: FileUploadOptions): Promise<{ ok: boolean; uuid: string; data: FileMeta; }>; /** 파일을 다운로드합니다. `ArrayBuffer`를 반환합니다. */ fileDownload(entity: string, uuid: string): Promise; /** 파일을 삭제합니다. */ fileDelete(entity: string, uuid: string): Promise<{ ok: boolean; uuid: string; deleted: boolean; }>; /** 엔티티에 연결된 파일 목록을 조회합니다. */ fileList(entity: string, opts?: { refSeq?: number; }): Promise<{ ok: boolean; data: { items: FileMeta[]; total: number; }; }>; /** 파일 메타 정보를 조회합니다. */ fileMeta(entity: string, uuid: string): Promise<{ ok: boolean; data: FileMeta; }>; /** 임시 파일 접근 토큰을 발급합니다. */ fileToken(uuid: string): Promise<{ ok: boolean; token: string; }>; /** 파일 인라인 뷰/다운로드 URL을 반환합니다. */ fileViewUrl(uuid: string, opts?: { download?: boolean; }): string; /** 파일 인라인 뷰 URL을 반환합니다. (fetch 없음, URL 조합만) */ fileUrl(uuid: string): string; /** ES 스토리지 업로드 라우트를 파일 API 이름 대신 호출합니다. */ storageUpload(entity: string, file: File | Blob, opts?: StorageUploadOptions): Promise<{ ok: boolean; uuid: string; data: StorageMeta; }>; /** ES 스토리지 다운로드 라우트를 파일 API 이름 대신 호출합니다. */ storageDownload(entity: string, uuid: string): Promise; /** ES 스토리지 삭제 라우트를 파일 API 이름 대신 호출합니다. */ storageDelete(entity: string, uuid: string): Promise<{ ok: boolean; uuid: string; deleted: boolean; }>; /** ES 스토리지 목록 라우트를 파일 API 이름 대신 호출합니다. */ storageList(entity: string, opts?: { refSeq?: number; }): Promise<{ ok: boolean; data: { items: StorageMeta[]; total: number; }; }>; /** ES 스토리지 메타 라우트를 파일 API 이름 대신 호출합니다. */ storageMeta(entity: string, uuid: string): Promise<{ ok: boolean; data: StorageMeta; }>; /** ES 스토리지 임시 토큰 라우트를 파일 API 이름 대신 호출합니다. */ storageToken(uuid: string): Promise<{ ok: boolean; token: string; }>; /** ES 스토리지 인라인 뷰/다운로드 URL을 반환합니다. */ storageViewUrl(uuid: string, opts?: { download?: boolean; }): string; /** ES 스토리지 다운로드 URL을 반환합니다. */ storageDownloadUrl(uuid: string): string; /** ES 스토리지 인라인 뷰 URL을 반환합니다. */ storageUrl(uuid: string): string; baseUrl: string; token: string; anonymousPacketToken: string; apiKey: string; hmacSecret: string; encryptRequests: boolean; debugPlainSecret: string; csrfEnabled: boolean; csrfHeaderName: string; csrfCookieName: string; csrfRefresher: (() => Promise) | null; requestAbortControllers: Map; activeTxId: string | null; initialHealthFired: boolean; keepSession: boolean; refreshBuffer: number; onTokenRefreshed?: (accessToken: string, expiresIn: number) => void; onSessionExpired?: (error: Error) => void; onHealthChange?: (online: boolean) => void; sessionRefreshToken: string | null; refreshTimer: ReturnType | null; healthTickTimer: ReturnType | null; healthTickPromise: Promise | null; realtimeEnabled: boolean; realtimePath: string; realtimeAutoReconnect: boolean; realtimeReconnectDelayMs: number; realtimeStatus: import("../../types.js").RealtimeConnectionStatus; realtimeSocket: WebSocket | null; realtimeConnectPromise: Promise | null; realtimeReconnectTimer: ReturnType | null; realtimeShouldReconnect: boolean; realtimeMessageListeners: Set; realtimeStatusListeners: Set; realtimeEventListeners: Map>; configure(options: Partial): void; fireInitialHealth(): void; setToken(token: string): void; setAccessTokenFromResponse(token: string): void; syncRealtimeWithToken(): void; setAnonymousPacketToken(token: string): void; setApiKey(apiKey: string): void; setHmacSecret(secret: string): void; setEncryptRequests(value: boolean): void; setCsrfEnabled(enabled: boolean): void; addRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void; removeRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void; addRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void; removeRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void; addRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void; removeRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void; connectRealtime(): Promise; disconnectRealtime(reason?: string): void; sendRealtime(message: import("../../types.js").RealtimeEnvelope | Record): boolean; subscribeRealtime(subscriptions: string[]): boolean; unsubscribeRealtime(subscriptions: string[]): boolean; startHealthTick(intervalMs?: number, runImmediately?: boolean): void; stopHealthTick(): void; scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{ access_token: string; expires_in: number; }>): void; clearRefreshTimer(): void; stopKeepSession(): void; applyRealtimeOptions(options?: boolean | import("../../types.js").RealtimeClientOptions): void; buildRealtimeUrl(): string; handleRealtimeMessage(payload: unknown): void; scheduleRealtimeReconnect(reason: string): void; clearRealtimeReconnectTimer(): void; setRealtimeStatus(status: import("../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void; applyCsrfHealth(): void; readRequestBody>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T; get reqOpts(): import("../../client/request.js").RequestOptions; prepareRequest(_withAuth: boolean): Promise; get http(): { get(path: string, withAuth?: boolean, extraHeaders?: Record, requestConfig?: import("../../client/request.js").EntityRequestConfig): Promise; post(path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record, requestConfig?: import("../../client/request.js").EntityRequestConfig): Promise; put(path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record, requestConfig?: import("../../client/request.js").EntityRequestConfig): Promise; patch(path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record, requestConfig?: import("../../client/request.js").EntityRequestConfig): Promise; delete(path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record, requestConfig?: import("../../client/request.js").EntityRequestConfig): Promise; }; request(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record, requestConfig?: import("../../client/request.js").EntityRequestConfig): Promise; requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise; requestForm(method: string, path: string, form: FormData, withAuth?: boolean, onUploadProgress?: (loaded: number, total: number) => void): Promise; requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise; }; } & TBase;