connectbase-client 0.15.0 → 0.16.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
@@ -13,6 +13,7 @@ declare class AuthError extends Error {
13
13
  constructor(message: string);
14
14
  }
15
15
 
16
+ type TokenPersistence = 'localStorage' | 'sessionStorage' | 'none';
16
17
  interface HttpClientConfig {
17
18
  baseUrl: string;
18
19
  /**
@@ -27,6 +28,13 @@ interface HttpClientConfig {
27
28
  secretKey?: string;
28
29
  accessToken?: string;
29
30
  refreshToken?: string;
31
+ /**
32
+ * 토큰 저장 방식.
33
+ * - 'localStorage': 브라우저 종료 후에도 유지 (기본값)
34
+ * - 'sessionStorage': 탭 종료 시 삭제
35
+ * - 'none': 메모리에만 저장 (페이지 새로고침 시 삭제)
36
+ */
37
+ persistence?: TokenPersistence;
30
38
  onTokenRefresh?: (tokens: {
31
39
  accessToken: string;
32
40
  refreshToken: string;
@@ -42,10 +50,17 @@ declare class HttpClient {
42
50
  private config;
43
51
  private isRefreshing;
44
52
  private refreshPromise;
53
+ private storageKey;
45
54
  constructor(config: HttpClientConfig);
46
55
  updateConfig(config: Partial<HttpClientConfig>): void;
47
56
  setTokens(accessToken: string, refreshToken: string): void;
48
57
  clearTokens(): void;
58
+ private get persistence();
59
+ private getStorage;
60
+ private buildStorageKey;
61
+ private persistTokens;
62
+ private restoreTokens;
63
+ private removePersistedTokens;
49
64
  /**
50
65
  * Public Key 가 설정되어 있는지 확인
51
66
  */
@@ -494,8 +509,8 @@ interface UpdateDataRequest {
494
509
  data: Record<string, unknown>;
495
510
  }
496
511
  interface FetchDataResponse {
497
- datas: DataItem[];
498
- total_size: number;
512
+ data: DataItem[];
513
+ total_count: number;
499
514
  }
500
515
  interface QueryOptions {
501
516
  limit?: number;
@@ -1661,8 +1676,20 @@ declare class StorageAPI {
1661
1676
  private getPublicPrefix;
1662
1677
  /**
1663
1678
  * 파일 목록 조회
1679
+ *
1680
+ * @param storageId - 파일 스토리지 ID
1681
+ * @param parentId - 부모 폴더 ID (미지정 시 루트 폴더)
1682
+ *
1683
+ * @example
1684
+ * ```ts
1685
+ * // 루트 폴더의 파일 목록
1686
+ * const files = await cb.storage.getFiles('storage-id')
1687
+ *
1688
+ * // 특정 폴더의 하위 파일 목록
1689
+ * const subFiles = await cb.storage.getFiles('storage-id', 'folder-id')
1690
+ * ```
1664
1691
  */
1665
- getFiles(storageId: string): Promise<FileItem[]>;
1692
+ getFiles(storageId: string, parentId?: string): Promise<FileItem[]>;
1666
1693
  /**
1667
1694
  * 파일 업로드 (Presigned URL 방식)
1668
1695
  *
@@ -2874,7 +2901,7 @@ declare class ErrorTrackerAPI {
2874
2901
  /**
2875
2902
  * OAuth 프로바이더 타입
2876
2903
  */
2877
- type OAuthProvider = 'google' | 'naver' | 'github' | 'discord';
2904
+ type OAuthProvider = 'google' | 'kakao' | 'naver' | 'apple' | 'github' | 'discord';
2878
2905
  /**
2879
2906
  * 활성화된 OAuth 프로바이더 정보
2880
2907
  */
@@ -6424,6 +6451,14 @@ interface ConnectBaseConfig {
6424
6451
  * ```
6425
6452
  */
6426
6453
  onTokenExpired?: () => void;
6454
+ /**
6455
+ * 토큰 저장 방식.
6456
+ * - 'localStorage': 브라우저 종료 후에도 유지 (기본값)
6457
+ * - 'sessionStorage': 탭 종료 시 삭제
6458
+ * - 'none': 메모리에만 저장 (페이지 새로고침 시 삭제)
6459
+ * @default 'localStorage'
6460
+ */
6461
+ persistence?: TokenPersistence;
6427
6462
  /**
6428
6463
  * 에러 트래커 설정
6429
6464
  */
@@ -6566,4 +6601,4 @@ declare class ConnectBase {
6566
6601
  updateConfig(config: Partial<ConnectBaseConfig>): void;
6567
6602
  }
6568
6603
 
6569
- export { AIAPI, type AIChatRequest, type AIChatResponse, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, type AckMessagesRequest, type AdReportResponse, type AdReportSummary, AdsAPI, 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 BatchSetPageMetaRequest, 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 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 CreateColumnRequest, type CreateDataRequest, type CreateDocumentRequest, type CreateFolderRequest, type CreateFolderResponse, type CreateGeoIndexRequest, type CreateIndexRequest, type CreateLobbyRequest, type CreatePlaylistRequest, type CreatePublicKeyRequest, type CreatePublicKeyResponse, type CreateRelationRequest, 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 DatabasePresenceState, type DatabaseRealtimeConnectOptions, type DatabaseRealtimeFilter, type DatabaseRealtimeHandlers, type DatabaseRealtimeSubscription, type DatabaseSnapshot, type DatabaseSnapshotMessage, type DatabaseSubscribeOptions, type DeleteWhereResponse, type DeviceInfo, type DocumentResponse, type EnabledProviderInfo, type EnabledProvidersResponse, 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 GameConnectionState, type GameConnectionStatus, type GameDelta, 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 GeoIndex, type GeoNear, type GeoPoint, type GeoPolygon, type GeoQuery, type GeoResponse, type GeoResult, type GeoWithin, type GetAuthorizationURLResponse, type GetFileByPathResponse, type GoogleConnectionStatus, type GuestMemberSignInResponse, 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 LifecyclePolicy, type ListBillingKeysResponse, type ListDocumentsResponse, type ListPageMetasOptions, type ListPageMetasResponse, type ListSubscriptionPaymentsRequest, type ListSubscriptionPaymentsResponse, type ListSubscriptionsRequest, type ListSubscriptionsResponse, type LobbyInfo, type LobbyInvite, type LobbyMember, type LobbyVisibility, type MatchResult, type MatchmakingTicket, 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 PaymentProvider, type PaymentStatus, type PeerInfo, type Platform, type PlayerEvent, type PlayerStats, type Playlist, type PlaylistItem, 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 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 RoomInfo, type RoomStats, type RoomsResponse, type SaveDialogOptions, type SaveDialogResult, type SearchIndex, type SearchOptions, type SearchResponse, type SearchResult, type SecurityRule, type SendOptions, type ServerMessage, SessionManager, type SetPageMetaRequest, type Shorts, type ShortsListResponse, type SignalingMessage, type SignalingMessageType, type SlowQueryInfo, type SpectatorInfo, type SpectatorPlayerState, type SpectatorState, type StateChange, type StateChangeHandler, type StorageUploadOptions, type StreamDoneCallback, type StreamDoneData, type StreamErrorCallback, type StreamHandlers, type StreamMessage, type StreamOptions, type StreamSession, 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 SystemInfo, type TTLConfig, type TableAccessLevel, type TableColumnDef, type TableIndex, type TableRelation, type TableSchema, type TableSchemaDefinition, type TransactionRead, type TransactionWrite, 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 UpdateLobbyRequest, type UpdatePublicKeyRequest, type UpdatePublicKeyResponse, 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 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, isWebTransportSupported };
6604
+ export { AIAPI, type AIChatRequest, type AIChatResponse, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, type AckMessagesRequest, type AdReportResponse, type AdReportSummary, AdsAPI, 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 BatchSetPageMetaRequest, 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 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 CreateColumnRequest, type CreateDataRequest, type CreateDocumentRequest, type CreateFolderRequest, type CreateFolderResponse, type CreateGeoIndexRequest, type CreateIndexRequest, type CreateLobbyRequest, type CreatePlaylistRequest, type CreatePublicKeyRequest, type CreatePublicKeyResponse, type CreateRelationRequest, 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 DatabasePresenceState, type DatabaseRealtimeConnectOptions, type DatabaseRealtimeFilter, type DatabaseRealtimeHandlers, type DatabaseRealtimeSubscription, type DatabaseSnapshot, type DatabaseSnapshotMessage, type DatabaseSubscribeOptions, type DeleteWhereResponse, type DeviceInfo, type DocumentResponse, type EnabledProviderInfo, type EnabledProvidersResponse, 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 GameConnectionState, type GameConnectionStatus, type GameDelta, 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 GeoIndex, type GeoNear, type GeoPoint, type GeoPolygon, type GeoQuery, type GeoResponse, type GeoResult, type GeoWithin, type GetAuthorizationURLResponse, type GetFileByPathResponse, type GoogleConnectionStatus, type GuestMemberSignInResponse, 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 LifecyclePolicy, type ListBillingKeysResponse, type ListDocumentsResponse, type ListPageMetasOptions, type ListPageMetasResponse, type ListSubscriptionPaymentsRequest, type ListSubscriptionPaymentsResponse, type ListSubscriptionsRequest, type ListSubscriptionsResponse, type LobbyInfo, type LobbyInvite, type LobbyMember, type LobbyVisibility, type MatchResult, type MatchmakingTicket, 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 PaymentProvider, type PaymentStatus, type PeerInfo, type Platform, type PlayerEvent, type PlayerStats, type Playlist, type PlaylistItem, 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 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 RoomInfo, type RoomStats, type RoomsResponse, type SaveDialogOptions, type SaveDialogResult, type SearchIndex, type SearchOptions, type SearchResponse, type SearchResult, type SecurityRule, type SendOptions, type ServerMessage, SessionManager, type SetPageMetaRequest, type Shorts, type ShortsListResponse, type SignalingMessage, type SignalingMessageType, type SlowQueryInfo, type SpectatorInfo, type SpectatorPlayerState, type SpectatorState, type StateChange, type StateChangeHandler, type StorageUploadOptions, type StreamDoneCallback, type StreamDoneData, type StreamErrorCallback, type StreamHandlers, type StreamMessage, type StreamOptions, type StreamSession, 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 SystemInfo, type TTLConfig, type TableAccessLevel, type TableColumnDef, type TableIndex, type TableRelation, type TableSchema, type TableSchemaDefinition, type TokenPersistence, type TransactionRead, type TransactionWrite, 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 UpdateLobbyRequest, type UpdatePublicKeyRequest, type UpdatePublicKeyResponse, 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 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, isWebTransportSupported };
package/dist/index.d.ts CHANGED
@@ -13,6 +13,7 @@ declare class AuthError extends Error {
13
13
  constructor(message: string);
14
14
  }
15
15
 
16
+ type TokenPersistence = 'localStorage' | 'sessionStorage' | 'none';
16
17
  interface HttpClientConfig {
17
18
  baseUrl: string;
18
19
  /**
@@ -27,6 +28,13 @@ interface HttpClientConfig {
27
28
  secretKey?: string;
28
29
  accessToken?: string;
29
30
  refreshToken?: string;
31
+ /**
32
+ * 토큰 저장 방식.
33
+ * - 'localStorage': 브라우저 종료 후에도 유지 (기본값)
34
+ * - 'sessionStorage': 탭 종료 시 삭제
35
+ * - 'none': 메모리에만 저장 (페이지 새로고침 시 삭제)
36
+ */
37
+ persistence?: TokenPersistence;
30
38
  onTokenRefresh?: (tokens: {
31
39
  accessToken: string;
32
40
  refreshToken: string;
@@ -42,10 +50,17 @@ declare class HttpClient {
42
50
  private config;
43
51
  private isRefreshing;
44
52
  private refreshPromise;
53
+ private storageKey;
45
54
  constructor(config: HttpClientConfig);
46
55
  updateConfig(config: Partial<HttpClientConfig>): void;
47
56
  setTokens(accessToken: string, refreshToken: string): void;
48
57
  clearTokens(): void;
58
+ private get persistence();
59
+ private getStorage;
60
+ private buildStorageKey;
61
+ private persistTokens;
62
+ private restoreTokens;
63
+ private removePersistedTokens;
49
64
  /**
50
65
  * Public Key 가 설정되어 있는지 확인
51
66
  */
@@ -494,8 +509,8 @@ interface UpdateDataRequest {
494
509
  data: Record<string, unknown>;
495
510
  }
496
511
  interface FetchDataResponse {
497
- datas: DataItem[];
498
- total_size: number;
512
+ data: DataItem[];
513
+ total_count: number;
499
514
  }
500
515
  interface QueryOptions {
501
516
  limit?: number;
@@ -1661,8 +1676,20 @@ declare class StorageAPI {
1661
1676
  private getPublicPrefix;
1662
1677
  /**
1663
1678
  * 파일 목록 조회
1679
+ *
1680
+ * @param storageId - 파일 스토리지 ID
1681
+ * @param parentId - 부모 폴더 ID (미지정 시 루트 폴더)
1682
+ *
1683
+ * @example
1684
+ * ```ts
1685
+ * // 루트 폴더의 파일 목록
1686
+ * const files = await cb.storage.getFiles('storage-id')
1687
+ *
1688
+ * // 특정 폴더의 하위 파일 목록
1689
+ * const subFiles = await cb.storage.getFiles('storage-id', 'folder-id')
1690
+ * ```
1664
1691
  */
1665
- getFiles(storageId: string): Promise<FileItem[]>;
1692
+ getFiles(storageId: string, parentId?: string): Promise<FileItem[]>;
1666
1693
  /**
1667
1694
  * 파일 업로드 (Presigned URL 방식)
1668
1695
  *
@@ -2874,7 +2901,7 @@ declare class ErrorTrackerAPI {
2874
2901
  /**
2875
2902
  * OAuth 프로바이더 타입
2876
2903
  */
2877
- type OAuthProvider = 'google' | 'naver' | 'github' | 'discord';
2904
+ type OAuthProvider = 'google' | 'kakao' | 'naver' | 'apple' | 'github' | 'discord';
2878
2905
  /**
2879
2906
  * 활성화된 OAuth 프로바이더 정보
2880
2907
  */
@@ -6424,6 +6451,14 @@ interface ConnectBaseConfig {
6424
6451
  * ```
6425
6452
  */
6426
6453
  onTokenExpired?: () => void;
6454
+ /**
6455
+ * 토큰 저장 방식.
6456
+ * - 'localStorage': 브라우저 종료 후에도 유지 (기본값)
6457
+ * - 'sessionStorage': 탭 종료 시 삭제
6458
+ * - 'none': 메모리에만 저장 (페이지 새로고침 시 삭제)
6459
+ * @default 'localStorage'
6460
+ */
6461
+ persistence?: TokenPersistence;
6427
6462
  /**
6428
6463
  * 에러 트래커 설정
6429
6464
  */
@@ -6566,4 +6601,4 @@ declare class ConnectBase {
6566
6601
  updateConfig(config: Partial<ConnectBaseConfig>): void;
6567
6602
  }
6568
6603
 
6569
- export { AIAPI, type AIChatRequest, type AIChatResponse, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, type AckMessagesRequest, type AdReportResponse, type AdReportSummary, AdsAPI, 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 BatchSetPageMetaRequest, 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 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 CreateColumnRequest, type CreateDataRequest, type CreateDocumentRequest, type CreateFolderRequest, type CreateFolderResponse, type CreateGeoIndexRequest, type CreateIndexRequest, type CreateLobbyRequest, type CreatePlaylistRequest, type CreatePublicKeyRequest, type CreatePublicKeyResponse, type CreateRelationRequest, 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 DatabasePresenceState, type DatabaseRealtimeConnectOptions, type DatabaseRealtimeFilter, type DatabaseRealtimeHandlers, type DatabaseRealtimeSubscription, type DatabaseSnapshot, type DatabaseSnapshotMessage, type DatabaseSubscribeOptions, type DeleteWhereResponse, type DeviceInfo, type DocumentResponse, type EnabledProviderInfo, type EnabledProvidersResponse, 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 GameConnectionState, type GameConnectionStatus, type GameDelta, 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 GeoIndex, type GeoNear, type GeoPoint, type GeoPolygon, type GeoQuery, type GeoResponse, type GeoResult, type GeoWithin, type GetAuthorizationURLResponse, type GetFileByPathResponse, type GoogleConnectionStatus, type GuestMemberSignInResponse, 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 LifecyclePolicy, type ListBillingKeysResponse, type ListDocumentsResponse, type ListPageMetasOptions, type ListPageMetasResponse, type ListSubscriptionPaymentsRequest, type ListSubscriptionPaymentsResponse, type ListSubscriptionsRequest, type ListSubscriptionsResponse, type LobbyInfo, type LobbyInvite, type LobbyMember, type LobbyVisibility, type MatchResult, type MatchmakingTicket, 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 PaymentProvider, type PaymentStatus, type PeerInfo, type Platform, type PlayerEvent, type PlayerStats, type Playlist, type PlaylistItem, 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 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 RoomInfo, type RoomStats, type RoomsResponse, type SaveDialogOptions, type SaveDialogResult, type SearchIndex, type SearchOptions, type SearchResponse, type SearchResult, type SecurityRule, type SendOptions, type ServerMessage, SessionManager, type SetPageMetaRequest, type Shorts, type ShortsListResponse, type SignalingMessage, type SignalingMessageType, type SlowQueryInfo, type SpectatorInfo, type SpectatorPlayerState, type SpectatorState, type StateChange, type StateChangeHandler, type StorageUploadOptions, type StreamDoneCallback, type StreamDoneData, type StreamErrorCallback, type StreamHandlers, type StreamMessage, type StreamOptions, type StreamSession, 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 SystemInfo, type TTLConfig, type TableAccessLevel, type TableColumnDef, type TableIndex, type TableRelation, type TableSchema, type TableSchemaDefinition, type TransactionRead, type TransactionWrite, 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 UpdateLobbyRequest, type UpdatePublicKeyRequest, type UpdatePublicKeyResponse, 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 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, isWebTransportSupported };
6604
+ export { AIAPI, type AIChatRequest, type AIChatResponse, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, type AckMessagesRequest, type AdReportResponse, type AdReportSummary, AdsAPI, 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 BatchSetPageMetaRequest, 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 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 CreateColumnRequest, type CreateDataRequest, type CreateDocumentRequest, type CreateFolderRequest, type CreateFolderResponse, type CreateGeoIndexRequest, type CreateIndexRequest, type CreateLobbyRequest, type CreatePlaylistRequest, type CreatePublicKeyRequest, type CreatePublicKeyResponse, type CreateRelationRequest, 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 DatabasePresenceState, type DatabaseRealtimeConnectOptions, type DatabaseRealtimeFilter, type DatabaseRealtimeHandlers, type DatabaseRealtimeSubscription, type DatabaseSnapshot, type DatabaseSnapshotMessage, type DatabaseSubscribeOptions, type DeleteWhereResponse, type DeviceInfo, type DocumentResponse, type EnabledProviderInfo, type EnabledProvidersResponse, 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 GameConnectionState, type GameConnectionStatus, type GameDelta, 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 GeoIndex, type GeoNear, type GeoPoint, type GeoPolygon, type GeoQuery, type GeoResponse, type GeoResult, type GeoWithin, type GetAuthorizationURLResponse, type GetFileByPathResponse, type GoogleConnectionStatus, type GuestMemberSignInResponse, 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 LifecyclePolicy, type ListBillingKeysResponse, type ListDocumentsResponse, type ListPageMetasOptions, type ListPageMetasResponse, type ListSubscriptionPaymentsRequest, type ListSubscriptionPaymentsResponse, type ListSubscriptionsRequest, type ListSubscriptionsResponse, type LobbyInfo, type LobbyInvite, type LobbyMember, type LobbyVisibility, type MatchResult, type MatchmakingTicket, 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 PaymentProvider, type PaymentStatus, type PeerInfo, type Platform, type PlayerEvent, type PlayerStats, type Playlist, type PlaylistItem, 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 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 RoomInfo, type RoomStats, type RoomsResponse, type SaveDialogOptions, type SaveDialogResult, type SearchIndex, type SearchOptions, type SearchResponse, type SearchResult, type SecurityRule, type SendOptions, type ServerMessage, SessionManager, type SetPageMetaRequest, type Shorts, type ShortsListResponse, type SignalingMessage, type SignalingMessageType, type SlowQueryInfo, type SpectatorInfo, type SpectatorPlayerState, type SpectatorState, type StateChange, type StateChangeHandler, type StorageUploadOptions, type StreamDoneCallback, type StreamDoneData, type StreamErrorCallback, type StreamHandlers, type StreamMessage, type StreamOptions, type StreamSession, 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 SystemInfo, type TTLConfig, type TableAccessLevel, type TableColumnDef, type TableIndex, type TableRelation, type TableSchema, type TableSchemaDefinition, type TokenPersistence, type TransactionRead, type TransactionWrite, 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 UpdateLobbyRequest, type UpdatePublicKeyRequest, type UpdatePublicKeyResponse, 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 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, isWebTransportSupported };
package/dist/index.js CHANGED
@@ -54,11 +54,14 @@ var AuthError = class extends Error {
54
54
  };
55
55
 
56
56
  // src/core/http.ts
57
+ var TOKEN_STORAGE_KEY = "cb_auth_tokens";
57
58
  var HttpClient = class {
58
59
  constructor(config) {
59
60
  this.isRefreshing = false;
60
61
  this.refreshPromise = null;
61
62
  this.config = { ...config };
63
+ this.storageKey = this.buildStorageKey();
64
+ this.restoreTokens();
62
65
  }
63
66
  updateConfig(config) {
64
67
  this.config = { ...this.config, ...config };
@@ -66,10 +69,64 @@ var HttpClient = class {
66
69
  setTokens(accessToken, refreshToken) {
67
70
  this.config.accessToken = accessToken;
68
71
  this.config.refreshToken = refreshToken;
72
+ this.persistTokens();
69
73
  }
70
74
  clearTokens() {
71
75
  this.config.accessToken = void 0;
72
76
  this.config.refreshToken = void 0;
77
+ this.removePersistedTokens();
78
+ }
79
+ // ===== Token Persistence =====
80
+ get persistence() {
81
+ return this.config.persistence ?? "localStorage";
82
+ }
83
+ getStorage() {
84
+ if (typeof window === "undefined") return null;
85
+ if (this.persistence === "localStorage" && typeof localStorage !== "undefined") return localStorage;
86
+ if (this.persistence === "sessionStorage" && typeof sessionStorage !== "undefined") return sessionStorage;
87
+ return null;
88
+ }
89
+ buildStorageKey() {
90
+ const credential = this.config.publicKey ?? this.config.secretKey;
91
+ if (!credential) return TOKEN_STORAGE_KEY;
92
+ let hash = 0;
93
+ for (let i = 0; i < credential.length; i++) {
94
+ hash = (hash << 5) - hash + credential.charCodeAt(i);
95
+ hash = hash & hash;
96
+ }
97
+ return `${TOKEN_STORAGE_KEY}_${Math.abs(hash).toString(36)}`;
98
+ }
99
+ persistTokens() {
100
+ if (this.persistence === "none") return;
101
+ const storage = this.getStorage();
102
+ if (!storage || !this.config.accessToken || !this.config.refreshToken) return;
103
+ storage.setItem(this.storageKey, JSON.stringify({
104
+ accessToken: this.config.accessToken,
105
+ refreshToken: this.config.refreshToken
106
+ }));
107
+ }
108
+ restoreTokens() {
109
+ if (this.persistence === "none") return;
110
+ if (this.config.accessToken && this.config.refreshToken) return;
111
+ const storage = this.getStorage();
112
+ if (!storage) return;
113
+ const stored = storage.getItem(this.storageKey);
114
+ if (!stored) return;
115
+ try {
116
+ const { accessToken, refreshToken } = JSON.parse(stored);
117
+ if (accessToken && refreshToken) {
118
+ this.config.accessToken = accessToken;
119
+ this.config.refreshToken = refreshToken;
120
+ }
121
+ } catch {
122
+ storage.removeItem(this.storageKey);
123
+ }
124
+ }
125
+ removePersistedTokens() {
126
+ if (this.persistence === "none") return;
127
+ const storage = this.getStorage();
128
+ if (!storage) return;
129
+ storage.removeItem(this.storageKey);
73
130
  }
74
131
  /**
75
132
  * Public Key 가 설정되어 있는지 확인
@@ -138,8 +195,7 @@ var HttpClient = class {
138
195
  throw new Error("Token refresh failed");
139
196
  }
140
197
  const data = await response.json();
141
- this.config.accessToken = data.access_token;
142
- this.config.refreshToken = data.refresh_token;
198
+ this.setTokens(data.access_token, data.refresh_token);
143
199
  this.config.onTokenRefresh?.({
144
200
  accessToken: data.access_token,
145
201
  refreshToken: data.refresh_token
@@ -1700,11 +1756,24 @@ var StorageAPI = class {
1700
1756
  }
1701
1757
  /**
1702
1758
  * 파일 목록 조회
1759
+ *
1760
+ * @param storageId - 파일 스토리지 ID
1761
+ * @param parentId - 부모 폴더 ID (미지정 시 루트 폴더)
1762
+ *
1763
+ * @example
1764
+ * ```ts
1765
+ * // 루트 폴더의 파일 목록
1766
+ * const files = await cb.storage.getFiles('storage-id')
1767
+ *
1768
+ * // 특정 폴더의 하위 파일 목록
1769
+ * const subFiles = await cb.storage.getFiles('storage-id', 'folder-id')
1770
+ * ```
1703
1771
  */
1704
- async getFiles(storageId) {
1772
+ async getFiles(storageId, parentId) {
1705
1773
  const prefix = this.getPublicPrefix();
1774
+ const params = parentId ? `?parent_id=${encodeURIComponent(parentId)}` : "";
1706
1775
  const response = await this.http.get(
1707
- `${prefix}/storages/files/${storageId}/items`
1776
+ `${prefix}/storages/files/${storageId}/items${params}`
1708
1777
  );
1709
1778
  return response.files;
1710
1779
  }
@@ -8703,6 +8772,7 @@ var ConnectBase = class {
8703
8772
  baseUrl: config.baseUrl || DEFAULT_BASE_URL,
8704
8773
  publicKey: config.publicKey,
8705
8774
  secretKey: config.secretKey,
8775
+ persistence: config.persistence,
8706
8776
  onTokenRefresh: config.onTokenRefresh,
8707
8777
  onAuthError: config.onAuthError,
8708
8778
  onTokenExpired: config.onTokenExpired
package/dist/index.mjs CHANGED
@@ -16,11 +16,14 @@ var AuthError = class extends Error {
16
16
  };
17
17
 
18
18
  // src/core/http.ts
19
+ var TOKEN_STORAGE_KEY = "cb_auth_tokens";
19
20
  var HttpClient = class {
20
21
  constructor(config) {
21
22
  this.isRefreshing = false;
22
23
  this.refreshPromise = null;
23
24
  this.config = { ...config };
25
+ this.storageKey = this.buildStorageKey();
26
+ this.restoreTokens();
24
27
  }
25
28
  updateConfig(config) {
26
29
  this.config = { ...this.config, ...config };
@@ -28,10 +31,64 @@ var HttpClient = class {
28
31
  setTokens(accessToken, refreshToken) {
29
32
  this.config.accessToken = accessToken;
30
33
  this.config.refreshToken = refreshToken;
34
+ this.persistTokens();
31
35
  }
32
36
  clearTokens() {
33
37
  this.config.accessToken = void 0;
34
38
  this.config.refreshToken = void 0;
39
+ this.removePersistedTokens();
40
+ }
41
+ // ===== Token Persistence =====
42
+ get persistence() {
43
+ return this.config.persistence ?? "localStorage";
44
+ }
45
+ getStorage() {
46
+ if (typeof window === "undefined") return null;
47
+ if (this.persistence === "localStorage" && typeof localStorage !== "undefined") return localStorage;
48
+ if (this.persistence === "sessionStorage" && typeof sessionStorage !== "undefined") return sessionStorage;
49
+ return null;
50
+ }
51
+ buildStorageKey() {
52
+ const credential = this.config.publicKey ?? this.config.secretKey;
53
+ if (!credential) return TOKEN_STORAGE_KEY;
54
+ let hash = 0;
55
+ for (let i = 0; i < credential.length; i++) {
56
+ hash = (hash << 5) - hash + credential.charCodeAt(i);
57
+ hash = hash & hash;
58
+ }
59
+ return `${TOKEN_STORAGE_KEY}_${Math.abs(hash).toString(36)}`;
60
+ }
61
+ persistTokens() {
62
+ if (this.persistence === "none") return;
63
+ const storage = this.getStorage();
64
+ if (!storage || !this.config.accessToken || !this.config.refreshToken) return;
65
+ storage.setItem(this.storageKey, JSON.stringify({
66
+ accessToken: this.config.accessToken,
67
+ refreshToken: this.config.refreshToken
68
+ }));
69
+ }
70
+ restoreTokens() {
71
+ if (this.persistence === "none") return;
72
+ if (this.config.accessToken && this.config.refreshToken) return;
73
+ const storage = this.getStorage();
74
+ if (!storage) return;
75
+ const stored = storage.getItem(this.storageKey);
76
+ if (!stored) return;
77
+ try {
78
+ const { accessToken, refreshToken } = JSON.parse(stored);
79
+ if (accessToken && refreshToken) {
80
+ this.config.accessToken = accessToken;
81
+ this.config.refreshToken = refreshToken;
82
+ }
83
+ } catch {
84
+ storage.removeItem(this.storageKey);
85
+ }
86
+ }
87
+ removePersistedTokens() {
88
+ if (this.persistence === "none") return;
89
+ const storage = this.getStorage();
90
+ if (!storage) return;
91
+ storage.removeItem(this.storageKey);
35
92
  }
36
93
  /**
37
94
  * Public Key 가 설정되어 있는지 확인
@@ -100,8 +157,7 @@ var HttpClient = class {
100
157
  throw new Error("Token refresh failed");
101
158
  }
102
159
  const data = await response.json();
103
- this.config.accessToken = data.access_token;
104
- this.config.refreshToken = data.refresh_token;
160
+ this.setTokens(data.access_token, data.refresh_token);
105
161
  this.config.onTokenRefresh?.({
106
162
  accessToken: data.access_token,
107
163
  refreshToken: data.refresh_token
@@ -1662,11 +1718,24 @@ var StorageAPI = class {
1662
1718
  }
1663
1719
  /**
1664
1720
  * 파일 목록 조회
1721
+ *
1722
+ * @param storageId - 파일 스토리지 ID
1723
+ * @param parentId - 부모 폴더 ID (미지정 시 루트 폴더)
1724
+ *
1725
+ * @example
1726
+ * ```ts
1727
+ * // 루트 폴더의 파일 목록
1728
+ * const files = await cb.storage.getFiles('storage-id')
1729
+ *
1730
+ * // 특정 폴더의 하위 파일 목록
1731
+ * const subFiles = await cb.storage.getFiles('storage-id', 'folder-id')
1732
+ * ```
1665
1733
  */
1666
- async getFiles(storageId) {
1734
+ async getFiles(storageId, parentId) {
1667
1735
  const prefix = this.getPublicPrefix();
1736
+ const params = parentId ? `?parent_id=${encodeURIComponent(parentId)}` : "";
1668
1737
  const response = await this.http.get(
1669
- `${prefix}/storages/files/${storageId}/items`
1738
+ `${prefix}/storages/files/${storageId}/items${params}`
1670
1739
  );
1671
1740
  return response.files;
1672
1741
  }
@@ -8665,6 +8734,7 @@ var ConnectBase = class {
8665
8734
  baseUrl: config.baseUrl || DEFAULT_BASE_URL,
8666
8735
  publicKey: config.publicKey,
8667
8736
  secretKey: config.secretKey,
8737
+ persistence: config.persistence,
8668
8738
  onTokenRefresh: config.onTokenRefresh,
8669
8739
  onAuthError: config.onAuthError,
8670
8740
  onTokenExpired: config.onTokenExpired
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "connectbase-client",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "Connect Base JavaScript/TypeScript SDK for browser and Node.js",
5
5
  "repository": {
6
6
  "type": "git",