diff --git a/gradle.properties b/gradle.properties index 9045ab6f..364e9d9b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ SONATYPE_HOST=DEFAULT SONATYPE_AUTOMATIC_RELEASE=false GROUP=com.pubnub POM_PACKAGING=jar -VERSION_NAME=0.10.1 +VERSION_NAME=0.11.0 POM_NAME=PubNub Chat SDK POM_DESCRIPTION=This SDK offers a set of handy methods to create your own feature-rich chat or add a chat to your existing application. diff --git a/js-chat/.pubnub.yml b/js-chat/.pubnub.yml index 8de14d60..1c0ad77f 100644 --- a/js-chat/.pubnub.yml +++ b/js-chat/.pubnub.yml @@ -1,10 +1,15 @@ name: pubnub-js-chat -version: 0.10.0 +version: 0.11.0 scm: github.com/pubnub/js-chat schema: 1 files: - lib/dist/index.js changelog: + - date: 2025-01-16 + version: 0.11.0 + changes: + - type: improvement + text: "The JS Chat SDK now uses TS types from recent versions of PubNub JS SDK instead of the ones in the `@types/pubnub` community resource. Changes to customer code might be required to accommodate this change." - date: 2025-01-08 version: 0.10.0 changes: diff --git a/js-chat/package.json b/js-chat/package.json index 0bda8c34..52815e63 100644 --- a/js-chat/package.json +++ b/js-chat/package.json @@ -27,7 +27,6 @@ "@rollup/plugin-terser": "^0.4.3", "@rollup/plugin-commonjs": "28.0.1", "@types/jest": "29.5.0", - "@types/pubnub": "7.4.2", "babel-jest": "29.5.0", "dotenv": "16.0.3", "jest": "29.5.0", @@ -41,7 +40,7 @@ "module": "dist/index.es.js", "types": "dist/index.d.ts", "react-native": "dist/index.es.js", - "version": "0.10.0", + "version": "0.11.0", "name": "@pubnub/chat", "dependencies": { "pubnub": "8.4.1", diff --git a/js-chat/package_template.json b/js-chat/package_template.json index 0337781b..f9d8e9bb 100644 --- a/js-chat/package_template.json +++ b/js-chat/package_template.json @@ -26,7 +26,6 @@ "@rollup/plugin-terser": "^0.4.3", "@rollup/plugin-commonjs": "28.0.1", "@types/jest": "29.5.0", - "@types/pubnub": "7.4.2", "babel-jest": "29.5.0", "dotenv": "16.0.3", "jest": "29.5.0", diff --git a/js-chat/tests/channel.test.ts b/js-chat/tests/channel.test.ts index aec4b3d3..02c99fd7 100644 --- a/js-chat/tests/channel.test.ts +++ b/js-chat/tests/channel.test.ts @@ -1156,7 +1156,11 @@ describe("Channel test", () => { channelTypeField: true, statusField: true, channelStatusField: true, + typeField: true, }, + limit: null, + page: null, + sort: {}, uuid: chat.currentUser.id, } @@ -1261,4 +1265,12 @@ describe("Channel test", () => { }) ) }) + + test("use PubNub SDK types from Chat SDK", async () => { + let channelMetadata = await chat.sdk.objects.getChannelMetadata({ + channel: channel.id, + include: { customFields: true } + }) + expect(channelMetadata).toBeDefined() + }) }) diff --git a/js-chat/tests/user.test.ts b/js-chat/tests/user.test.ts index 6f7c9b53..3d2eea58 100644 --- a/js-chat/tests/user.test.ts +++ b/js-chat/tests/user.test.ts @@ -190,7 +190,11 @@ describe("User test", () => { channelTypeField: true, statusField: true, channelStatusField: true, + typeField: true, }, + limit: null, + page: null, + sort: {}, uuid: chat.currentUser.id, } diff --git a/src/jsMain/resources/index.d.ts b/src/jsMain/resources/index.d.ts index ded58636..2794b4e5 100644 --- a/src/jsMain/resources/index.d.ts +++ b/src/jsMain/resources/index.d.ts @@ -1,18 +1,18 @@ /// <reference types="pubnub" /> import PubNub from "pubnub"; -import { GetMembershipsParametersv2, GetChannelMembersParameters, ObjectCustom, SetMembershipsParameters, ChannelMetadataObject, PublishParameters, SendFileParameters } from "pubnub"; +import { AppContext, Publish, FileSharing, Signal, Subscription, History } from "pubnub"; type MembershipFields = Pick<Membership, "channel" | "user" | "custom" | "updated" | "eTag" | "status" | "type">; declare class Membership { private chat; readonly channel: Channel; readonly user: User; - readonly custom: ObjectCustom | null | undefined; + readonly custom?: AppContext.CustomData | null; readonly updated: string; readonly eTag: string; readonly status?: string; readonly type?: string; update({ custom }: { - custom: ObjectCustom; + custom: AppContext.CustomData; }): Promise<Membership>; /* * Updates @@ -35,7 +35,7 @@ declare class User { readonly externalId?: string; readonly profileUrl?: string; readonly email?: string; - readonly custom?: ObjectCustom; + readonly custom?: AppContext.CustomData; readonly status?: string; readonly type?: string; readonly updated?: string; @@ -59,7 +59,7 @@ declare class User { /* * Memberships */ - getMemberships(params?: Omit<GetMembershipsParametersv2, "include" | "uuid">): Promise<{ + getMemberships(params?: Omit<AppContext.GetMembershipsParameters, "include" | "uuid">): Promise<{ page: { next: string | undefined; prev: string | undefined; @@ -81,7 +81,7 @@ declare class User { mute: boolean; reason: string | number | boolean | undefined; }>; - getChannelsRestrictions(params?: Pick<PubNub.GetChannelMembersParameters, "limit" | "page" | "sort">): Promise<{ + getChannelsRestrictions(params?: Pick<AppContext.GetMembersParameters, "limit" | "page" | "sort">): Promise<{ page: { next: string | undefined; prev: string | undefined; @@ -99,7 +99,7 @@ declare class User { * Other */ /** @deprecated */ - DEPRECATED_report(reason: string): Promise<PubNub.SignalResponse>; + DEPRECATED_report(reason: string): Promise<Signal.SignalResponse>; } type EventFields<T extends EventType> = Pick<Event<T>, "timetoken" | "type" | "payload" | "channelId" | "userId">; declare class Event<T extends EventType> { @@ -243,26 +243,22 @@ type MessageReferencedChannels = { name: string; }; }; -type MessageDraftOptions = Omit<PublishParameters, "message" | "channel">; -type SendTextOptionParams = Omit<PublishParameters, "message" | "channel"> & { +type MessageDraftOptions = Omit<Publish.PublishParameters, "message" | "channel">; +type SendTextOptionParams = Omit<Publish.PublishParameters, "message" | "channel"> & { mentionedUsers?: MessageMentionedUsers; referencedChannels?: MessageReferencedChannels; textLinks?: TextLink[]; quotedMessage?: Message; - files?: FileList | File[] | SendFileParameters["file"][]; + files?: FileList | File[] | FileSharing.SendFileParameters<PubNub.PubNubFileParameters>["file"][]; }; -type EnhancedMessageEvent = PubNub.MessageEvent & { - userMetadata?: { - [key: string]: any; - }; -}; -type MessageDTOParams = PubNub.FetchMessagesResponse["channels"]["channel"][0] | EnhancedMessageEvent; +type EnhancedMessageEvent = Subscription.Message; +type MessageDTOParams = History.FetchMessagesForChannelsResponse['channels'][string][number] | History.FetchMessagesWithActionsResponse['channels'][string][number] | EnhancedMessageEvent; type ThreadMessageDTOParams = MessageDTOParams & { parentChannelId: string; }; type MembershipResponse = Awaited<ReturnType<User["getMemberships"]>>; type OptionalAllBut<T, K extends keyof T> = Partial<T> & Pick<T, K>; -type ChannelDTOParams = OptionalAllBut<ChannelMetadataObject<ObjectCustom>, "id"> & { +type ChannelDTOParams = OptionalAllBut<AppContext.ChannelMetadataObject<AppContext.CustomData>, "id"> & { status?: string | null; type?: ChannelType | null | string; }; @@ -396,11 +392,11 @@ declare class Message { /* * Other */ - forward(channelId: string): Promise<PubNub.PublishResponse>; + forward(channelId: string): Promise<Publish.PublishResponse>; pin(): Promise<void>; /** @deprecated */ - DEPRECATED_report(reason: string): Promise<PubNub.SignalResponse>; - report(reason: string): Promise<PubNub.SignalResponse>; + DEPRECATED_report(reason: string): Promise<Signal.SignalResponse>; + report(reason: string): Promise<Signal.SignalResponse>; /** * Threads */ @@ -429,13 +425,13 @@ export declare class MessageDraftV2 { get value(): string; quotedMessage: Message | undefined; readonly config: MessageDraftConfig; - files?: FileList | File[] | SendFileParameters["file"][]; + files?: FileList | File[] | FileSharing.SendFileParameters<PubNub.PubNubFileParameters>["file"][]; addQuote(message: Message): void; removeQuote(): void; addLinkedText(params: AddLinkedTextParams): void; removeLinkedText(positionInInput: number): void; getMessagePreview(): MixedTextTypedElement[]; - send(params?: MessageDraftOptions): Promise<PubNub.PublishResponse>; + send(params?: MessageDraftOptions): Promise<Publish.PublishResponse>; addChangeListener(listener: (p0: MessageDraftState) => void): void; removeChangeListener(listener: (p0: MessageDraftState) => void): void; insertText(offset: number, text: string): void; @@ -465,7 +461,7 @@ declare class MessageDraft { value: string; quotedMessage: Message | undefined; readonly config: MessageDraftConfig; - files?: FileList | File[] | SendFileParameters["file"][]; + files?: FileList | File[] | FileSharing.SendFileParameters<PubNub.PubNubFileParameters>["file"][]; onChange(text: string): Promise<{ users: { nameOccurrenceIndex: number; @@ -499,7 +495,7 @@ declare class Channel { protected chat: Chat; readonly id: string; readonly name?: string; - readonly custom?: ObjectCustom; + readonly custom?: AppContext.CustomData; readonly description?: string; readonly updated?: string; readonly status?: string; @@ -515,9 +511,9 @@ declare class Channel { static streamUpdatesOn(channels: Channel[], callback: (channels: Channel[]) => unknown): () => void; streamUpdates(callback: (channel: Channel) => unknown): () => void; sendText(text: string, options?: SendTextOptionParams): Promise<unknown>; - forwardMessage(message: Message): Promise<PubNub.PublishResponse>; - startTyping(): Promise<PubNub.SignalResponse | undefined>; - stopTyping(): Promise<PubNub.SignalResponse | undefined>; + forwardMessage(message: Message): Promise<Publish.PublishResponse>; + startTyping(): Promise<Signal.SignalResponse | undefined>; + stopTyping(): Promise<Signal.SignalResponse | undefined>; getTyping(callback: (typingUserIds: string[]) => unknown): () => void; /* * Streaming messages @@ -541,14 +537,14 @@ declare class Channel { isMore: boolean; }>; getMessage(timetoken: string): Promise<Message>; - join(callback: (message: Message) => void, params?: Omit<SetMembershipsParameters<ObjectCustom>, "channels" | "include" | "filter"> & { - custom?: ObjectCustom; + join(callback: (message: Message) => void, params?: Omit<AppContext.SetMembershipsParameters<AppContext.CustomData>, "channels" | "include" | "filter"> & { + custom?: AppContext.CustomData; }): Promise<{ membership: Membership; disconnect: () => void; }>; leave(): Promise<boolean>; - getMembers(params?: Omit<GetChannelMembersParameters, "channel" | "include">): Promise<{ + getMembers(params?: Omit<AppContext.GetMembersParameters, "channel" | "include">): Promise<{ page: { next: string | undefined; prev: string | undefined; @@ -572,7 +568,7 @@ declare class Channel { streamReadReceipts(callback: (receipts: { [key: string]: string[]; }) => unknown): Promise<() => void>; - getFiles(params?: Omit<PubNub.ListFilesParameters, "channel">): Promise<{ + getFiles(params?: Omit<FileSharing.ListFilesParameters, "channel">): Promise<{ files: { name: string; id: string; @@ -584,7 +580,7 @@ declare class Channel { deleteFile(params: { id: string; name: string; - }): Promise<PubNub.DeleteFileResponse>; + }): Promise<FileSharing.DeleteFileResponse>; /** * Moderation restrictions */ @@ -598,7 +594,7 @@ declare class Channel { mute: boolean; reason: string | number | boolean | undefined; }>; - getUsersRestrictions(params?: Pick<PubNub.GetChannelMembersParameters, "limit" | "page" | "sort">): Promise<{ + getUsersRestrictions(params?: Pick<AppContext.GetMembersParameters, "limit" | "page" | "sort">): Promise<{ page: { next: string | undefined; prev: string | undefined; @@ -652,13 +648,13 @@ type ChatConfig = { authKey?: string; syncMutedUsers?: boolean; }; -type ChatConstructor = Partial<ChatConfig> & PubNub.PubnubConfig; +type ChatConstructor = Partial<ChatConfig> & PubNub.PubNubConfiguration; declare class Chat { readonly sdk: PubNub; readonly config: ChatConfig; private user; static init(params: ChatConstructor): Promise<Chat>; - emitEvent(event: EmitEventParams): Promise<PubNub.SignalResponse>; + emitEvent(event: EmitEventParams): Promise<Signal.SignalResponse>; listenForEvents<T extends EventType>(event: GenericEventParams<T> & { callback: (event: Event<T>) => unknown; }): () => void; @@ -683,7 +679,7 @@ declare class Chat { createUser(id: string, data: Omit<UserFields, "id">): Promise<User>; updateUser(id: string, data: Omit<UserFields, "id">): Promise<User>; deleteUser(id: string, params?: DeleteParameters): Promise<true | User>; - getUsers(params?: Omit<PubNub.GetAllMetadataParameters, "include">): Promise<{ + getUsers(params?: Omit<AppContext.GetAllMetadataParameters<AppContext.UUIDMetadataObject<AppContext.CustomData>>, "include">): Promise<{ users: User[]; page: { next: string | undefined; @@ -696,7 +692,7 @@ declare class Chat { */ getChannel(id: string): Promise<Channel | null>; updateChannel(id: string, data: Omit<ChannelFields, "id">): Promise<Channel>; - getChannels(params?: Omit<PubNub.GetAllMetadataParameters, "include">): Promise<{ + getChannels(params?: Omit<AppContext.GetAllMetadataParameters<AppContext.ChannelMetadataObject<AppContext.CustomData>>, "include">): Promise<{ channels: Channel[]; page: { next: string | undefined; @@ -710,7 +706,7 @@ declare class Chat { */ createPublicConversation({ channelId, channelData }?: { channelId?: string; - channelData?: PubNub.ChannelMetadata<PubNub.ObjectCustom>; + channelData?: AppContext.SetChannelMetadataParameters<AppContext.CustomData>; }): Promise<Channel>; /** * Presence @@ -721,9 +717,9 @@ declare class Chat { createDirectConversation({ user, channelId, channelData, membershipData }: { user: User; channelId?: string; - channelData?: PubNub.ChannelMetadata<PubNub.ObjectCustom>; - membershipData?: Omit<PubNub.SetMembershipsParameters<PubNub.ObjectCustom>, "channels" | "include" | "filter"> & { - custom?: PubNub.ObjectCustom; + channelData?: AppContext.SetChannelMetadataParameters<AppContext.CustomData>; + membershipData?: Omit<AppContext.SetMembershipsParameters<AppContext.CustomData>, "channels" | "include" | "filter"> & { + custom?: AppContext.CustomData; }; }): Promise<{ channel: Channel; @@ -733,9 +729,9 @@ declare class Chat { createGroupConversation({ users, channelId, channelData, membershipData }: { users: User[]; channelId?: string; - channelData?: PubNub.ChannelMetadata<PubNub.ObjectCustom>; - membershipData?: Omit<PubNub.SetMembershipsParameters<PubNub.ObjectCustom>, "channels" | "include" | "filter"> & { - custom?: PubNub.ObjectCustom; + channelData?: AppContext.SetChannelMetadataParameters<AppContext.CustomData>; + membershipData?: Omit<AppContext.SetMembershipsParameters<AppContext.CustomData>, "channels" | "include" | "filter"> & { + custom?: AppContext.CustomData; }; }): Promise<{ channel: Channel; @@ -761,12 +757,12 @@ declare class Chat { enhancedMentionsData: UserMentionData[]; isMore: boolean; }>; - getUnreadMessagesCounts(params?: Omit<GetMembershipsParametersv2, "include">): Promise<{ + getUnreadMessagesCounts(params?: Omit<AppContext.GetMembershipsParameters, "include">): Promise<{ channel: Channel; membership: Membership; count: number; }[]>; - markAllMessagesAsRead(params?: Omit<GetMembershipsParametersv2, "include">): Promise<{ + markAllMessagesAsRead(params?: Omit<AppContext.GetMembershipsParameters, "include">): Promise<{ page: { next: string | undefined; prev: string | undefined; @@ -829,8 +825,8 @@ declare class QuotedMessage { declare class MutedUsersManager { get mutedUsers(): string[]; - async muteUser(userId: string); - async unmuteUser(userId: string); + muteUser(userId: string): Promise<any>; + unmuteUser(userId: string): Promise<any>; } declare const MESSAGE_THREAD_ID_PREFIX = "PUBNUB_INTERNAL_THREAD";