Skip to content

Commit 792821e

Browse files
committed
feat: Add guest user connection option
1 parent 0b141b6 commit 792821e

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

projects/stream-chat-angular/src/lib/chat-client.service.spec.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,28 @@ describe('ChatClientService', () => {
2929
await service.init(apiKey, userId, userToken);
3030
});
3131

32-
it('should connect user', () => {
32+
it('should connect user', async () => {
33+
mockChatClient.connectUser.calls.reset();
34+
await service.init(apiKey, userId, userToken);
35+
36+
expect(StreamChat.getInstance).toHaveBeenCalledWith(apiKey);
37+
const spy = jasmine.createSpy();
38+
service.appSettings$.subscribe(spy);
39+
const userSpy = jasmine.createSpy();
40+
service.user$.subscribe(userSpy);
41+
42+
expect(spy).toHaveBeenCalledWith(undefined);
43+
expect(userSpy).toHaveBeenCalledWith(mockCurrentUser());
44+
expect(mockChatClient.connectUser).toHaveBeenCalledWith(
45+
{ id: userId },
46+
userToken
47+
);
48+
});
49+
50+
it('should connect user - guest user', async () => {
51+
mockChatClient.connectUser.calls.reset();
52+
await service.init(apiKey, userId, 'guest');
53+
3354
expect(StreamChat.getInstance).toHaveBeenCalledWith(apiKey);
3455
const spy = jasmine.createSpy();
3556
service.appSettings$.subscribe(spy);
@@ -38,6 +59,8 @@ describe('ChatClientService', () => {
3859

3960
expect(spy).toHaveBeenCalledWith(undefined);
4061
expect(userSpy).toHaveBeenCalledWith(mockCurrentUser());
62+
expect(mockChatClient.connectUser).not.toHaveBeenCalled();
63+
expect(mockChatClient.setGuestUser).toHaveBeenCalledWith({ id: userId });
4164
});
4265

4366
it('should disconnect user', async () => {

projects/stream-chat-angular/src/lib/chat-client.service.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,22 @@ export class ChatClientService<
8383
* Creates a [`StreamChat`](https://github.com/GetStream/stream-chat-js/blob/668b3e5521339f4e14fc657834531b4c8bf8176b/src/client.ts#L124) instance using the provided `apiKey`, and connects a user with the given meta data and token. More info about [connecting users](https://getstream.io/chat/docs/javascript/init_and_users/?language=javascript) can be found in the platform documentation.
8484
* @param apiKey
8585
* @param userOrId
86-
* @param userTokenOrProvider
86+
* @param userTokenOrProvider You can provide a token, or the keyword 'guest' to connect as [guest user](https://getstream.io/chat/docs/javascript/authless_users/?language=javascript#guest-users)
8787
*/
8888
async init(
8989
apiKey: string,
9090
userOrId: string | OwnUserResponse<T> | UserResponse<T>,
91-
userTokenOrProvider: TokenOrProvider
91+
userTokenOrProvider: TokenOrProvider | 'guest'
9292
): ConnectAPIResponse<T> {
9393
this.chatClient = StreamChat.getInstance<T>(apiKey);
9494
this.chatClient.devToken;
9595
let result;
9696
await this.ngZone.runOutsideAngular(async () => {
9797
const user = typeof userOrId === 'string' ? { id: userOrId } : userOrId;
98-
result = await this.chatClient.connectUser(user, userTokenOrProvider);
98+
result =
99+
userTokenOrProvider === 'guest'
100+
? await this.chatClient.setGuestUser(user)
101+
: await this.chatClient.connectUser(user, userTokenOrProvider);
99102
this.userSubject.next(this.chatClient.user);
100103
this.chatClient.setUserAgent(
101104
`stream-chat-angular-${version}-${this.chatClient.getUserAgent()}`

projects/stream-chat-angular/src/lib/mocks/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ export type MockStreamChatClient = {
275275
appSettings$: Subject<AppSettings>;
276276
user: UserResponse;
277277
connectUser: jasmine.Spy;
278+
setGuestUser: jasmine.Spy;
278279
on: (name: EventTypes, handler: () => {}) => { unsubscribe: () => void };
279280
handleEvent: (name: EventTypes, event: Event) => void;
280281
flagMessage: jasmine.Spy;
@@ -290,6 +291,7 @@ export const mockStreamChatClient = (): MockStreamChatClient => {
290291
const eventHandlers: { [key: string]: Function } = {};
291292
/* eslint-disable jasmine/no-unsafe-spy */
292293
const connectUser = jasmine.createSpy();
294+
const setGuestUser = jasmine.createSpy();
293295
const flagMessage = jasmine.createSpy();
294296
const setUserAgent = jasmine.createSpy();
295297
const queryUsers = jasmine.createSpy();
@@ -347,6 +349,7 @@ export const mockStreamChatClient = (): MockStreamChatClient => {
347349
getAppSettings,
348350
appSettings$,
349351
queryChannels,
352+
setGuestUser,
350353
};
351354
};
352355

0 commit comments

Comments
 (0)