connectbase-client 6.7.0 → 6.9.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
@@ -7533,6 +7533,27 @@ interface SubscribeTopicRequest {
7533
7533
  /** 토픽 이름 */
7534
7534
  topic_name: string;
7535
7535
  }
7536
+ /** `cb.push.createTopic` 옵션 (6.8.0+) */
7537
+ interface CreateTopicOptions {
7538
+ /** 콘솔에 보이는 표시 이름 */
7539
+ displayName?: string;
7540
+ /** 설명 */
7541
+ description?: string;
7542
+ }
7543
+ /** 푸시 토픽. 백엔드 `TopicResponse` 와 1:1 (6.8.0+) */
7544
+ interface PushTopicInfo {
7545
+ id: string;
7546
+ app_id: string;
7547
+ name: string;
7548
+ display_name?: string;
7549
+ description?: string;
7550
+ /** 꺼진(false) 토픽은 구독과 발송이 거부된다 */
7551
+ is_active: boolean;
7552
+ is_default: boolean;
7553
+ subscriber_count: number;
7554
+ created_at: string;
7555
+ updated_at: string;
7556
+ }
7536
7557
  interface VAPIDPublicKeyResponse {
7537
7558
  public_key: string;
7538
7559
  }
@@ -7627,7 +7648,7 @@ interface PushStatsResult {
7627
7648
  * device_name: 'Galaxy S24',
7628
7649
  * })
7629
7650
  *
7630
- * // 토픽 구독 (device_token 필수)
7651
+ * // 토픽 구독 (device_token 필수, 토픽은 콘솔에서 미리 만든다)
7631
7652
  * await cb.push.subscribeTopic(device.device_token, 'announcements')
7632
7653
  *
7633
7654
  * // Web Push 등록 (브라우저)
@@ -7636,7 +7657,8 @@ interface PushStatsResult {
7636
7657
  * userVisibleOnly: true,
7637
7658
  * applicationServerKey: vapidKey.public_key
7638
7659
  * })
7639
- * await cb.push.registerWebPush(subscription)
7660
+ * const webDevice = await cb.push.registerWebPush(subscription)
7661
+ * await cb.push.subscribeTopic(webDevice.device_token, 'announcements') // 웹 기기도 같은 방법 (6.8.0+)
7640
7662
  * ```
7641
7663
  */
7642
7664
  declare class PushAPI {
@@ -7676,7 +7698,7 @@ declare class PushAPI {
7676
7698
  /**
7677
7699
  * 디바이스 등록 해제
7678
7700
  *
7679
- * @param deviceToken 디바이스 토큰
7701
+ * @param deviceToken 디바이스 토큰 (웹 푸시 기기는 등록 응답의 `device_token`, 즉 endpoint URL)
7680
7702
  *
7681
7703
  * @example
7682
7704
  * ```typescript
@@ -7687,7 +7709,10 @@ declare class PushAPI {
7687
7709
  /**
7688
7710
  * 토픽 구독
7689
7711
  *
7690
- * @param deviceToken 디바이스 토큰
7712
+ * 토픽은 미리 있어야 한다(콘솔에서 만든다). 없으면 404 로 거부된다.
7713
+ *
7714
+ * @param deviceToken 디바이스 토큰 — `registerDevice` / `registerWebPush` 응답의 `device_token`
7715
+ * (웹 푸시 기기는 endpoint URL. 6.7.0 이하는 웹 기기를 구독시키지 못했다)
7691
7716
  * @param topicName 토픽 이름
7692
7717
  *
7693
7718
  * @example
@@ -7750,7 +7775,7 @@ declare class PushAPI {
7750
7775
  /**
7751
7776
  * Web Push 구독 해제
7752
7777
  *
7753
- * @param deviceToken Web Push endpoint URL (등록 시 사용한 endpoint)
7778
+ * @param deviceToken Web Push endpoint URL (등록 응답의 `device_token`)
7754
7779
  */
7755
7780
  unregisterWebPush(deviceToken: string): Promise<void>;
7756
7781
  /**
@@ -7805,6 +7830,27 @@ declare class PushAPI {
7805
7830
  * ```
7806
7831
  */
7807
7832
  sendToTopic(appId: string, topicName: string, payload: SendToTopicPayload): Promise<SendPushResult>;
7833
+ /**
7834
+ * 토픽 만들기 — 서버 코드 전용 (6.8.0+).
7835
+ *
7836
+ * 방마다 쓰는 토픽처럼 서버 코드가 토픽을 만들어 두고, 기기는 그 뒤에 `subscribeTopic` 으로 구독한다. 같은 이름의
7837
+ * 토픽이 이미 있으면 오류 없이 그 토픽을 돌려준다(설정은 바꾸지 않는다) — 트리거가 다시 실행돼도 안전하다.
7838
+ *
7839
+ * Public Key(cb_pk_) 단독 인스턴스로는 호출할 수 없다(공개 키로는 토픽을 만들 수 없다). service_role(ctx.cbAdmin)은
7840
+ * 함수의 management_scopes 에 `push:write` 가 있어야 한다. User Secret Key(cb_sk_), 콘솔 JWT 도 된다.
7841
+ *
7842
+ * @param appId 앱 ID
7843
+ * @param name 토픽 이름 (255바이트 이하, 앞뒤 공백은 지운다)
7844
+ * @param options 표시 이름, 설명
7845
+ * @returns 만들었거나 이미 있던 토픽
7846
+ *
7847
+ * @example
7848
+ * ```typescript
7849
+ * // concerts 트리거 함수: 공연이 생기면 그 방의 알림 토픽을 만들어 둔다
7850
+ * await ctx.cbAdmin.push.createTopic(appId, `cc_${row.room}`, { displayName: row.title })
7851
+ * ```
7852
+ */
7853
+ createTopic(appId: string, name: string, options?: CreateTopicOptions): Promise<PushTopicInfo>;
7808
7854
  /**
7809
7855
  * 앱의 푸시 통계(도달/오픈율/클릭율, 디바이스/메시지/토픽 수)를 조회한다.
7810
7856
  *
@@ -12035,4 +12081,4 @@ declare class ConnectBase {
12035
12081
  updateConfig(config: Partial<ConnectBaseConfig>): void;
12036
12082
  }
12037
12083
 
12038
- export { AIAPI, type AIChatOptions, type AIChatRequest, type AIChatResponse, type AIChatStreamCallbacks, type AIChatStreamOptions, AIError, type AIErrorCode, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, AUTH_MEMBER_ID_TOKEN, type AcceptInvitationResponse, 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 AppMemberDetail, type AppMemberIdentityDetail, type AppMemberIdentitySummary, type AppMemberList, type AppMemberListItem, type AppMemberProviderType, AppMembersAPI, 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 ChangePlanPreview, type ChangePlanRequest, 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 CreateInvitationRequest, type CreateInvitationResponse, type CreateLobbyRequest, type CreateOrganizationRequest, 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 DeleteBillingKeyResponse, 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 ListAppMembersOptions, 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 MemberChangePasswordRequest, type MemberCredentialMessageResponse, type MemberEmailVerificationConfirmRequest, type MemberEmailVerificationConfirmResponse, type MemberEmailVerificationRequest, type MemberInfoResponse, type MemberPasswordResetConfirmRequest, type MemberPasswordResetRequest, type MemberRedirectOption, type MemberSession, type MemberSessionList, type MemberSessionRevokeResponse, 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 OnPaymentFailure, type OpenDialogOptions, type OpenDialogResult, type Organization, type OrganizationContext, type OrganizationInvitation, type OrganizationMember, type OrganizationMemberList, type OrganizationRole, OrganizationsAPI, type PageMetaResponse, type PartyInfo, type PartyInvite, type PartyMember, type PauseSubscriptionRequest, type PaymentDetail, type PaymentListItem, type PaymentListResult, type PaymentMode, 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 PostponeBillingRequest, type PreparePaymentRequest, type PreparePaymentResponse, type PresenceChangeHandler, type PresenceInfo, type PresenceSetOptions, type PresenceStatus, type PresenceStatusResult, type ProrationMode, type PublicKeyItem, type PublicKeyPaymentMode, 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, RealtimeConnectionError, type RealtimeConnectionErrorCode, type RealtimeMessage, RealtimeRequestError, type RealtimeSendPolicy, 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 RotatePublicKeyRequest, type RotatePublicKeyResponse, type SaveDialogOptions, type SaveDialogResult, type ScriptDetailResponse, type ScriptListResponse, type ScriptLogEntry, type ScriptLogsResponse, type ScriptMeta, type ScriptMetricsResponse, 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 SyncLostMessage, 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 UpdateOrganizationRequest, 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 VideoStorageAccessLevel, 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, toAIError, toCreateRoomWire };
12084
+ export { AIAPI, type AIChatOptions, type AIChatRequest, type AIChatResponse, type AIChatStreamCallbacks, type AIChatStreamOptions, AIError, type AIErrorCode, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, AUTH_MEMBER_ID_TOKEN, type AcceptInvitationResponse, 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 AppMemberDetail, type AppMemberIdentityDetail, type AppMemberIdentitySummary, type AppMemberList, type AppMemberListItem, type AppMemberProviderType, AppMembersAPI, 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 ChangePlanPreview, type ChangePlanRequest, 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 CreateInvitationRequest, type CreateInvitationResponse, type CreateLobbyRequest, type CreateOrganizationRequest, type CreatePlaylistRequest, type CreatePublicKeyRequest, type CreatePublicKeyResponse, type CreateRelationRequest, type CreateRolePayload, type CreateRoleResult, type CreateRoomResult, type CreateSearchIndexRequest, type CreateSecurityRuleRequest, type CreateSubscriptionRequest, type CreateTableRequest, type CreateTopicOptions, 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 DeleteBillingKeyResponse, 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 ListAppMembersOptions, 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 MemberChangePasswordRequest, type MemberCredentialMessageResponse, type MemberEmailVerificationConfirmRequest, type MemberEmailVerificationConfirmResponse, type MemberEmailVerificationRequest, type MemberInfoResponse, type MemberPasswordResetConfirmRequest, type MemberPasswordResetRequest, type MemberRedirectOption, type MemberSession, type MemberSessionList, type MemberSessionRevokeResponse, 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 OnPaymentFailure, type OpenDialogOptions, type OpenDialogResult, type Organization, type OrganizationContext, type OrganizationInvitation, type OrganizationMember, type OrganizationMemberList, type OrganizationRole, OrganizationsAPI, type PageMetaResponse, type PartyInfo, type PartyInvite, type PartyMember, type PauseSubscriptionRequest, type PaymentDetail, type PaymentListItem, type PaymentListResult, type PaymentMode, 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 PostponeBillingRequest, type PreparePaymentRequest, type PreparePaymentResponse, type PresenceChangeHandler, type PresenceInfo, type PresenceSetOptions, type PresenceStatus, type PresenceStatusResult, type ProrationMode, type PublicKeyItem, type PublicKeyPaymentMode, type PublishBatchRequest, type PublishBatchResponse, type PublishMessageRequest, type PublishMessageResponse, type PushPlatform, type PushStatsResult, type PushTopicInfo, type QualityProgress, type QueryOptions, type QueueInfoResponse, type QueueMessage, type ReadReceiptHandler, type ReadReceiptInfo, type RealtimeConnectOptions, RealtimeConnectionError, type RealtimeConnectionErrorCode, type RealtimeMessage, RealtimeRequestError, type RealtimeSendPolicy, 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 RotatePublicKeyRequest, type RotatePublicKeyResponse, type SaveDialogOptions, type SaveDialogResult, type ScriptDetailResponse, type ScriptListResponse, type ScriptLogEntry, type ScriptLogsResponse, type ScriptMeta, type ScriptMetricsResponse, 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 SyncLostMessage, 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 UpdateOrganizationRequest, 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 VideoStorageAccessLevel, 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, toAIError, toCreateRoomWire };
package/dist/index.d.ts CHANGED
@@ -7533,6 +7533,27 @@ interface SubscribeTopicRequest {
7533
7533
  /** 토픽 이름 */
7534
7534
  topic_name: string;
7535
7535
  }
7536
+ /** `cb.push.createTopic` 옵션 (6.8.0+) */
7537
+ interface CreateTopicOptions {
7538
+ /** 콘솔에 보이는 표시 이름 */
7539
+ displayName?: string;
7540
+ /** 설명 */
7541
+ description?: string;
7542
+ }
7543
+ /** 푸시 토픽. 백엔드 `TopicResponse` 와 1:1 (6.8.0+) */
7544
+ interface PushTopicInfo {
7545
+ id: string;
7546
+ app_id: string;
7547
+ name: string;
7548
+ display_name?: string;
7549
+ description?: string;
7550
+ /** 꺼진(false) 토픽은 구독과 발송이 거부된다 */
7551
+ is_active: boolean;
7552
+ is_default: boolean;
7553
+ subscriber_count: number;
7554
+ created_at: string;
7555
+ updated_at: string;
7556
+ }
7536
7557
  interface VAPIDPublicKeyResponse {
7537
7558
  public_key: string;
7538
7559
  }
@@ -7627,7 +7648,7 @@ interface PushStatsResult {
7627
7648
  * device_name: 'Galaxy S24',
7628
7649
  * })
7629
7650
  *
7630
- * // 토픽 구독 (device_token 필수)
7651
+ * // 토픽 구독 (device_token 필수, 토픽은 콘솔에서 미리 만든다)
7631
7652
  * await cb.push.subscribeTopic(device.device_token, 'announcements')
7632
7653
  *
7633
7654
  * // Web Push 등록 (브라우저)
@@ -7636,7 +7657,8 @@ interface PushStatsResult {
7636
7657
  * userVisibleOnly: true,
7637
7658
  * applicationServerKey: vapidKey.public_key
7638
7659
  * })
7639
- * await cb.push.registerWebPush(subscription)
7660
+ * const webDevice = await cb.push.registerWebPush(subscription)
7661
+ * await cb.push.subscribeTopic(webDevice.device_token, 'announcements') // 웹 기기도 같은 방법 (6.8.0+)
7640
7662
  * ```
7641
7663
  */
7642
7664
  declare class PushAPI {
@@ -7676,7 +7698,7 @@ declare class PushAPI {
7676
7698
  /**
7677
7699
  * 디바이스 등록 해제
7678
7700
  *
7679
- * @param deviceToken 디바이스 토큰
7701
+ * @param deviceToken 디바이스 토큰 (웹 푸시 기기는 등록 응답의 `device_token`, 즉 endpoint URL)
7680
7702
  *
7681
7703
  * @example
7682
7704
  * ```typescript
@@ -7687,7 +7709,10 @@ declare class PushAPI {
7687
7709
  /**
7688
7710
  * 토픽 구독
7689
7711
  *
7690
- * @param deviceToken 디바이스 토큰
7712
+ * 토픽은 미리 있어야 한다(콘솔에서 만든다). 없으면 404 로 거부된다.
7713
+ *
7714
+ * @param deviceToken 디바이스 토큰 — `registerDevice` / `registerWebPush` 응답의 `device_token`
7715
+ * (웹 푸시 기기는 endpoint URL. 6.7.0 이하는 웹 기기를 구독시키지 못했다)
7691
7716
  * @param topicName 토픽 이름
7692
7717
  *
7693
7718
  * @example
@@ -7750,7 +7775,7 @@ declare class PushAPI {
7750
7775
  /**
7751
7776
  * Web Push 구독 해제
7752
7777
  *
7753
- * @param deviceToken Web Push endpoint URL (등록 시 사용한 endpoint)
7778
+ * @param deviceToken Web Push endpoint URL (등록 응답의 `device_token`)
7754
7779
  */
7755
7780
  unregisterWebPush(deviceToken: string): Promise<void>;
7756
7781
  /**
@@ -7805,6 +7830,27 @@ declare class PushAPI {
7805
7830
  * ```
7806
7831
  */
7807
7832
  sendToTopic(appId: string, topicName: string, payload: SendToTopicPayload): Promise<SendPushResult>;
7833
+ /**
7834
+ * 토픽 만들기 — 서버 코드 전용 (6.8.0+).
7835
+ *
7836
+ * 방마다 쓰는 토픽처럼 서버 코드가 토픽을 만들어 두고, 기기는 그 뒤에 `subscribeTopic` 으로 구독한다. 같은 이름의
7837
+ * 토픽이 이미 있으면 오류 없이 그 토픽을 돌려준다(설정은 바꾸지 않는다) — 트리거가 다시 실행돼도 안전하다.
7838
+ *
7839
+ * Public Key(cb_pk_) 단독 인스턴스로는 호출할 수 없다(공개 키로는 토픽을 만들 수 없다). service_role(ctx.cbAdmin)은
7840
+ * 함수의 management_scopes 에 `push:write` 가 있어야 한다. User Secret Key(cb_sk_), 콘솔 JWT 도 된다.
7841
+ *
7842
+ * @param appId 앱 ID
7843
+ * @param name 토픽 이름 (255바이트 이하, 앞뒤 공백은 지운다)
7844
+ * @param options 표시 이름, 설명
7845
+ * @returns 만들었거나 이미 있던 토픽
7846
+ *
7847
+ * @example
7848
+ * ```typescript
7849
+ * // concerts 트리거 함수: 공연이 생기면 그 방의 알림 토픽을 만들어 둔다
7850
+ * await ctx.cbAdmin.push.createTopic(appId, `cc_${row.room}`, { displayName: row.title })
7851
+ * ```
7852
+ */
7853
+ createTopic(appId: string, name: string, options?: CreateTopicOptions): Promise<PushTopicInfo>;
7808
7854
  /**
7809
7855
  * 앱의 푸시 통계(도달/오픈율/클릭율, 디바이스/메시지/토픽 수)를 조회한다.
7810
7856
  *
@@ -12035,4 +12081,4 @@ declare class ConnectBase {
12035
12081
  updateConfig(config: Partial<ConnectBaseConfig>): void;
12036
12082
  }
12037
12083
 
12038
- export { AIAPI, type AIChatOptions, type AIChatRequest, type AIChatResponse, type AIChatStreamCallbacks, type AIChatStreamOptions, AIError, type AIErrorCode, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, AUTH_MEMBER_ID_TOKEN, type AcceptInvitationResponse, 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 AppMemberDetail, type AppMemberIdentityDetail, type AppMemberIdentitySummary, type AppMemberList, type AppMemberListItem, type AppMemberProviderType, AppMembersAPI, 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 ChangePlanPreview, type ChangePlanRequest, 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 CreateInvitationRequest, type CreateInvitationResponse, type CreateLobbyRequest, type CreateOrganizationRequest, 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 DeleteBillingKeyResponse, 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 ListAppMembersOptions, 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 MemberChangePasswordRequest, type MemberCredentialMessageResponse, type MemberEmailVerificationConfirmRequest, type MemberEmailVerificationConfirmResponse, type MemberEmailVerificationRequest, type MemberInfoResponse, type MemberPasswordResetConfirmRequest, type MemberPasswordResetRequest, type MemberRedirectOption, type MemberSession, type MemberSessionList, type MemberSessionRevokeResponse, 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 OnPaymentFailure, type OpenDialogOptions, type OpenDialogResult, type Organization, type OrganizationContext, type OrganizationInvitation, type OrganizationMember, type OrganizationMemberList, type OrganizationRole, OrganizationsAPI, type PageMetaResponse, type PartyInfo, type PartyInvite, type PartyMember, type PauseSubscriptionRequest, type PaymentDetail, type PaymentListItem, type PaymentListResult, type PaymentMode, 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 PostponeBillingRequest, type PreparePaymentRequest, type PreparePaymentResponse, type PresenceChangeHandler, type PresenceInfo, type PresenceSetOptions, type PresenceStatus, type PresenceStatusResult, type ProrationMode, type PublicKeyItem, type PublicKeyPaymentMode, 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, RealtimeConnectionError, type RealtimeConnectionErrorCode, type RealtimeMessage, RealtimeRequestError, type RealtimeSendPolicy, 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 RotatePublicKeyRequest, type RotatePublicKeyResponse, type SaveDialogOptions, type SaveDialogResult, type ScriptDetailResponse, type ScriptListResponse, type ScriptLogEntry, type ScriptLogsResponse, type ScriptMeta, type ScriptMetricsResponse, 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 SyncLostMessage, 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 UpdateOrganizationRequest, 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 VideoStorageAccessLevel, 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, toAIError, toCreateRoomWire };
12084
+ export { AIAPI, type AIChatOptions, type AIChatRequest, type AIChatResponse, type AIChatStreamCallbacks, type AIChatStreamOptions, AIError, type AIErrorCode, type AIMessage, type AISource, type AIStreamChunk, type AITool, type AIToolCall, type AIToolEvent, AUTH_MEMBER_ID_TOKEN, type AcceptInvitationResponse, 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 AppMemberDetail, type AppMemberIdentityDetail, type AppMemberIdentitySummary, type AppMemberList, type AppMemberListItem, type AppMemberProviderType, AppMembersAPI, 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 ChangePlanPreview, type ChangePlanRequest, 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 CreateInvitationRequest, type CreateInvitationResponse, type CreateLobbyRequest, type CreateOrganizationRequest, type CreatePlaylistRequest, type CreatePublicKeyRequest, type CreatePublicKeyResponse, type CreateRelationRequest, type CreateRolePayload, type CreateRoleResult, type CreateRoomResult, type CreateSearchIndexRequest, type CreateSecurityRuleRequest, type CreateSubscriptionRequest, type CreateTableRequest, type CreateTopicOptions, 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 DeleteBillingKeyResponse, 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 ListAppMembersOptions, 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 MemberChangePasswordRequest, type MemberCredentialMessageResponse, type MemberEmailVerificationConfirmRequest, type MemberEmailVerificationConfirmResponse, type MemberEmailVerificationRequest, type MemberInfoResponse, type MemberPasswordResetConfirmRequest, type MemberPasswordResetRequest, type MemberRedirectOption, type MemberSession, type MemberSessionList, type MemberSessionRevokeResponse, 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 OnPaymentFailure, type OpenDialogOptions, type OpenDialogResult, type Organization, type OrganizationContext, type OrganizationInvitation, type OrganizationMember, type OrganizationMemberList, type OrganizationRole, OrganizationsAPI, type PageMetaResponse, type PartyInfo, type PartyInvite, type PartyMember, type PauseSubscriptionRequest, type PaymentDetail, type PaymentListItem, type PaymentListResult, type PaymentMode, 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 PostponeBillingRequest, type PreparePaymentRequest, type PreparePaymentResponse, type PresenceChangeHandler, type PresenceInfo, type PresenceSetOptions, type PresenceStatus, type PresenceStatusResult, type ProrationMode, type PublicKeyItem, type PublicKeyPaymentMode, type PublishBatchRequest, type PublishBatchResponse, type PublishMessageRequest, type PublishMessageResponse, type PushPlatform, type PushStatsResult, type PushTopicInfo, type QualityProgress, type QueryOptions, type QueueInfoResponse, type QueueMessage, type ReadReceiptHandler, type ReadReceiptInfo, type RealtimeConnectOptions, RealtimeConnectionError, type RealtimeConnectionErrorCode, type RealtimeMessage, RealtimeRequestError, type RealtimeSendPolicy, 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 RotatePublicKeyRequest, type RotatePublicKeyResponse, type SaveDialogOptions, type SaveDialogResult, type ScriptDetailResponse, type ScriptListResponse, type ScriptLogEntry, type ScriptLogsResponse, type ScriptMeta, type ScriptMetricsResponse, 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 SyncLostMessage, 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 UpdateOrganizationRequest, 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 VideoStorageAccessLevel, 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, toAIError, toCreateRoomWire };
package/dist/index.js CHANGED
@@ -7576,7 +7576,7 @@ var PushAPI = class {
7576
7576
  /**
7577
7577
  * 디바이스 등록 해제
7578
7578
  *
7579
- * @param deviceToken 디바이스 토큰
7579
+ * @param deviceToken 디바이스 토큰 (웹 푸시 기기는 등록 응답의 `device_token`, 즉 endpoint URL)
7580
7580
  *
7581
7581
  * @example
7582
7582
  * ```typescript
@@ -7585,13 +7585,18 @@ var PushAPI = class {
7585
7585
  */
7586
7586
  async unregisterDevice(deviceToken) {
7587
7587
  const prefix = this.getPublicPrefix();
7588
- await this.http.delete(`${prefix}/push/devices/${deviceToken}`);
7588
+ await this.http.post(`${prefix}/push/devices/unregister`, {
7589
+ device_token: deviceToken
7590
+ });
7589
7591
  }
7590
7592
  // ============ Topic Subscription ============
7591
7593
  /**
7592
7594
  * 토픽 구독
7593
7595
  *
7594
- * @param deviceToken 디바이스 토큰
7596
+ * 토픽은 미리 있어야 한다(콘솔에서 만든다). 없으면 404 로 거부된다.
7597
+ *
7598
+ * @param deviceToken 디바이스 토큰 — `registerDevice` / `registerWebPush` 응답의 `device_token`
7599
+ * (웹 푸시 기기는 endpoint URL. 6.7.0 이하는 웹 기기를 구독시키지 못했다)
7595
7600
  * @param topicName 토픽 이름
7596
7601
  *
7597
7602
  * @example
@@ -7601,11 +7606,11 @@ var PushAPI = class {
7601
7606
  */
7602
7607
  async subscribeTopic(deviceToken, topicName) {
7603
7608
  const prefix = this.getPublicPrefix();
7604
- const request = { topic_name: topicName };
7605
- await this.http.post(
7606
- `${prefix}/push/devices/${deviceToken}/topics/subscribe`,
7607
- request
7608
- );
7609
+ const request = {
7610
+ device_token: deviceToken,
7611
+ topic_name: topicName
7612
+ };
7613
+ await this.http.post(`${prefix}/push/topics/subscribe`, request);
7609
7614
  }
7610
7615
  /**
7611
7616
  * 토픽 구독 해제
@@ -7620,9 +7625,11 @@ var PushAPI = class {
7620
7625
  */
7621
7626
  async unsubscribeTopic(deviceToken, topicName) {
7622
7627
  const prefix = this.getPublicPrefix();
7623
- await this.http.delete(
7624
- `${prefix}/push/devices/${deviceToken}/topics/${topicName}/unsubscribe`
7625
- );
7628
+ const request = {
7629
+ device_token: deviceToken,
7630
+ topic_name: topicName
7631
+ };
7632
+ await this.http.post(`${prefix}/push/topics/unsubscribe`, request);
7626
7633
  }
7627
7634
  // ============ Web Push ============
7628
7635
  /**
@@ -7699,13 +7706,10 @@ var PushAPI = class {
7699
7706
  /**
7700
7707
  * Web Push 구독 해제
7701
7708
  *
7702
- * @param deviceToken Web Push endpoint URL (등록 시 사용한 endpoint)
7709
+ * @param deviceToken Web Push endpoint URL (등록 응답의 `device_token`)
7703
7710
  */
7704
7711
  async unregisterWebPush(deviceToken) {
7705
- const prefix = this.getPublicPrefix();
7706
- await this.http.delete(
7707
- `${prefix}/push/devices/${encodeURIComponent(deviceToken)}`
7708
- );
7712
+ await this.unregisterDevice(deviceToken);
7709
7713
  }
7710
7714
  // ============ Server-side Send (Functions / cb_sk_ 전용) ============
7711
7715
  /**
@@ -7808,6 +7812,42 @@ var PushAPI = class {
7808
7812
  body
7809
7813
  );
7810
7814
  }
7815
+ /**
7816
+ * 토픽 만들기 — 서버 코드 전용 (6.8.0+).
7817
+ *
7818
+ * 방마다 쓰는 토픽처럼 서버 코드가 토픽을 만들어 두고, 기기는 그 뒤에 `subscribeTopic` 으로 구독한다. 같은 이름의
7819
+ * 토픽이 이미 있으면 오류 없이 그 토픽을 돌려준다(설정은 바꾸지 않는다) — 트리거가 다시 실행돼도 안전하다.
7820
+ *
7821
+ * Public Key(cb_pk_) 단독 인스턴스로는 호출할 수 없다(공개 키로는 토픽을 만들 수 없다). service_role(ctx.cbAdmin)은
7822
+ * 함수의 management_scopes 에 `push:write` 가 있어야 한다. User Secret Key(cb_sk_), 콘솔 JWT 도 된다.
7823
+ *
7824
+ * @param appId 앱 ID
7825
+ * @param name 토픽 이름 (255바이트 이하, 앞뒤 공백은 지운다)
7826
+ * @param options 표시 이름, 설명
7827
+ * @returns 만들었거나 이미 있던 토픽
7828
+ *
7829
+ * @example
7830
+ * ```typescript
7831
+ * // concerts 트리거 함수: 공연이 생기면 그 방의 알림 토픽을 만들어 둔다
7832
+ * await ctx.cbAdmin.push.createTopic(appId, `cc_${row.room}`, { displayName: row.title })
7833
+ * ```
7834
+ */
7835
+ async createTopic(appId, name, options = {}) {
7836
+ if (this.http.hasPublicKey() && !this.http.hasJWT()) {
7837
+ throw new Error(
7838
+ "cb.push.createTopic() \uB294 User Secret Key(cb_sk_), \uCF58\uC194 JWT, \uB610\uB294 service_role(ctx.cbAdmin) \uC778\uC99D\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. Public Key(cb_pk_) \uB2E8\uB3C5 SDK \uC778\uC2A4\uD134\uC2A4\uB85C\uB294 \uD1A0\uD53D\uC744 \uB9CC\uB4E4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 Functions \uD658\uACBD\uC5D0\uC11C \uC0AC\uC6A9\uD558\uC138\uC694."
7839
+ );
7840
+ }
7841
+ if (!name || !name.trim()) {
7842
+ throw new Error("cb.push.createTopic(): name \uC774 \uBE44\uC5B4\uC788\uC2B5\uB2C8\uB2E4.");
7843
+ }
7844
+ return this.http.post(`/v1/apps/${appId}/push/topics`, {
7845
+ name,
7846
+ if_not_exists: true,
7847
+ ...options.displayName !== void 0 ? { display_name: options.displayName } : {},
7848
+ ...options.description !== void 0 ? { description: options.description } : {}
7849
+ });
7850
+ }
7811
7851
  /**
7812
7852
  * 앱의 푸시 통계(도달/오픈율/클릭율, 디바이스/메시지/토픽 수)를 조회한다.
7813
7853
  *
@@ -11189,8 +11229,8 @@ var SupportAPI = class {
11189
11229
  }
11190
11230
  };
11191
11231
  function detectSdkVersion() {
11192
- if ("6.7.0") {
11193
- return "6.7.0";
11232
+ if ("6.9.0") {
11233
+ return "6.9.0";
11194
11234
  }
11195
11235
  return "unknown";
11196
11236
  }
package/dist/index.mjs CHANGED
@@ -7524,7 +7524,7 @@ var PushAPI = class {
7524
7524
  /**
7525
7525
  * 디바이스 등록 해제
7526
7526
  *
7527
- * @param deviceToken 디바이스 토큰
7527
+ * @param deviceToken 디바이스 토큰 (웹 푸시 기기는 등록 응답의 `device_token`, 즉 endpoint URL)
7528
7528
  *
7529
7529
  * @example
7530
7530
  * ```typescript
@@ -7533,13 +7533,18 @@ var PushAPI = class {
7533
7533
  */
7534
7534
  async unregisterDevice(deviceToken) {
7535
7535
  const prefix = this.getPublicPrefix();
7536
- await this.http.delete(`${prefix}/push/devices/${deviceToken}`);
7536
+ await this.http.post(`${prefix}/push/devices/unregister`, {
7537
+ device_token: deviceToken
7538
+ });
7537
7539
  }
7538
7540
  // ============ Topic Subscription ============
7539
7541
  /**
7540
7542
  * 토픽 구독
7541
7543
  *
7542
- * @param deviceToken 디바이스 토큰
7544
+ * 토픽은 미리 있어야 한다(콘솔에서 만든다). 없으면 404 로 거부된다.
7545
+ *
7546
+ * @param deviceToken 디바이스 토큰 — `registerDevice` / `registerWebPush` 응답의 `device_token`
7547
+ * (웹 푸시 기기는 endpoint URL. 6.7.0 이하는 웹 기기를 구독시키지 못했다)
7543
7548
  * @param topicName 토픽 이름
7544
7549
  *
7545
7550
  * @example
@@ -7549,11 +7554,11 @@ var PushAPI = class {
7549
7554
  */
7550
7555
  async subscribeTopic(deviceToken, topicName) {
7551
7556
  const prefix = this.getPublicPrefix();
7552
- const request = { topic_name: topicName };
7553
- await this.http.post(
7554
- `${prefix}/push/devices/${deviceToken}/topics/subscribe`,
7555
- request
7556
- );
7557
+ const request = {
7558
+ device_token: deviceToken,
7559
+ topic_name: topicName
7560
+ };
7561
+ await this.http.post(`${prefix}/push/topics/subscribe`, request);
7557
7562
  }
7558
7563
  /**
7559
7564
  * 토픽 구독 해제
@@ -7568,9 +7573,11 @@ var PushAPI = class {
7568
7573
  */
7569
7574
  async unsubscribeTopic(deviceToken, topicName) {
7570
7575
  const prefix = this.getPublicPrefix();
7571
- await this.http.delete(
7572
- `${prefix}/push/devices/${deviceToken}/topics/${topicName}/unsubscribe`
7573
- );
7576
+ const request = {
7577
+ device_token: deviceToken,
7578
+ topic_name: topicName
7579
+ };
7580
+ await this.http.post(`${prefix}/push/topics/unsubscribe`, request);
7574
7581
  }
7575
7582
  // ============ Web Push ============
7576
7583
  /**
@@ -7647,13 +7654,10 @@ var PushAPI = class {
7647
7654
  /**
7648
7655
  * Web Push 구독 해제
7649
7656
  *
7650
- * @param deviceToken Web Push endpoint URL (등록 시 사용한 endpoint)
7657
+ * @param deviceToken Web Push endpoint URL (등록 응답의 `device_token`)
7651
7658
  */
7652
7659
  async unregisterWebPush(deviceToken) {
7653
- const prefix = this.getPublicPrefix();
7654
- await this.http.delete(
7655
- `${prefix}/push/devices/${encodeURIComponent(deviceToken)}`
7656
- );
7660
+ await this.unregisterDevice(deviceToken);
7657
7661
  }
7658
7662
  // ============ Server-side Send (Functions / cb_sk_ 전용) ============
7659
7663
  /**
@@ -7756,6 +7760,42 @@ var PushAPI = class {
7756
7760
  body
7757
7761
  );
7758
7762
  }
7763
+ /**
7764
+ * 토픽 만들기 — 서버 코드 전용 (6.8.0+).
7765
+ *
7766
+ * 방마다 쓰는 토픽처럼 서버 코드가 토픽을 만들어 두고, 기기는 그 뒤에 `subscribeTopic` 으로 구독한다. 같은 이름의
7767
+ * 토픽이 이미 있으면 오류 없이 그 토픽을 돌려준다(설정은 바꾸지 않는다) — 트리거가 다시 실행돼도 안전하다.
7768
+ *
7769
+ * Public Key(cb_pk_) 단독 인스턴스로는 호출할 수 없다(공개 키로는 토픽을 만들 수 없다). service_role(ctx.cbAdmin)은
7770
+ * 함수의 management_scopes 에 `push:write` 가 있어야 한다. User Secret Key(cb_sk_), 콘솔 JWT 도 된다.
7771
+ *
7772
+ * @param appId 앱 ID
7773
+ * @param name 토픽 이름 (255바이트 이하, 앞뒤 공백은 지운다)
7774
+ * @param options 표시 이름, 설명
7775
+ * @returns 만들었거나 이미 있던 토픽
7776
+ *
7777
+ * @example
7778
+ * ```typescript
7779
+ * // concerts 트리거 함수: 공연이 생기면 그 방의 알림 토픽을 만들어 둔다
7780
+ * await ctx.cbAdmin.push.createTopic(appId, `cc_${row.room}`, { displayName: row.title })
7781
+ * ```
7782
+ */
7783
+ async createTopic(appId, name, options = {}) {
7784
+ if (this.http.hasPublicKey() && !this.http.hasJWT()) {
7785
+ throw new Error(
7786
+ "cb.push.createTopic() \uB294 User Secret Key(cb_sk_), \uCF58\uC194 JWT, \uB610\uB294 service_role(ctx.cbAdmin) \uC778\uC99D\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. Public Key(cb_pk_) \uB2E8\uB3C5 SDK \uC778\uC2A4\uD134\uC2A4\uB85C\uB294 \uD1A0\uD53D\uC744 \uB9CC\uB4E4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 Functions \uD658\uACBD\uC5D0\uC11C \uC0AC\uC6A9\uD558\uC138\uC694."
7787
+ );
7788
+ }
7789
+ if (!name || !name.trim()) {
7790
+ throw new Error("cb.push.createTopic(): name \uC774 \uBE44\uC5B4\uC788\uC2B5\uB2C8\uB2E4.");
7791
+ }
7792
+ return this.http.post(`/v1/apps/${appId}/push/topics`, {
7793
+ name,
7794
+ if_not_exists: true,
7795
+ ...options.displayName !== void 0 ? { display_name: options.displayName } : {},
7796
+ ...options.description !== void 0 ? { description: options.description } : {}
7797
+ });
7798
+ }
7759
7799
  /**
7760
7800
  * 앱의 푸시 통계(도달/오픈율/클릭율, 디바이스/메시지/토픽 수)를 조회한다.
7761
7801
  *
@@ -11137,8 +11177,8 @@ var SupportAPI = class {
11137
11177
  }
11138
11178
  };
11139
11179
  function detectSdkVersion() {
11140
- if ("6.7.0") {
11141
- return "6.7.0";
11180
+ if ("6.9.0") {
11181
+ return "6.9.0";
11142
11182
  }
11143
11183
  return "unknown";
11144
11184
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "connectbase-client",
3
- "version": "6.7.0",
3
+ "version": "6.9.0",
4
4
  "description": "Connect Base JavaScript/TypeScript SDK for browser and Node.js",
5
5
  "repository": {
6
6
  "type": "git",