@amityco/ts-sdk 7.5.4-6dc7299.0 → 7.5.4-91188fd.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.
Files changed (39) hide show
  1. package/dist/@types/domains/channel.d.ts +0 -1
  2. package/dist/@types/domains/channel.d.ts.map +1 -1
  3. package/dist/@types/domains/group.d.ts +0 -2
  4. package/dist/@types/domains/group.d.ts.map +1 -1
  5. package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.d.ts.map +1 -1
  6. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberLiveCollectionController.d.ts.map +1 -1
  7. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.d.ts +2 -2
  8. package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.d.ts.map +1 -1
  9. package/dist/client/api/index.d.ts +0 -1
  10. package/dist/client/api/index.d.ts.map +1 -1
  11. package/dist/communityRepository/observers/getJoinRequests/JoinRequestsPaginationController.d.ts.map +1 -1
  12. package/dist/index.cjs.js +15 -216
  13. package/dist/index.esm.js +15 -215
  14. package/dist/index.umd.js +4 -4
  15. package/dist/utils/linkedObject/channelLinkedObject.d.ts.map +1 -1
  16. package/dist/utils/linkedObject/index.d.ts +0 -1
  17. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  18. package/dist/utils/tests/dummy/comment.d.ts +1 -1
  19. package/dist/utils/tests/dummy/community.d.ts +0 -2
  20. package/dist/utils/tests/dummy/community.d.ts.map +1 -1
  21. package/package.json +1 -2
  22. package/src/@types/domains/channel.ts +0 -1
  23. package/src/@types/domains/group.ts +0 -2
  24. package/src/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.ts +1 -3
  25. package/src/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberLiveCollectionController.ts +1 -2
  26. package/src/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.ts +2 -2
  27. package/src/client/api/index.ts +0 -1
  28. package/src/communityRepository/observers/getJoinRequests/JoinRequestsPaginationController.ts +2 -1
  29. package/src/utils/linkedObject/channelLinkedObject.ts +0 -19
  30. package/src/utils/linkedObject/index.ts +0 -2
  31. package/dist/client/api/resumeSession.d.ts +0 -32
  32. package/dist/client/api/resumeSession.d.ts.map +0 -1
  33. package/dist/client/api/tests/resumeSession.test.d.ts +0 -2
  34. package/dist/client/api/tests/resumeSession.test.d.ts.map +0 -1
  35. package/dist/utils/linkedObject/channelMemberLinkedObject.d.ts +0 -2
  36. package/dist/utils/linkedObject/channelMemberLinkedObject.d.ts.map +0 -1
  37. package/src/client/api/resumeSession.ts +0 -282
  38. package/src/client/api/tests/resumeSession.test.ts +0 -173
  39. package/src/utils/linkedObject/channelMemberLinkedObject.ts +0 -20
@@ -1,173 +0,0 @@
1
- import { ASCApiError } from '~/core/errors';
2
- import { user11, disconnectClient } from '~/utils/tests';
3
- import { resumeSession, createClient } from '..';
4
- import { setActiveClient } from '../activeClient';
5
-
6
- let client: Amity.Client;
7
-
8
- const sessionHandler: Amity.SessionHandler = {
9
- sessionWillRenewAccessToken(_) {
10
- // do nothing
11
- },
12
- };
13
-
14
- const mockToken = {
15
- accessToken: 'mock-access-token',
16
- issuedAt: '2023-01-01T00:00:00Z',
17
- expiresAt: '2025-01-01T00:00:00Z',
18
- };
19
-
20
- const mockUserResponse = {
21
- data: {
22
- users: [user11],
23
- },
24
- };
25
-
26
- const onConnect = () =>
27
- setTimeout(() => {
28
- const CONNECT_PACKET = { type: 0, nsp: client.ws?.nsp };
29
-
30
- client.ws?.emit('connect');
31
-
32
- // simulate a connection ack packet from server
33
- client.ws?.io.emit('packet', CONNECT_PACKET);
34
- }, 50);
35
-
36
- describe('resumeSession', () => {
37
- beforeEach(() => {
38
- client = createClient('key', 'sg');
39
- client.mqtt?.connect && (client.mqtt.connect = jest.fn());
40
- client.mqtt?.subscribe && (client.mqtt.subscribe = jest.fn());
41
- client.http.get = jest.fn().mockResolvedValueOnce(mockUserResponse);
42
-
43
- setActiveClient(client);
44
- });
45
-
46
- afterEach(async () => {
47
- if (client.sessionState === Amity.SessionStates.ESTABLISHED) await disconnectClient();
48
- });
49
-
50
- test('it should connect client with access token', async () => {
51
- onConnect().unref();
52
-
53
- const received = await resumeSession(
54
- { userId: user11.userId, token: mockToken },
55
- sessionHandler,
56
- );
57
-
58
- expect(received).toBe(true);
59
- });
60
-
61
- test('it should establish connection', async () => {
62
- onConnect().unref();
63
-
64
- await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);
65
- const { sessionState } = client;
66
-
67
- expect(sessionState).toBe(Amity.SessionStates.ESTABLISHED);
68
- });
69
-
70
- test('it should have session state establishing while connecting client', () => {
71
- resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);
72
-
73
- expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHING);
74
- });
75
-
76
- test('it should have session state notLoggedIn on failure', async () => {
77
- client.http.get = jest
78
- .fn()
79
- .mockRejectedValue(
80
- new ASCApiError('unauthorized', Amity.ServerError.UNAUTHORIZED, Amity.ErrorLevel.FATAL),
81
- );
82
-
83
- await expect(
84
- resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler),
85
- ).rejects.toThrow('unauthorized');
86
- expect(client.sessionState).toBe(Amity.SessionStates.NOT_LOGGED_IN);
87
- });
88
-
89
- test('it should set authorization header with token', async () => {
90
- onConnect().unref();
91
-
92
- await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);
93
-
94
- expect(client.http.defaults.headers.common.Authorization).toBe(
95
- `Bearer ${mockToken.accessToken}`,
96
- );
97
- expect(client.upload.defaults.headers.common.Authorization).toBe(
98
- `Bearer ${mockToken.accessToken}`,
99
- );
100
- });
101
-
102
- test('it should set token metadata', async () => {
103
- onConnect().unref();
104
-
105
- await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);
106
-
107
- expect(client.token).toEqual(mockToken);
108
- expect(client.http.defaults.metadata).toEqual({
109
- tokenExpiry: mockToken.expiresAt,
110
- isGlobalBanned: false,
111
- isUserDeleted: false,
112
- });
113
- });
114
-
115
- test('it should call user endpoint to validate token', async () => {
116
- onConnect().unref();
117
-
118
- await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);
119
-
120
- expect(client.http.get).toHaveBeenCalledWith(`/api/v3/users/${user11.userId}`);
121
- });
122
-
123
- test('it should terminate session on ban', async () => {
124
- onConnect().unref();
125
-
126
- await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);
127
-
128
- // ban user
129
- client.emitter.emit('user.didGlobalBan', {} as Amity.UserPayload);
130
-
131
- expect(client.sessionState).toBe(Amity.SessionStates.TERMINATED);
132
- });
133
-
134
- test('it should reset client state when user is already connected with same userId', async () => {
135
- onConnect().unref();
136
-
137
- // First connection
138
- await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);
139
- expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHED);
140
- expect(client.userId).toBe(user11.userId);
141
-
142
- // Mock the HTTP call for second connection
143
- client.http.get = jest.fn().mockResolvedValueOnce(mockUserResponse);
144
-
145
- // Second connection with same userId should treat as token expiry (preserve cache)
146
- onConnect().unref();
147
- await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);
148
-
149
- // Verify that the client is properly reset and reconnected
150
- expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHED);
151
- expect(client.userId).toBe(user11.userId);
152
- });
153
-
154
- test('it should preserve cache when resuming session with same userId', async () => {
155
- onConnect().unref();
156
-
157
- // First connection - set some cache data
158
- await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);
159
- if (client.cache) {
160
- client.cache.data = { test: 'data' };
161
- }
162
-
163
- // Mock the HTTP call for second connection
164
- client.http.get = jest.fn().mockResolvedValueOnce(mockUserResponse);
165
-
166
- // Second connection with same userId
167
- onConnect().unref();
168
- await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);
169
-
170
- // Cache should be preserved when same userId is used
171
- expect(client.cache?.data).toEqual({ test: 'data' });
172
- });
173
- });
@@ -1,20 +0,0 @@
1
- import { pullFromCache } from '~/cache/api/pullFromCache';
2
- import { userLinkedObject } from './userLinkedObject';
3
-
4
- export const channelMemberLinkedObject = (
5
- channelMember: Amity.Membership<'channel'>,
6
- ): Amity.Membership<'channel'> => {
7
- const getUser = (): Amity.User | undefined => {
8
- const cacheKey = ['user', 'get', channelMember.userId];
9
- const internalUser = pullFromCache<Amity.InternalUser>(cacheKey)?.data;
10
-
11
- return internalUser ? userLinkedObject(internalUser) : undefined;
12
- };
13
-
14
- return {
15
- ...channelMember,
16
- get user() {
17
- return getUser();
18
- },
19
- };
20
- };