connectbase-client 3.48.2 → 3.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1190,8 +1190,17 @@ interface FetchDataResponse {
1190
1190
  *
1191
1191
  * `count: false` 로 조회한 경우: 마지막 페이지(반환 건수 < limit)면 서버가 정확한
1192
1192
  * 총계를 파생해 돌려주고, 아니면 `-1` (미상) 이 반환됩니다.
1193
+ * `cursor` 를 사용한 조회는 기본적으로 `-1` (잔여 카운트가 필요하면 `count: true` 명시).
1193
1194
  */
1194
1195
  total_count: number;
1196
+ /**
1197
+ * 다음 페이지 커서 (keyset 페이지네이션).
1198
+ *
1199
+ * 값이 있으면 다음 페이지가 있을 수 있으며, 다음 요청의 `cursor` 옵션에 그대로
1200
+ * 전달하면 됩니다. 없으면 마지막 페이지입니다. 사용자 정렬(orderBy)과 함께는
1201
+ * 제공되지 않습니다.
1202
+ */
1203
+ next_cursor?: string;
1195
1204
  }
1196
1205
  interface QueryOptions {
1197
1206
  limit?: number;
@@ -1208,9 +1217,17 @@ interface QueryOptions {
1208
1217
  *
1209
1218
  * 필터가 붙은 COUNT 는 본 조회와 같은 비용의 스캔을 한 번 더 도는 것이므로,
1210
1219
  * 총계가 필요 없는 목록/무한스크롤 조회는 `count: false` 로 눈에 띄게 빨라집니다.
1211
- * 생략 시 기본값은 `true` (기존 동작 유지).
1220
+ * 생략 시 기본값은 `true` (기존 동작 유지). `cursor` 사용 시 기본값은 `false`.
1212
1221
  */
1213
1222
  count?: boolean;
1223
+ /**
1224
+ * Keyset 페이지네이션 커서 — 이전 응답의 `next_cursor` 값.
1225
+ *
1226
+ * 설정하면 `offset` 은 무시되고 생성순(id) 정렬로 커서 이후 문서를 반환합니다.
1227
+ * `offset` 방식은 깊은 페이지일수록 느려지지만 커서 방식은 페이지 깊이와 무관하게
1228
+ * 일정합니다 (무한스크롤 권장). `orderBy` 와 함께 쓸 수 없습니다.
1229
+ */
1230
+ cursor?: string;
1214
1231
  }
1215
1232
  type WhereCondition = {
1216
1233
  /** OR 조건: 배열 내 조건들 중 하나 이상 만족 */
@@ -2272,12 +2289,58 @@ interface RenameFileResponse {
2272
2289
  interface FetchFilesResponse {
2273
2290
  files: FileItem[];
2274
2291
  }
2292
+ /**
2293
+ * 파일 업로드 진행률 (바이트 단위).
2294
+ *
2295
+ * presigned URL 로의 직접 PUT 은 단일 요청이라 청크 개념이 없어,
2296
+ * 영상 업로드(`UploadProgress`, 청크 기반)와 달리 바이트 기준으로 보고한다.
2297
+ * `percentage` 필드명은 영상 업로드와 통일했다.
2298
+ */
2299
+ interface StorageUploadProgress {
2300
+ /** 지금까지 업로드된 바이트 */
2301
+ loaded: number;
2302
+ /** 전체 바이트 (= file.size) */
2303
+ total: number;
2304
+ /** 0~100 정수 백분율 */
2305
+ percentage: number;
2306
+ }
2307
+ /**
2308
+ * 파일 업로드 옵션 (`uploadFile` / `uploadFiles`).
2309
+ *
2310
+ * 기존 `uploadFile(storageId, file, parentId)` 시그니처와 하위 호환을 위해
2311
+ * 3번째 인자는 문자열(parentId) 또는 이 옵션 객체를 모두 받는다.
2312
+ */
2313
+ interface UploadFileOptions {
2314
+ /** 부모 폴더 ID (기존 3번째 인자와 동일 의미) */
2315
+ parentId?: string;
2316
+ /**
2317
+ * 업로드 진행률 콜백. 브라우저 환경(XMLHttpRequest 사용 가능)에서만
2318
+ * 바이트 단위 진행률을 실시간으로 받는다. Node/Edge 등 XHR 이 없는
2319
+ * 환경에서는 시작(0%)/완료(100%)만 통지한다.
2320
+ */
2321
+ onProgress?: (progress: StorageUploadProgress) => void;
2322
+ /** 업로드 취소용 외부 AbortSignal */
2323
+ signal?: AbortSignal;
2324
+ /**
2325
+ * PUT 요청 타임아웃(ms). 기본 30초. 대용량 파일은 이보다 오래 걸릴 수
2326
+ * 있으므로 필요 시 늘린다. 0 또는 무한대면 타임아웃을 두지 않는다.
2327
+ */
2328
+ timeout?: number;
2329
+ }
2275
2330
  /**
2276
2331
  * 경로 기반 업로드 옵션
2277
2332
  */
2278
2333
  interface UploadByPathOptions {
2279
2334
  /** true면 기존 파일 덮어쓰기 (기본값: true) */
2280
2335
  overwrite?: boolean;
2336
+ /**
2337
+ * 업로드 진행률 콜백. 동작은 {@link UploadFileOptions.onProgress} 와 동일하다.
2338
+ */
2339
+ onProgress?: (progress: StorageUploadProgress) => void;
2340
+ /** 업로드 취소용 외부 AbortSignal */
2341
+ signal?: AbortSignal;
2342
+ /** PUT 요청 타임아웃(ms). 기본 30초. */
2343
+ timeout?: number;
2281
2344
  }
2282
2345
  /**
2283
2346
  * 경로로 파일 조회 응답
@@ -2420,8 +2483,18 @@ declare class StorageAPI {
2420
2483
  * Presigned URL 로 직접 업로드. 호출 전에 URL 스킴(https)을 검증해
2421
2484
  * 서버 응답을 그대로 신뢰하는 SSRF/오용 경로를 차단.
2422
2485
  * 타임아웃과 외부 signal 을 모두 지원한다.
2486
+ *
2487
+ * `onProgress` 가 주어지고 `XMLHttpRequest` 를 쓸 수 있는(브라우저) 환경이면
2488
+ * XHR 의 `upload.onprogress` 로 바이트 단위 진행률을 보고한다. 그 외에는
2489
+ * fetch 로 업로드하고 시작(0%)/완료(100%)만 통지한다(Node/Edge 호환).
2423
2490
  */
2424
2491
  private uploadToPresigned;
2492
+ /**
2493
+ * XMLHttpRequest 기반 PUT 업로드. `upload.onprogress` 로 바이트 진행률을
2494
+ * 보고하며, 외부 signal(취소)과 타임아웃을 모두 지원한다. URL 은 호출 전에
2495
+ * 이미 검증된 값을 받는다(uploadToPresigned 에서 스킴 검증 수행).
2496
+ */
2497
+ private putViaXhr;
2425
2498
  /**
2426
2499
  * 파일 목록 조회
2427
2500
  *
@@ -2444,18 +2517,34 @@ declare class StorageAPI {
2444
2517
  *
2445
2518
  * 서버를 거치지 않고 Object Storage에 직접 업로드합니다.
2446
2519
  *
2520
+ * 3번째 인자는 부모 폴더 ID(문자열) 또는 옵션 객체를 받습니다. 옵션으로
2521
+ * `onProgress` 콜백을 넘기면 업로드 진행률(%)을 실시간으로 받을 수 있습니다
2522
+ * (브라우저 환경). 기존 `uploadFile(id, file, 'folder-id')` 호출과 하위 호환됩니다.
2523
+ *
2447
2524
  * @example
2448
2525
  * ```ts
2449
2526
  * const fileInput = document.querySelector('input[type="file"]')
2450
2527
  * const result = await cb.storage.uploadFile('storage-id', fileInput.files[0])
2451
2528
  * console.log(result.url) // 업로드된 파일 URL
2529
+ *
2530
+ * // 특정 폴더에 업로드 (기존 방식 그대로)
2531
+ * await cb.storage.uploadFile('storage-id', file, 'folder-id')
2532
+ *
2533
+ * // 진행률 표시 + 특정 폴더
2534
+ * await cb.storage.uploadFile('storage-id', file, {
2535
+ * parentId: 'folder-id',
2536
+ * onProgress: (p) => console.log(`${p.percentage}%`), // { loaded, total, percentage }
2537
+ * })
2452
2538
  * ```
2453
2539
  */
2454
- uploadFile(storageId: string, file: File, parentId?: string): Promise<UploadFileResponse>;
2540
+ uploadFile(storageId: string, file: File, parentIdOrOptions?: string | UploadFileOptions): Promise<UploadFileResponse>;
2455
2541
  /**
2456
2542
  * 여러 파일 업로드
2543
+ *
2544
+ * `onProgress` 를 옵션으로 넘기면 **파일별로** 진행률 콜백이 호출됩니다
2545
+ * (각 파일마다 0→100%). 전체 진행률이 필요하면 완료된 파일 수를 직접 집계하세요.
2457
2546
  */
2458
- uploadFiles(storageId: string, files: File[], parentId?: string): Promise<UploadFileResponse[]>;
2547
+ uploadFiles(storageId: string, files: File[], parentIdOrOptions?: string | UploadFileOptions): Promise<UploadFileResponse[]>;
2459
2548
  /**
2460
2549
  * 폴더 생성
2461
2550
  */
@@ -9304,4 +9393,4 @@ declare class ConnectBase {
9304
9393
  updateConfig(config: Partial<ConnectBaseConfig>): void;
9305
9394
  }
9306
9395
 
9307
- export { AIAPI, type AIChatRequest, type AIChatResponse, type AIChatStreamCallbacks, type AIChatStreamOptions, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, AUTH_MEMBER_ID_TOKEN, type AckMessagesRequest, type AdMobDailyReport, type AdMobReportResponse, type AdMobReportSummary, type AdReportResponse, type AdReportSummary, type AdmobConnectionInfo, AdsAPI, type AdsenseConnectionInfo, type AgenticSearchProgress, type AggregateResult, type AggregateStage, type AnalyticsConfig, type AnalyticsEvent, ApiError, type ApiErrorDetail, type AppStatsResponse, type ArchivePolicy, type AtomicOperator, type AtomicOperatorType, AuthError, type AuthSettingsResponse, type BackupInfo, type BatchOperation, type BatchOperationResult, type BatchSetPageMetaRequest, type BatchWriteResult, type BillingCycle, type BillingKeyResponse, type BiometricInfo, type BiometricResult, type BulkCreateResponse, type BulkError, type CPUInfo, type CancelPaymentRequest, type CancelPaymentResponse, type CancelSubscriptionRequest, type CategoryInfo, type Channel, type ChannelMembership, type ChannelStats, type ChargeWithBillingKeyRequest, type ChargeWithBillingKeyResponse, type ChatMessage, type ClientMessage, type ColumnSchema, type CommentListResponse, type CompleteUploadRequest, type CompleteUploadResponse, type ConfirmBillingKeyRequest, type ConfirmPaymentRequest, type ConfirmPaymentResponse, ConnectBase, type ConnectBaseConfig, type ConnectedData, type ConnectionState, type ConsentOptions, type ConsumeMessagesResponse, type ConsumeOptions, type CopyTableRequest, type CopyTableResponse, type CreateBackupRequest, type CreateChannelRequest, type CreateCheckoutSessionRequest, type CreateCheckoutSessionResponse, type CreateColumnRequest, type CreateDataRequest, type CreateDocumentRequest, type CreateFolderRequest, type CreateFolderResponse, type CreateGeoIndexRequest, type CreateIndexRequest, type CreateLobbyRequest, type CreatePlaylistRequest, type CreatePublicKeyRequest, type CreatePublicKeyResponse, type CreateRelationRequest, type CreateRolePayload, type CreateRoleResult, type CreateRoomResult, type CreateSearchIndexRequest, type CreateSecurityRuleRequest, type CreateSubscriptionRequest, type CreateTableRequest, type CreateTriggerRequest, type CreateVideoStorageRequest, type DailyReport, type DataItem, type DataType, type DatabaseChange, type DatabaseChangeMessage, type DatabaseChangeType, type DatabaseRealtimeConnectOptions, type DatabaseRealtimeFilter, type DatabaseRealtimeHandlers, type DatabaseRealtimeSubscription, type DatabaseSnapshot, type DatabaseSnapshotMessage, type DatabaseSubscribeOptions, type DeleteWhereResponse, type DeviceInfo, type DocumentResponse, type EnabledProviderInfo, type EnabledProvidersResponse, EndpointAPI, type EndpointCallInit, type ErrorHandler, type ErrorMessage, type ErrorReport, type ErrorTrackerConfig, type ErrorType, type ExportDataRequest, type ExportDataResponse, type FetchDataResponse, type FetchFilesResponse, type FetchPublicKeysResponse, type FileItem, type FileStats, GameAPI, type GameAction, type GameClientConfig, type GameConfig, GameConfigAPI, type GameConfigPatch, type GameConnectionState, type GameConnectionStatus, type GameDelta, GameError, type GameErrorCode, type GameEventHandlers, type GamePlayer, GameRoom, type GameRoomConfig, type GameRoomInfo, GameRoomTransport, type GameServerMessage, type GameServerMessageType, type GameState, type GameTransportConfig, type GenerateUploadURLByPathRequest, type GenerateUploadURLRequest, type GenerateUploadURLResponse, type GeoBoundingBox, type GeoIndex, type GeoNear, type GeoPoint, type GeoPolygon, type GeoQuery, type GeoResponse, type GeoResult, type GetAuthorizationURLResponse, type GetFileByPathResponse, type GoogleConnectionStatus, type HistoryResponse, type ICEServer, type ICEServersResponse, type ImageResult, type ImportDataRequest, type ImportDataResponse, type IndexAnalysis, type IndexRecommendation, type InitUploadResponse, type InvokeFunctionRequest, type InvokeFunctionResponse, type IssueBillingKeyRequest, type IssueBillingKeyResponse, type JoinQueueRequest, type JoinRoomRequest, type JoinRoomResponse, type KnowledgeSearchRequest, type KnowledgeSearchResponse, type KnowledgeSearchResult, type LeaderboardEntry, type LeaderboardListResponse, type LeaderboardScoreEntry, type LifecyclePolicy, type ListBillingKeysResponse, type ListDocumentsResponse, type ListPageMetasOptions, type ListPageMetasResponse, type ListPaymentsOptions, type ListSubscriptionPaymentsRequest, type ListSubscriptionPaymentsResponse, type ListSubscriptionsRequest, type ListSubscriptionsResponse, type LobbyInfo, type LobbyInvite, type LobbyMember, type LobbyVisibility, type MatchResult, type MatchmakingTicket, type MatchqueueListResponse, type MatchqueueTicket, type MemberInfoResponse, type MemberSignInRequest, type MemberSignInResponse, type MemberSignUpRequest, type MemberSignUpResponse, type MembershipTier, type MemoryInfo, type MessageHandler, type MigrateDataRequest, type MigrateDataResponse, type MoveFileRequest, type NackMessageRequest, NativeAPI, type OAuthCallbackResponse, type OAuthProvider, type OpenDialogOptions, type OpenDialogResult, type PageMetaResponse, type PartyInfo, type PartyInvite, type PartyMember, type PauseSubscriptionRequest, type PaymentDetail, type PaymentListItem, type PaymentListResult, type PaymentProvider, type PaymentStatus, type PeerInfo, type Platform, type PlayerEvent, type PlayerStats, type Playlist, type PlaylistItem, type PollUntilOptions, type PongMessage, type PopulateOption, type Position, type PreparePaymentRequest, type PreparePaymentResponse, type PresenceChangeHandler, type PresenceInfo, type PresenceSetOptions, type PresenceStatus, type PresenceStatusResult, type PublicKeyItem, type PublishBatchRequest, type PublishBatchResponse, type PublishMessageRequest, type PublishMessageResponse, type PushPlatform, type PushStatsResult, type QualityProgress, type QueryOptions, type QueueInfoResponse, type QueueMessage, type ReadReceiptHandler, type ReadReceiptInfo, type RealtimeConnectOptions, type RealtimeMessage, type RegisterDeviceRequest, type RelationType, type RenameFileRequest, type RenameFileResponse, type ReplayHighlight, type ReplayInfo, type ReplayPlayerInfo, type RestoreBackupRequest, type RestoreBackupResponse, type RetentionPolicy, type RoleDetail, type RoleList, type RoleListItem, type RolePermissionItem, type RoleUserItem, RolesAPI, type RoomInfo, type RoomStaleMessage, type RoomSummary, type RoomsResponse, type SaveDialogOptions, type SaveDialogResult, type ScriptDetailResponse, type ScriptListResponse, type ScriptMeta, type ScriptVersion, type ScriptVersionListResponse, type SearchIndex, type SearchOptions, type SearchResponse, type SearchResult, type SecurityRule, type SendOptions, type SendSuperChatOptions, type SendSuperChatResponse, type ServerMessage, SessionManager, type SetPageMetaRequest, type Shorts, type ShortsListResponse, type SignalingMessage, type SignalingMessageType, type SlowQueryInfo, type SpectatorInfo, type SpectatorPlayerState, type SpectatorState, type SpeechRecognizeOptions, type SpeechResult, type StateChange, type StateChangeHandler, type StorageUploadOptions, type StreamContentPart, type StreamDoneCallback, type StreamDoneData, type StreamErrorCallback, type StreamHandlers, type StreamImageURLPart, type StreamMessage, type StreamOptions, type StreamSession, type StreamTextPart, type StreamTokenCallback, type StreamToolCallCallback, type StreamToolResultCallback, type StreamURLResponse, type SubscribeOptions, type SubscribeTopicRequest, type SubscribedData, type Subscription, type SubscriptionPaymentResponse, type SubscriptionPaymentStatus, type SubscriptionResponse, type SubscriptionStatus, type SuperChat, type SuperChatType, type SystemInfo, type TTLConfig, type TableAccessLevel, type TableColumnDef, type TableIndex, type TableRelation, type TableSchema, type TableSchemaDefinition, type TokenPersistence, type TransactionRead, type TransactionResult, type TransactionWrite, type TransactionWriteResult, type TranscodeStatus, type TransportType, type Trigger, type TriggerEvent, type TriggerHandlerType, type TypingChangeHandler, type TypingInfo, type UpdateBillingKeyRequest, type UpdateChannelRequest, type UpdateColumnRequest, type UpdateCustomDataRequest, type UpdateCustomDataResponse, type UpdateDataRequest, type UpdateDocumentRequest, type UpdateLobbyRequest, type UpdatePublicKeyRequest, type UpdatePublicKeyResponse, type UpdateRolePayload, type UpdateSecurityRuleRequest, type UpdateSubscriptionRequest, type UpdateTriggerRequest, type UpdateVideoRequest, type UpdateVideoStorageRequest, type UploadByPathOptions, type UploadFileResponse, type UploadOptions, type UploadProgress, type VAPIDPublicKeyResponse, type ValidateResponse, type ValidationSchema, type ValidationSchemaField, type ValidationStateTransitions, type Video, type VideoComment, type VideoCompleteUploadResponse, type VideoListOptions, type VideoListResponse, VideoProcessingError, type VideoQuality, type VideoStatus, type VideoStorage, type VideoStorageListResponse, type VideoVisibility, type VoiceChannel, type VoiceMember, type WaitOptions, type WatchHistoryItem, type WebPushSubscription, type WebRTCConnectOptions, type WebRTCConnectionState, type WebRTCMode, type WhereCondition, type WhereOperator, ConnectBase as default, detectInAppBrowser, escapeToExternalBrowser, isWebTransportSupported, toCreateRoomWire };
9396
+ export { AIAPI, type AIChatRequest, type AIChatResponse, type AIChatStreamCallbacks, type AIChatStreamOptions, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, AUTH_MEMBER_ID_TOKEN, type AckMessagesRequest, type AdMobDailyReport, type AdMobReportResponse, type AdMobReportSummary, type AdReportResponse, type AdReportSummary, type AdmobConnectionInfo, AdsAPI, type AdsenseConnectionInfo, type AgenticSearchProgress, type AggregateResult, type AggregateStage, type AnalyticsConfig, type AnalyticsEvent, ApiError, type ApiErrorDetail, type AppStatsResponse, type ArchivePolicy, type AtomicOperator, type AtomicOperatorType, AuthError, type AuthSettingsResponse, type BackupInfo, type BatchOperation, type BatchOperationResult, type BatchSetPageMetaRequest, type BatchWriteResult, type BillingCycle, type BillingKeyResponse, type BiometricInfo, type BiometricResult, type BulkCreateResponse, type BulkError, type CPUInfo, type CancelPaymentRequest, type CancelPaymentResponse, type CancelSubscriptionRequest, type CategoryInfo, type Channel, type ChannelMembership, type ChannelStats, type ChargeWithBillingKeyRequest, type ChargeWithBillingKeyResponse, type ChatMessage, type ClientMessage, type ColumnSchema, type CommentListResponse, type CompleteUploadRequest, type CompleteUploadResponse, type ConfirmBillingKeyRequest, type ConfirmPaymentRequest, type ConfirmPaymentResponse, ConnectBase, type ConnectBaseConfig, type ConnectedData, type ConnectionState, type ConsentOptions, type ConsumeMessagesResponse, type ConsumeOptions, type CopyTableRequest, type CopyTableResponse, type CreateBackupRequest, type CreateChannelRequest, type CreateCheckoutSessionRequest, type CreateCheckoutSessionResponse, type CreateColumnRequest, type CreateDataRequest, type CreateDocumentRequest, type CreateFolderRequest, type CreateFolderResponse, type CreateGeoIndexRequest, type CreateIndexRequest, type CreateLobbyRequest, type CreatePlaylistRequest, type CreatePublicKeyRequest, type CreatePublicKeyResponse, type CreateRelationRequest, type CreateRolePayload, type CreateRoleResult, type CreateRoomResult, type CreateSearchIndexRequest, type CreateSecurityRuleRequest, type CreateSubscriptionRequest, type CreateTableRequest, type CreateTriggerRequest, type CreateVideoStorageRequest, type DailyReport, type DataItem, type DataType, type DatabaseChange, type DatabaseChangeMessage, type DatabaseChangeType, type DatabaseRealtimeConnectOptions, type DatabaseRealtimeFilter, type DatabaseRealtimeHandlers, type DatabaseRealtimeSubscription, type DatabaseSnapshot, type DatabaseSnapshotMessage, type DatabaseSubscribeOptions, type DeleteWhereResponse, type DeviceInfo, type DocumentResponse, type EnabledProviderInfo, type EnabledProvidersResponse, EndpointAPI, type EndpointCallInit, type ErrorHandler, type ErrorMessage, type ErrorReport, type ErrorTrackerConfig, type ErrorType, type ExportDataRequest, type ExportDataResponse, type FetchDataResponse, type FetchFilesResponse, type FetchPublicKeysResponse, type FileItem, type FileStats, GameAPI, type GameAction, type GameClientConfig, type GameConfig, GameConfigAPI, type GameConfigPatch, type GameConnectionState, type GameConnectionStatus, type GameDelta, GameError, type GameErrorCode, type GameEventHandlers, type GamePlayer, GameRoom, type GameRoomConfig, type GameRoomInfo, GameRoomTransport, type GameServerMessage, type GameServerMessageType, type GameState, type GameTransportConfig, type GenerateUploadURLByPathRequest, type GenerateUploadURLRequest, type GenerateUploadURLResponse, type GeoBoundingBox, type GeoIndex, type GeoNear, type GeoPoint, type GeoPolygon, type GeoQuery, type GeoResponse, type GeoResult, type GetAuthorizationURLResponse, type GetFileByPathResponse, type GoogleConnectionStatus, type HistoryResponse, type ICEServer, type ICEServersResponse, type ImageResult, type ImportDataRequest, type ImportDataResponse, type IndexAnalysis, type IndexRecommendation, type InitUploadResponse, type InvokeFunctionRequest, type InvokeFunctionResponse, type IssueBillingKeyRequest, type IssueBillingKeyResponse, type JoinQueueRequest, type JoinRoomRequest, type JoinRoomResponse, type KnowledgeSearchRequest, type KnowledgeSearchResponse, type KnowledgeSearchResult, type LeaderboardEntry, type LeaderboardListResponse, type LeaderboardScoreEntry, type LifecyclePolicy, type ListBillingKeysResponse, type ListDocumentsResponse, type ListPageMetasOptions, type ListPageMetasResponse, type ListPaymentsOptions, type ListSubscriptionPaymentsRequest, type ListSubscriptionPaymentsResponse, type ListSubscriptionsRequest, type ListSubscriptionsResponse, type LobbyInfo, type LobbyInvite, type LobbyMember, type LobbyVisibility, type MatchResult, type MatchmakingTicket, type MatchqueueListResponse, type MatchqueueTicket, type MemberInfoResponse, type MemberSignInRequest, type MemberSignInResponse, type MemberSignUpRequest, type MemberSignUpResponse, type MembershipTier, type MemoryInfo, type MessageHandler, type MigrateDataRequest, type MigrateDataResponse, type MoveFileRequest, type NackMessageRequest, NativeAPI, type OAuthCallbackResponse, type OAuthProvider, type OpenDialogOptions, type OpenDialogResult, type PageMetaResponse, type PartyInfo, type PartyInvite, type PartyMember, type PauseSubscriptionRequest, type PaymentDetail, type PaymentListItem, type PaymentListResult, type PaymentProvider, type PaymentStatus, type PeerInfo, type Platform, type PlayerEvent, type PlayerStats, type Playlist, type PlaylistItem, type PollUntilOptions, type PongMessage, type PopulateOption, type Position, type PreparePaymentRequest, type PreparePaymentResponse, type PresenceChangeHandler, type PresenceInfo, type PresenceSetOptions, type PresenceStatus, type PresenceStatusResult, type PublicKeyItem, type PublishBatchRequest, type PublishBatchResponse, type PublishMessageRequest, type PublishMessageResponse, type PushPlatform, type PushStatsResult, type QualityProgress, type QueryOptions, type QueueInfoResponse, type QueueMessage, type ReadReceiptHandler, type ReadReceiptInfo, type RealtimeConnectOptions, type RealtimeMessage, type RegisterDeviceRequest, type RelationType, type RenameFileRequest, type RenameFileResponse, type ReplayHighlight, type ReplayInfo, type ReplayPlayerInfo, type RestoreBackupRequest, type RestoreBackupResponse, type RetentionPolicy, type RoleDetail, type RoleList, type RoleListItem, type RolePermissionItem, type RoleUserItem, RolesAPI, type RoomInfo, type RoomStaleMessage, type RoomSummary, type RoomsResponse, type SaveDialogOptions, type SaveDialogResult, type ScriptDetailResponse, type ScriptListResponse, type ScriptMeta, type ScriptVersion, type ScriptVersionListResponse, type SearchIndex, type SearchOptions, type SearchResponse, type SearchResult, type SecurityRule, type SendOptions, type SendSuperChatOptions, type SendSuperChatResponse, type ServerMessage, SessionManager, type SetPageMetaRequest, type Shorts, type ShortsListResponse, type SignalingMessage, type SignalingMessageType, type SlowQueryInfo, type SpectatorInfo, type SpectatorPlayerState, type SpectatorState, type SpeechRecognizeOptions, type SpeechResult, type StateChange, type StateChangeHandler, type StorageUploadOptions, type StorageUploadProgress, type StreamContentPart, type StreamDoneCallback, type StreamDoneData, type StreamErrorCallback, type StreamHandlers, type StreamImageURLPart, type StreamMessage, type StreamOptions, type StreamSession, type StreamTextPart, type StreamTokenCallback, type StreamToolCallCallback, type StreamToolResultCallback, type StreamURLResponse, type SubscribeOptions, type SubscribeTopicRequest, type SubscribedData, type Subscription, type SubscriptionPaymentResponse, type SubscriptionPaymentStatus, type SubscriptionResponse, type SubscriptionStatus, type SuperChat, type SuperChatType, type SystemInfo, type TTLConfig, type TableAccessLevel, type TableColumnDef, type TableIndex, type TableRelation, type TableSchema, type TableSchemaDefinition, type TokenPersistence, type TransactionRead, type TransactionResult, type TransactionWrite, type TransactionWriteResult, type TranscodeStatus, type TransportType, type Trigger, type TriggerEvent, type TriggerHandlerType, type TypingChangeHandler, type TypingInfo, type UpdateBillingKeyRequest, type UpdateChannelRequest, type UpdateColumnRequest, type UpdateCustomDataRequest, type UpdateCustomDataResponse, type UpdateDataRequest, type UpdateDocumentRequest, type UpdateLobbyRequest, type UpdatePublicKeyRequest, type UpdatePublicKeyResponse, type UpdateRolePayload, type UpdateSecurityRuleRequest, type UpdateSubscriptionRequest, type UpdateTriggerRequest, type UpdateVideoRequest, type UpdateVideoStorageRequest, type UploadByPathOptions, type UploadFileOptions, type UploadFileResponse, type UploadOptions, type UploadProgress, type VAPIDPublicKeyResponse, type ValidateResponse, type ValidationSchema, type ValidationSchemaField, type ValidationStateTransitions, type Video, type VideoComment, type VideoCompleteUploadResponse, type VideoListOptions, type VideoListResponse, VideoProcessingError, type VideoQuality, type VideoStatus, type VideoStorage, type VideoStorageListResponse, type VideoVisibility, type VoiceChannel, type VoiceMember, type WaitOptions, type WatchHistoryItem, type WebPushSubscription, type WebRTCConnectOptions, type WebRTCConnectionState, type WebRTCMode, type WhereCondition, type WhereOperator, ConnectBase as default, detectInAppBrowser, escapeToExternalBrowser, isWebTransportSupported, toCreateRoomWire };
package/dist/index.d.ts CHANGED
@@ -1190,8 +1190,17 @@ interface FetchDataResponse {
1190
1190
  *
1191
1191
  * `count: false` 로 조회한 경우: 마지막 페이지(반환 건수 < limit)면 서버가 정확한
1192
1192
  * 총계를 파생해 돌려주고, 아니면 `-1` (미상) 이 반환됩니다.
1193
+ * `cursor` 를 사용한 조회는 기본적으로 `-1` (잔여 카운트가 필요하면 `count: true` 명시).
1193
1194
  */
1194
1195
  total_count: number;
1196
+ /**
1197
+ * 다음 페이지 커서 (keyset 페이지네이션).
1198
+ *
1199
+ * 값이 있으면 다음 페이지가 있을 수 있으며, 다음 요청의 `cursor` 옵션에 그대로
1200
+ * 전달하면 됩니다. 없으면 마지막 페이지입니다. 사용자 정렬(orderBy)과 함께는
1201
+ * 제공되지 않습니다.
1202
+ */
1203
+ next_cursor?: string;
1195
1204
  }
1196
1205
  interface QueryOptions {
1197
1206
  limit?: number;
@@ -1208,9 +1217,17 @@ interface QueryOptions {
1208
1217
  *
1209
1218
  * 필터가 붙은 COUNT 는 본 조회와 같은 비용의 스캔을 한 번 더 도는 것이므로,
1210
1219
  * 총계가 필요 없는 목록/무한스크롤 조회는 `count: false` 로 눈에 띄게 빨라집니다.
1211
- * 생략 시 기본값은 `true` (기존 동작 유지).
1220
+ * 생략 시 기본값은 `true` (기존 동작 유지). `cursor` 사용 시 기본값은 `false`.
1212
1221
  */
1213
1222
  count?: boolean;
1223
+ /**
1224
+ * Keyset 페이지네이션 커서 — 이전 응답의 `next_cursor` 값.
1225
+ *
1226
+ * 설정하면 `offset` 은 무시되고 생성순(id) 정렬로 커서 이후 문서를 반환합니다.
1227
+ * `offset` 방식은 깊은 페이지일수록 느려지지만 커서 방식은 페이지 깊이와 무관하게
1228
+ * 일정합니다 (무한스크롤 권장). `orderBy` 와 함께 쓸 수 없습니다.
1229
+ */
1230
+ cursor?: string;
1214
1231
  }
1215
1232
  type WhereCondition = {
1216
1233
  /** OR 조건: 배열 내 조건들 중 하나 이상 만족 */
@@ -2272,12 +2289,58 @@ interface RenameFileResponse {
2272
2289
  interface FetchFilesResponse {
2273
2290
  files: FileItem[];
2274
2291
  }
2292
+ /**
2293
+ * 파일 업로드 진행률 (바이트 단위).
2294
+ *
2295
+ * presigned URL 로의 직접 PUT 은 단일 요청이라 청크 개념이 없어,
2296
+ * 영상 업로드(`UploadProgress`, 청크 기반)와 달리 바이트 기준으로 보고한다.
2297
+ * `percentage` 필드명은 영상 업로드와 통일했다.
2298
+ */
2299
+ interface StorageUploadProgress {
2300
+ /** 지금까지 업로드된 바이트 */
2301
+ loaded: number;
2302
+ /** 전체 바이트 (= file.size) */
2303
+ total: number;
2304
+ /** 0~100 정수 백분율 */
2305
+ percentage: number;
2306
+ }
2307
+ /**
2308
+ * 파일 업로드 옵션 (`uploadFile` / `uploadFiles`).
2309
+ *
2310
+ * 기존 `uploadFile(storageId, file, parentId)` 시그니처와 하위 호환을 위해
2311
+ * 3번째 인자는 문자열(parentId) 또는 이 옵션 객체를 모두 받는다.
2312
+ */
2313
+ interface UploadFileOptions {
2314
+ /** 부모 폴더 ID (기존 3번째 인자와 동일 의미) */
2315
+ parentId?: string;
2316
+ /**
2317
+ * 업로드 진행률 콜백. 브라우저 환경(XMLHttpRequest 사용 가능)에서만
2318
+ * 바이트 단위 진행률을 실시간으로 받는다. Node/Edge 등 XHR 이 없는
2319
+ * 환경에서는 시작(0%)/완료(100%)만 통지한다.
2320
+ */
2321
+ onProgress?: (progress: StorageUploadProgress) => void;
2322
+ /** 업로드 취소용 외부 AbortSignal */
2323
+ signal?: AbortSignal;
2324
+ /**
2325
+ * PUT 요청 타임아웃(ms). 기본 30초. 대용량 파일은 이보다 오래 걸릴 수
2326
+ * 있으므로 필요 시 늘린다. 0 또는 무한대면 타임아웃을 두지 않는다.
2327
+ */
2328
+ timeout?: number;
2329
+ }
2275
2330
  /**
2276
2331
  * 경로 기반 업로드 옵션
2277
2332
  */
2278
2333
  interface UploadByPathOptions {
2279
2334
  /** true면 기존 파일 덮어쓰기 (기본값: true) */
2280
2335
  overwrite?: boolean;
2336
+ /**
2337
+ * 업로드 진행률 콜백. 동작은 {@link UploadFileOptions.onProgress} 와 동일하다.
2338
+ */
2339
+ onProgress?: (progress: StorageUploadProgress) => void;
2340
+ /** 업로드 취소용 외부 AbortSignal */
2341
+ signal?: AbortSignal;
2342
+ /** PUT 요청 타임아웃(ms). 기본 30초. */
2343
+ timeout?: number;
2281
2344
  }
2282
2345
  /**
2283
2346
  * 경로로 파일 조회 응답
@@ -2420,8 +2483,18 @@ declare class StorageAPI {
2420
2483
  * Presigned URL 로 직접 업로드. 호출 전에 URL 스킴(https)을 검증해
2421
2484
  * 서버 응답을 그대로 신뢰하는 SSRF/오용 경로를 차단.
2422
2485
  * 타임아웃과 외부 signal 을 모두 지원한다.
2486
+ *
2487
+ * `onProgress` 가 주어지고 `XMLHttpRequest` 를 쓸 수 있는(브라우저) 환경이면
2488
+ * XHR 의 `upload.onprogress` 로 바이트 단위 진행률을 보고한다. 그 외에는
2489
+ * fetch 로 업로드하고 시작(0%)/완료(100%)만 통지한다(Node/Edge 호환).
2423
2490
  */
2424
2491
  private uploadToPresigned;
2492
+ /**
2493
+ * XMLHttpRequest 기반 PUT 업로드. `upload.onprogress` 로 바이트 진행률을
2494
+ * 보고하며, 외부 signal(취소)과 타임아웃을 모두 지원한다. URL 은 호출 전에
2495
+ * 이미 검증된 값을 받는다(uploadToPresigned 에서 스킴 검증 수행).
2496
+ */
2497
+ private putViaXhr;
2425
2498
  /**
2426
2499
  * 파일 목록 조회
2427
2500
  *
@@ -2444,18 +2517,34 @@ declare class StorageAPI {
2444
2517
  *
2445
2518
  * 서버를 거치지 않고 Object Storage에 직접 업로드합니다.
2446
2519
  *
2520
+ * 3번째 인자는 부모 폴더 ID(문자열) 또는 옵션 객체를 받습니다. 옵션으로
2521
+ * `onProgress` 콜백을 넘기면 업로드 진행률(%)을 실시간으로 받을 수 있습니다
2522
+ * (브라우저 환경). 기존 `uploadFile(id, file, 'folder-id')` 호출과 하위 호환됩니다.
2523
+ *
2447
2524
  * @example
2448
2525
  * ```ts
2449
2526
  * const fileInput = document.querySelector('input[type="file"]')
2450
2527
  * const result = await cb.storage.uploadFile('storage-id', fileInput.files[0])
2451
2528
  * console.log(result.url) // 업로드된 파일 URL
2529
+ *
2530
+ * // 특정 폴더에 업로드 (기존 방식 그대로)
2531
+ * await cb.storage.uploadFile('storage-id', file, 'folder-id')
2532
+ *
2533
+ * // 진행률 표시 + 특정 폴더
2534
+ * await cb.storage.uploadFile('storage-id', file, {
2535
+ * parentId: 'folder-id',
2536
+ * onProgress: (p) => console.log(`${p.percentage}%`), // { loaded, total, percentage }
2537
+ * })
2452
2538
  * ```
2453
2539
  */
2454
- uploadFile(storageId: string, file: File, parentId?: string): Promise<UploadFileResponse>;
2540
+ uploadFile(storageId: string, file: File, parentIdOrOptions?: string | UploadFileOptions): Promise<UploadFileResponse>;
2455
2541
  /**
2456
2542
  * 여러 파일 업로드
2543
+ *
2544
+ * `onProgress` 를 옵션으로 넘기면 **파일별로** 진행률 콜백이 호출됩니다
2545
+ * (각 파일마다 0→100%). 전체 진행률이 필요하면 완료된 파일 수를 직접 집계하세요.
2457
2546
  */
2458
- uploadFiles(storageId: string, files: File[], parentId?: string): Promise<UploadFileResponse[]>;
2547
+ uploadFiles(storageId: string, files: File[], parentIdOrOptions?: string | UploadFileOptions): Promise<UploadFileResponse[]>;
2459
2548
  /**
2460
2549
  * 폴더 생성
2461
2550
  */
@@ -9304,4 +9393,4 @@ declare class ConnectBase {
9304
9393
  updateConfig(config: Partial<ConnectBaseConfig>): void;
9305
9394
  }
9306
9395
 
9307
- export { AIAPI, type AIChatRequest, type AIChatResponse, type AIChatStreamCallbacks, type AIChatStreamOptions, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, AUTH_MEMBER_ID_TOKEN, type AckMessagesRequest, type AdMobDailyReport, type AdMobReportResponse, type AdMobReportSummary, type AdReportResponse, type AdReportSummary, type AdmobConnectionInfo, AdsAPI, type AdsenseConnectionInfo, type AgenticSearchProgress, type AggregateResult, type AggregateStage, type AnalyticsConfig, type AnalyticsEvent, ApiError, type ApiErrorDetail, type AppStatsResponse, type ArchivePolicy, type AtomicOperator, type AtomicOperatorType, AuthError, type AuthSettingsResponse, type BackupInfo, type BatchOperation, type BatchOperationResult, type BatchSetPageMetaRequest, type BatchWriteResult, type BillingCycle, type BillingKeyResponse, type BiometricInfo, type BiometricResult, type BulkCreateResponse, type BulkError, type CPUInfo, type CancelPaymentRequest, type CancelPaymentResponse, type CancelSubscriptionRequest, type CategoryInfo, type Channel, type ChannelMembership, type ChannelStats, type ChargeWithBillingKeyRequest, type ChargeWithBillingKeyResponse, type ChatMessage, type ClientMessage, type ColumnSchema, type CommentListResponse, type CompleteUploadRequest, type CompleteUploadResponse, type ConfirmBillingKeyRequest, type ConfirmPaymentRequest, type ConfirmPaymentResponse, ConnectBase, type ConnectBaseConfig, type ConnectedData, type ConnectionState, type ConsentOptions, type ConsumeMessagesResponse, type ConsumeOptions, type CopyTableRequest, type CopyTableResponse, type CreateBackupRequest, type CreateChannelRequest, type CreateCheckoutSessionRequest, type CreateCheckoutSessionResponse, type CreateColumnRequest, type CreateDataRequest, type CreateDocumentRequest, type CreateFolderRequest, type CreateFolderResponse, type CreateGeoIndexRequest, type CreateIndexRequest, type CreateLobbyRequest, type CreatePlaylistRequest, type CreatePublicKeyRequest, type CreatePublicKeyResponse, type CreateRelationRequest, type CreateRolePayload, type CreateRoleResult, type CreateRoomResult, type CreateSearchIndexRequest, type CreateSecurityRuleRequest, type CreateSubscriptionRequest, type CreateTableRequest, type CreateTriggerRequest, type CreateVideoStorageRequest, type DailyReport, type DataItem, type DataType, type DatabaseChange, type DatabaseChangeMessage, type DatabaseChangeType, type DatabaseRealtimeConnectOptions, type DatabaseRealtimeFilter, type DatabaseRealtimeHandlers, type DatabaseRealtimeSubscription, type DatabaseSnapshot, type DatabaseSnapshotMessage, type DatabaseSubscribeOptions, type DeleteWhereResponse, type DeviceInfo, type DocumentResponse, type EnabledProviderInfo, type EnabledProvidersResponse, EndpointAPI, type EndpointCallInit, type ErrorHandler, type ErrorMessage, type ErrorReport, type ErrorTrackerConfig, type ErrorType, type ExportDataRequest, type ExportDataResponse, type FetchDataResponse, type FetchFilesResponse, type FetchPublicKeysResponse, type FileItem, type FileStats, GameAPI, type GameAction, type GameClientConfig, type GameConfig, GameConfigAPI, type GameConfigPatch, type GameConnectionState, type GameConnectionStatus, type GameDelta, GameError, type GameErrorCode, type GameEventHandlers, type GamePlayer, GameRoom, type GameRoomConfig, type GameRoomInfo, GameRoomTransport, type GameServerMessage, type GameServerMessageType, type GameState, type GameTransportConfig, type GenerateUploadURLByPathRequest, type GenerateUploadURLRequest, type GenerateUploadURLResponse, type GeoBoundingBox, type GeoIndex, type GeoNear, type GeoPoint, type GeoPolygon, type GeoQuery, type GeoResponse, type GeoResult, type GetAuthorizationURLResponse, type GetFileByPathResponse, type GoogleConnectionStatus, type HistoryResponse, type ICEServer, type ICEServersResponse, type ImageResult, type ImportDataRequest, type ImportDataResponse, type IndexAnalysis, type IndexRecommendation, type InitUploadResponse, type InvokeFunctionRequest, type InvokeFunctionResponse, type IssueBillingKeyRequest, type IssueBillingKeyResponse, type JoinQueueRequest, type JoinRoomRequest, type JoinRoomResponse, type KnowledgeSearchRequest, type KnowledgeSearchResponse, type KnowledgeSearchResult, type LeaderboardEntry, type LeaderboardListResponse, type LeaderboardScoreEntry, type LifecyclePolicy, type ListBillingKeysResponse, type ListDocumentsResponse, type ListPageMetasOptions, type ListPageMetasResponse, type ListPaymentsOptions, type ListSubscriptionPaymentsRequest, type ListSubscriptionPaymentsResponse, type ListSubscriptionsRequest, type ListSubscriptionsResponse, type LobbyInfo, type LobbyInvite, type LobbyMember, type LobbyVisibility, type MatchResult, type MatchmakingTicket, type MatchqueueListResponse, type MatchqueueTicket, type MemberInfoResponse, type MemberSignInRequest, type MemberSignInResponse, type MemberSignUpRequest, type MemberSignUpResponse, type MembershipTier, type MemoryInfo, type MessageHandler, type MigrateDataRequest, type MigrateDataResponse, type MoveFileRequest, type NackMessageRequest, NativeAPI, type OAuthCallbackResponse, type OAuthProvider, type OpenDialogOptions, type OpenDialogResult, type PageMetaResponse, type PartyInfo, type PartyInvite, type PartyMember, type PauseSubscriptionRequest, type PaymentDetail, type PaymentListItem, type PaymentListResult, type PaymentProvider, type PaymentStatus, type PeerInfo, type Platform, type PlayerEvent, type PlayerStats, type Playlist, type PlaylistItem, type PollUntilOptions, type PongMessage, type PopulateOption, type Position, type PreparePaymentRequest, type PreparePaymentResponse, type PresenceChangeHandler, type PresenceInfo, type PresenceSetOptions, type PresenceStatus, type PresenceStatusResult, type PublicKeyItem, type PublishBatchRequest, type PublishBatchResponse, type PublishMessageRequest, type PublishMessageResponse, type PushPlatform, type PushStatsResult, type QualityProgress, type QueryOptions, type QueueInfoResponse, type QueueMessage, type ReadReceiptHandler, type ReadReceiptInfo, type RealtimeConnectOptions, type RealtimeMessage, type RegisterDeviceRequest, type RelationType, type RenameFileRequest, type RenameFileResponse, type ReplayHighlight, type ReplayInfo, type ReplayPlayerInfo, type RestoreBackupRequest, type RestoreBackupResponse, type RetentionPolicy, type RoleDetail, type RoleList, type RoleListItem, type RolePermissionItem, type RoleUserItem, RolesAPI, type RoomInfo, type RoomStaleMessage, type RoomSummary, type RoomsResponse, type SaveDialogOptions, type SaveDialogResult, type ScriptDetailResponse, type ScriptListResponse, type ScriptMeta, type ScriptVersion, type ScriptVersionListResponse, type SearchIndex, type SearchOptions, type SearchResponse, type SearchResult, type SecurityRule, type SendOptions, type SendSuperChatOptions, type SendSuperChatResponse, type ServerMessage, SessionManager, type SetPageMetaRequest, type Shorts, type ShortsListResponse, type SignalingMessage, type SignalingMessageType, type SlowQueryInfo, type SpectatorInfo, type SpectatorPlayerState, type SpectatorState, type SpeechRecognizeOptions, type SpeechResult, type StateChange, type StateChangeHandler, type StorageUploadOptions, type StreamContentPart, type StreamDoneCallback, type StreamDoneData, type StreamErrorCallback, type StreamHandlers, type StreamImageURLPart, type StreamMessage, type StreamOptions, type StreamSession, type StreamTextPart, type StreamTokenCallback, type StreamToolCallCallback, type StreamToolResultCallback, type StreamURLResponse, type SubscribeOptions, type SubscribeTopicRequest, type SubscribedData, type Subscription, type SubscriptionPaymentResponse, type SubscriptionPaymentStatus, type SubscriptionResponse, type SubscriptionStatus, type SuperChat, type SuperChatType, type SystemInfo, type TTLConfig, type TableAccessLevel, type TableColumnDef, type TableIndex, type TableRelation, type TableSchema, type TableSchemaDefinition, type TokenPersistence, type TransactionRead, type TransactionResult, type TransactionWrite, type TransactionWriteResult, type TranscodeStatus, type TransportType, type Trigger, type TriggerEvent, type TriggerHandlerType, type TypingChangeHandler, type TypingInfo, type UpdateBillingKeyRequest, type UpdateChannelRequest, type UpdateColumnRequest, type UpdateCustomDataRequest, type UpdateCustomDataResponse, type UpdateDataRequest, type UpdateDocumentRequest, type UpdateLobbyRequest, type UpdatePublicKeyRequest, type UpdatePublicKeyResponse, type UpdateRolePayload, type UpdateSecurityRuleRequest, type UpdateSubscriptionRequest, type UpdateTriggerRequest, type UpdateVideoRequest, type UpdateVideoStorageRequest, type UploadByPathOptions, type UploadFileResponse, type UploadOptions, type UploadProgress, type VAPIDPublicKeyResponse, type ValidateResponse, type ValidationSchema, type ValidationSchemaField, type ValidationStateTransitions, type Video, type VideoComment, type VideoCompleteUploadResponse, type VideoListOptions, type VideoListResponse, VideoProcessingError, type VideoQuality, type VideoStatus, type VideoStorage, type VideoStorageListResponse, type VideoVisibility, type VoiceChannel, type VoiceMember, type WaitOptions, type WatchHistoryItem, type WebPushSubscription, type WebRTCConnectOptions, type WebRTCConnectionState, type WebRTCMode, type WhereCondition, type WhereOperator, ConnectBase as default, detectInAppBrowser, escapeToExternalBrowser, isWebTransportSupported, toCreateRoomWire };
9396
+ export { AIAPI, type AIChatRequest, type AIChatResponse, type AIChatStreamCallbacks, type AIChatStreamOptions, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, AUTH_MEMBER_ID_TOKEN, type AckMessagesRequest, type AdMobDailyReport, type AdMobReportResponse, type AdMobReportSummary, type AdReportResponse, type AdReportSummary, type AdmobConnectionInfo, AdsAPI, type AdsenseConnectionInfo, type AgenticSearchProgress, type AggregateResult, type AggregateStage, type AnalyticsConfig, type AnalyticsEvent, ApiError, type ApiErrorDetail, type AppStatsResponse, type ArchivePolicy, type AtomicOperator, type AtomicOperatorType, AuthError, type AuthSettingsResponse, type BackupInfo, type BatchOperation, type BatchOperationResult, type BatchSetPageMetaRequest, type BatchWriteResult, type BillingCycle, type BillingKeyResponse, type BiometricInfo, type BiometricResult, type BulkCreateResponse, type BulkError, type CPUInfo, type CancelPaymentRequest, type CancelPaymentResponse, type CancelSubscriptionRequest, type CategoryInfo, type Channel, type ChannelMembership, type ChannelStats, type ChargeWithBillingKeyRequest, type ChargeWithBillingKeyResponse, type ChatMessage, type ClientMessage, type ColumnSchema, type CommentListResponse, type CompleteUploadRequest, type CompleteUploadResponse, type ConfirmBillingKeyRequest, type ConfirmPaymentRequest, type ConfirmPaymentResponse, ConnectBase, type ConnectBaseConfig, type ConnectedData, type ConnectionState, type ConsentOptions, type ConsumeMessagesResponse, type ConsumeOptions, type CopyTableRequest, type CopyTableResponse, type CreateBackupRequest, type CreateChannelRequest, type CreateCheckoutSessionRequest, type CreateCheckoutSessionResponse, type CreateColumnRequest, type CreateDataRequest, type CreateDocumentRequest, type CreateFolderRequest, type CreateFolderResponse, type CreateGeoIndexRequest, type CreateIndexRequest, type CreateLobbyRequest, type CreatePlaylistRequest, type CreatePublicKeyRequest, type CreatePublicKeyResponse, type CreateRelationRequest, type CreateRolePayload, type CreateRoleResult, type CreateRoomResult, type CreateSearchIndexRequest, type CreateSecurityRuleRequest, type CreateSubscriptionRequest, type CreateTableRequest, type CreateTriggerRequest, type CreateVideoStorageRequest, type DailyReport, type DataItem, type DataType, type DatabaseChange, type DatabaseChangeMessage, type DatabaseChangeType, type DatabaseRealtimeConnectOptions, type DatabaseRealtimeFilter, type DatabaseRealtimeHandlers, type DatabaseRealtimeSubscription, type DatabaseSnapshot, type DatabaseSnapshotMessage, type DatabaseSubscribeOptions, type DeleteWhereResponse, type DeviceInfo, type DocumentResponse, type EnabledProviderInfo, type EnabledProvidersResponse, EndpointAPI, type EndpointCallInit, type ErrorHandler, type ErrorMessage, type ErrorReport, type ErrorTrackerConfig, type ErrorType, type ExportDataRequest, type ExportDataResponse, type FetchDataResponse, type FetchFilesResponse, type FetchPublicKeysResponse, type FileItem, type FileStats, GameAPI, type GameAction, type GameClientConfig, type GameConfig, GameConfigAPI, type GameConfigPatch, type GameConnectionState, type GameConnectionStatus, type GameDelta, GameError, type GameErrorCode, type GameEventHandlers, type GamePlayer, GameRoom, type GameRoomConfig, type GameRoomInfo, GameRoomTransport, type GameServerMessage, type GameServerMessageType, type GameState, type GameTransportConfig, type GenerateUploadURLByPathRequest, type GenerateUploadURLRequest, type GenerateUploadURLResponse, type GeoBoundingBox, type GeoIndex, type GeoNear, type GeoPoint, type GeoPolygon, type GeoQuery, type GeoResponse, type GeoResult, type GetAuthorizationURLResponse, type GetFileByPathResponse, type GoogleConnectionStatus, type HistoryResponse, type ICEServer, type ICEServersResponse, type ImageResult, type ImportDataRequest, type ImportDataResponse, type IndexAnalysis, type IndexRecommendation, type InitUploadResponse, type InvokeFunctionRequest, type InvokeFunctionResponse, type IssueBillingKeyRequest, type IssueBillingKeyResponse, type JoinQueueRequest, type JoinRoomRequest, type JoinRoomResponse, type KnowledgeSearchRequest, type KnowledgeSearchResponse, type KnowledgeSearchResult, type LeaderboardEntry, type LeaderboardListResponse, type LeaderboardScoreEntry, type LifecyclePolicy, type ListBillingKeysResponse, type ListDocumentsResponse, type ListPageMetasOptions, type ListPageMetasResponse, type ListPaymentsOptions, type ListSubscriptionPaymentsRequest, type ListSubscriptionPaymentsResponse, type ListSubscriptionsRequest, type ListSubscriptionsResponse, type LobbyInfo, type LobbyInvite, type LobbyMember, type LobbyVisibility, type MatchResult, type MatchmakingTicket, type MatchqueueListResponse, type MatchqueueTicket, type MemberInfoResponse, type MemberSignInRequest, type MemberSignInResponse, type MemberSignUpRequest, type MemberSignUpResponse, type MembershipTier, type MemoryInfo, type MessageHandler, type MigrateDataRequest, type MigrateDataResponse, type MoveFileRequest, type NackMessageRequest, NativeAPI, type OAuthCallbackResponse, type OAuthProvider, type OpenDialogOptions, type OpenDialogResult, type PageMetaResponse, type PartyInfo, type PartyInvite, type PartyMember, type PauseSubscriptionRequest, type PaymentDetail, type PaymentListItem, type PaymentListResult, type PaymentProvider, type PaymentStatus, type PeerInfo, type Platform, type PlayerEvent, type PlayerStats, type Playlist, type PlaylistItem, type PollUntilOptions, type PongMessage, type PopulateOption, type Position, type PreparePaymentRequest, type PreparePaymentResponse, type PresenceChangeHandler, type PresenceInfo, type PresenceSetOptions, type PresenceStatus, type PresenceStatusResult, type PublicKeyItem, type PublishBatchRequest, type PublishBatchResponse, type PublishMessageRequest, type PublishMessageResponse, type PushPlatform, type PushStatsResult, type QualityProgress, type QueryOptions, type QueueInfoResponse, type QueueMessage, type ReadReceiptHandler, type ReadReceiptInfo, type RealtimeConnectOptions, type RealtimeMessage, type RegisterDeviceRequest, type RelationType, type RenameFileRequest, type RenameFileResponse, type ReplayHighlight, type ReplayInfo, type ReplayPlayerInfo, type RestoreBackupRequest, type RestoreBackupResponse, type RetentionPolicy, type RoleDetail, type RoleList, type RoleListItem, type RolePermissionItem, type RoleUserItem, RolesAPI, type RoomInfo, type RoomStaleMessage, type RoomSummary, type RoomsResponse, type SaveDialogOptions, type SaveDialogResult, type ScriptDetailResponse, type ScriptListResponse, type ScriptMeta, type ScriptVersion, type ScriptVersionListResponse, type SearchIndex, type SearchOptions, type SearchResponse, type SearchResult, type SecurityRule, type SendOptions, type SendSuperChatOptions, type SendSuperChatResponse, type ServerMessage, SessionManager, type SetPageMetaRequest, type Shorts, type ShortsListResponse, type SignalingMessage, type SignalingMessageType, type SlowQueryInfo, type SpectatorInfo, type SpectatorPlayerState, type SpectatorState, type SpeechRecognizeOptions, type SpeechResult, type StateChange, type StateChangeHandler, type StorageUploadOptions, type StorageUploadProgress, type StreamContentPart, type StreamDoneCallback, type StreamDoneData, type StreamErrorCallback, type StreamHandlers, type StreamImageURLPart, type StreamMessage, type StreamOptions, type StreamSession, type StreamTextPart, type StreamTokenCallback, type StreamToolCallCallback, type StreamToolResultCallback, type StreamURLResponse, type SubscribeOptions, type SubscribeTopicRequest, type SubscribedData, type Subscription, type SubscriptionPaymentResponse, type SubscriptionPaymentStatus, type SubscriptionResponse, type SubscriptionStatus, type SuperChat, type SuperChatType, type SystemInfo, type TTLConfig, type TableAccessLevel, type TableColumnDef, type TableIndex, type TableRelation, type TableSchema, type TableSchemaDefinition, type TokenPersistence, type TransactionRead, type TransactionResult, type TransactionWrite, type TransactionWriteResult, type TranscodeStatus, type TransportType, type Trigger, type TriggerEvent, type TriggerHandlerType, type TypingChangeHandler, type TypingInfo, type UpdateBillingKeyRequest, type UpdateChannelRequest, type UpdateColumnRequest, type UpdateCustomDataRequest, type UpdateCustomDataResponse, type UpdateDataRequest, type UpdateDocumentRequest, type UpdateLobbyRequest, type UpdatePublicKeyRequest, type UpdatePublicKeyResponse, type UpdateRolePayload, type UpdateSecurityRuleRequest, type UpdateSubscriptionRequest, type UpdateTriggerRequest, type UpdateVideoRequest, type UpdateVideoStorageRequest, type UploadByPathOptions, type UploadFileOptions, type UploadFileResponse, type UploadOptions, type UploadProgress, type VAPIDPublicKeyResponse, type ValidateResponse, type ValidationSchema, type ValidationSchemaField, type ValidationStateTransitions, type Video, type VideoComment, type VideoCompleteUploadResponse, type VideoListOptions, type VideoListResponse, VideoProcessingError, type VideoQuality, type VideoStatus, type VideoStorage, type VideoStorageListResponse, type VideoVisibility, type VoiceChannel, type VoiceMember, type WaitOptions, type WatchHistoryItem, type WebPushSubscription, type WebRTCConnectOptions, type WebRTCConnectionState, type WebRTCMode, type WhereCondition, type WhereOperator, ConnectBase as default, detectInAppBrowser, escapeToExternalBrowser, isWebTransportSupported, toCreateRoomWire };
package/dist/index.js CHANGED
@@ -1315,6 +1315,7 @@ var DatabaseAPI = class {
1315
1315
  if (options?.limit) params.append("limit", options.limit.toString());
1316
1316
  if (options?.offset) params.append("offset", options.offset.toString());
1317
1317
  if (options?.count === false) params.append("count", "false");
1318
+ if (options?.cursor) params.append("cursor", options.cursor);
1318
1319
  const queryString = params.toString();
1319
1320
  const url = queryString ? `${prefix}/tables/${tableId}/data?${queryString}` : `${prefix}/tables/${tableId}/data`;
1320
1321
  return this.http.get(url);
@@ -1334,7 +1335,8 @@ var DatabaseAPI = class {
1334
1335
  offset: options.offset,
1335
1336
  select: options.select,
1336
1337
  exclude: options.exclude,
1337
- count: options.count
1338
+ count: options.count,
1339
+ cursor: options.cursor
1338
1340
  }
1339
1341
  );
1340
1342
  }
@@ -2295,18 +2297,27 @@ var StorageAPI = class {
2295
2297
  * Presigned URL 로 직접 업로드. 호출 전에 URL 스킴(https)을 검증해
2296
2298
  * 서버 응답을 그대로 신뢰하는 SSRF/오용 경로를 차단.
2297
2299
  * 타임아웃과 외부 signal 을 모두 지원한다.
2300
+ *
2301
+ * `onProgress` 가 주어지고 `XMLHttpRequest` 를 쓸 수 있는(브라우저) 환경이면
2302
+ * XHR 의 `upload.onprogress` 로 바이트 단위 진행률을 보고한다. 그 외에는
2303
+ * fetch 로 업로드하고 시작(0%)/완료(100%)만 통지한다(Node/Edge 호환).
2298
2304
  */
2299
2305
  async uploadToPresigned(rawUrl, file, options) {
2300
2306
  const parsed = validateExternalUrl(rawUrl, {
2301
2307
  allowLocalhost: isLocalhostOrigin(),
2302
2308
  context: "storage.presigned-url"
2303
2309
  });
2310
+ const url = parsed.toString();
2311
+ if (options?.onProgress && typeof XMLHttpRequest !== "undefined") {
2312
+ return this.putViaXhr(url, file, options.onProgress, options);
2313
+ }
2304
2314
  const { signal, cleanup } = createTimeoutController({
2305
2315
  timeout: options?.timeout,
2306
2316
  signal: options?.signal
2307
2317
  });
2308
2318
  try {
2309
- const response = await fetch(parsed.toString(), {
2319
+ options?.onProgress?.({ loaded: 0, total: file.size, percentage: 0 });
2320
+ const response = await fetch(url, {
2310
2321
  method: "PUT",
2311
2322
  body: file,
2312
2323
  headers: {
@@ -2321,10 +2332,79 @@ var StorageAPI = class {
2321
2332
  "PRESIGNED_UPLOAD_FAILED"
2322
2333
  );
2323
2334
  }
2335
+ options?.onProgress?.({ loaded: file.size, total: file.size, percentage: 100 });
2324
2336
  } finally {
2325
2337
  cleanup();
2326
2338
  }
2327
2339
  }
2340
+ /**
2341
+ * XMLHttpRequest 기반 PUT 업로드. `upload.onprogress` 로 바이트 진행률을
2342
+ * 보고하며, 외부 signal(취소)과 타임아웃을 모두 지원한다. URL 은 호출 전에
2343
+ * 이미 검증된 값을 받는다(uploadToPresigned 에서 스킴 검증 수행).
2344
+ */
2345
+ putViaXhr(url, file, onProgress, options) {
2346
+ return new Promise((resolve, reject) => {
2347
+ const external = options?.signal;
2348
+ if (external?.aborted) {
2349
+ reject(external.reason ?? new DOMException("Aborted", "AbortError"));
2350
+ return;
2351
+ }
2352
+ const xhr = new XMLHttpRequest();
2353
+ xhr.open("PUT", url, true);
2354
+ xhr.setRequestHeader("Content-Type", file.type || "application/octet-stream");
2355
+ const timeout = options?.timeout ?? DEFAULT_REQUEST_TIMEOUT_MS;
2356
+ if (timeout > 0 && Number.isFinite(timeout)) {
2357
+ xhr.timeout = timeout;
2358
+ }
2359
+ let abortListener = null;
2360
+ const cleanup = () => {
2361
+ if (external && abortListener) {
2362
+ external.removeEventListener("abort", abortListener);
2363
+ }
2364
+ };
2365
+ if (external) {
2366
+ abortListener = () => xhr.abort();
2367
+ external.addEventListener("abort", abortListener, { once: true });
2368
+ }
2369
+ xhr.upload.onprogress = (event) => {
2370
+ if (!event.lengthComputable) return;
2371
+ const total = event.total || file.size;
2372
+ onProgress({
2373
+ loaded: event.loaded,
2374
+ total,
2375
+ percentage: total > 0 ? Math.round(event.loaded / total * 100) : 0
2376
+ });
2377
+ };
2378
+ xhr.onload = () => {
2379
+ cleanup();
2380
+ if (xhr.status >= 200 && xhr.status < 300) {
2381
+ onProgress({ loaded: file.size, total: file.size, percentage: 100 });
2382
+ resolve();
2383
+ } else {
2384
+ reject(
2385
+ new ApiError(
2386
+ xhr.status,
2387
+ `Upload failed: ${xhr.statusText || "unknown error"}`,
2388
+ "PRESIGNED_UPLOAD_FAILED"
2389
+ )
2390
+ );
2391
+ }
2392
+ };
2393
+ xhr.onerror = () => {
2394
+ cleanup();
2395
+ reject(new ApiError(0, "Upload failed: network error", "PRESIGNED_UPLOAD_FAILED"));
2396
+ };
2397
+ xhr.ontimeout = () => {
2398
+ cleanup();
2399
+ reject(new DOMException(`Request timed out after ${timeout}ms`, "TimeoutError"));
2400
+ };
2401
+ xhr.onabort = () => {
2402
+ cleanup();
2403
+ reject(external?.reason ?? new DOMException("Aborted", "AbortError"));
2404
+ };
2405
+ xhr.send(file);
2406
+ });
2407
+ }
2328
2408
  /**
2329
2409
  * 파일 목록 조회
2330
2410
  *
@@ -2354,14 +2434,28 @@ var StorageAPI = class {
2354
2434
  *
2355
2435
  * 서버를 거치지 않고 Object Storage에 직접 업로드합니다.
2356
2436
  *
2437
+ * 3번째 인자는 부모 폴더 ID(문자열) 또는 옵션 객체를 받습니다. 옵션으로
2438
+ * `onProgress` 콜백을 넘기면 업로드 진행률(%)을 실시간으로 받을 수 있습니다
2439
+ * (브라우저 환경). 기존 `uploadFile(id, file, 'folder-id')` 호출과 하위 호환됩니다.
2440
+ *
2357
2441
  * @example
2358
2442
  * ```ts
2359
2443
  * const fileInput = document.querySelector('input[type="file"]')
2360
2444
  * const result = await cb.storage.uploadFile('storage-id', fileInput.files[0])
2361
2445
  * console.log(result.url) // 업로드된 파일 URL
2446
+ *
2447
+ * // 특정 폴더에 업로드 (기존 방식 그대로)
2448
+ * await cb.storage.uploadFile('storage-id', file, 'folder-id')
2449
+ *
2450
+ * // 진행률 표시 + 특정 폴더
2451
+ * await cb.storage.uploadFile('storage-id', file, {
2452
+ * parentId: 'folder-id',
2453
+ * onProgress: (p) => console.log(`${p.percentage}%`), // { loaded, total, percentage }
2454
+ * })
2362
2455
  * ```
2363
2456
  */
2364
- async uploadFile(storageId, file, parentId) {
2457
+ async uploadFile(storageId, file, parentIdOrOptions) {
2458
+ const options = typeof parentIdOrOptions === "string" ? { parentId: parentIdOrOptions } : parentIdOrOptions ?? {};
2365
2459
  const prefix = this.getPublicPrefix();
2366
2460
  const presignedResponse = await this.http.post(
2367
2461
  `${prefix}/storages/files/${storageId}/presigned-url`,
@@ -2369,10 +2463,14 @@ var StorageAPI = class {
2369
2463
  file_name: file.name,
2370
2464
  file_size: file.size,
2371
2465
  mime_type: file.type || "application/octet-stream",
2372
- parent_id: parentId
2466
+ parent_id: options.parentId
2373
2467
  }
2374
2468
  );
2375
- await this.uploadToPresigned(presignedResponse.upload_url, file);
2469
+ await this.uploadToPresigned(presignedResponse.upload_url, file, {
2470
+ onProgress: options.onProgress,
2471
+ signal: options.signal,
2472
+ timeout: options.timeout
2473
+ });
2376
2474
  const completeResponse = await this.http.post(
2377
2475
  `${prefix}/storages/files/${storageId}/complete-upload`,
2378
2476
  { file_id: presignedResponse.file_id }
@@ -2391,11 +2489,14 @@ var StorageAPI = class {
2391
2489
  }
2392
2490
  /**
2393
2491
  * 여러 파일 업로드
2492
+ *
2493
+ * `onProgress` 를 옵션으로 넘기면 **파일별로** 진행률 콜백이 호출됩니다
2494
+ * (각 파일마다 0→100%). 전체 진행률이 필요하면 완료된 파일 수를 직접 집계하세요.
2394
2495
  */
2395
- async uploadFiles(storageId, files, parentId) {
2496
+ async uploadFiles(storageId, files, parentIdOrOptions) {
2396
2497
  const results = [];
2397
2498
  for (const file of files) {
2398
- const result = await this.uploadFile(storageId, file, parentId);
2499
+ const result = await this.uploadFile(storageId, file, parentIdOrOptions);
2399
2500
  results.push(result);
2400
2501
  }
2401
2502
  return results;
@@ -2494,7 +2595,11 @@ var StorageAPI = class {
2494
2595
  overwrite
2495
2596
  }
2496
2597
  );
2497
- await this.uploadToPresigned(presignedResponse.upload_url, file);
2598
+ await this.uploadToPresigned(presignedResponse.upload_url, file, {
2599
+ onProgress: options?.onProgress,
2600
+ signal: options?.signal,
2601
+ timeout: options?.timeout
2602
+ });
2498
2603
  const completeResponse = await this.http.post(
2499
2604
  `${prefix}/storages/files/${storageId}/complete-upload`,
2500
2605
  { file_id: presignedResponse.file_id }