@amityco/ts-sdk 0.0.1-beta.36 → 0.0.1-beta.37

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 (133) hide show
  1. package/dist/@types/core/errors.d.ts +1 -0
  2. package/dist/@types/core/errors.d.ts.map +1 -1
  3. package/dist/@types/core/events.d.ts +4 -0
  4. package/dist/@types/core/events.d.ts.map +1 -1
  5. package/dist/@types/domains/client.d.ts +21 -1
  6. package/dist/@types/domains/client.d.ts.map +1 -1
  7. package/dist/@types/global.d.ts +7 -0
  8. package/dist/@types/global.d.ts.map +1 -1
  9. package/dist/client/api/accessTokenExpiryWatcher.d.ts +4 -0
  10. package/dist/client/api/accessTokenExpiryWatcher.d.ts.map +1 -0
  11. package/dist/client/api/activeUser.d.ts +1 -1
  12. package/dist/client/api/activeUser.d.ts.map +1 -1
  13. package/dist/client/api/connectClient.d.ts +1 -1
  14. package/dist/client/api/connectClient.d.ts.map +1 -1
  15. package/dist/client/api/createClient.d.ts +1 -1
  16. package/dist/client/api/createClient.d.ts.map +1 -1
  17. package/dist/client/api/disconnectClient.d.ts +0 -1
  18. package/dist/client/api/disconnectClient.d.ts.map +1 -1
  19. package/dist/client/api/getToken.d.ts +4 -4
  20. package/dist/client/api/index.d.ts +1 -0
  21. package/dist/client/api/index.d.ts.map +1 -1
  22. package/dist/client/api/renewal.d.ts +2 -0
  23. package/dist/client/api/renewal.d.ts.map +1 -0
  24. package/dist/client/api/setSessionState.d.ts +12 -0
  25. package/dist/client/api/setSessionState.d.ts.map +1 -0
  26. package/dist/client/api/terminateClient.d.ts +9 -0
  27. package/dist/client/api/terminateClient.d.ts.map +1 -0
  28. package/dist/client/api/tests/accessTokenExpiryWatcher.test.d.ts +2 -0
  29. package/dist/client/api/tests/accessTokenExpiryWatcher.test.d.ts.map +1 -0
  30. package/dist/client/api/tests/connectClient.test.d.ts +2 -0
  31. package/dist/client/api/tests/connectClient.test.d.ts.map +1 -0
  32. package/dist/client/api/tests/disconnectClient.test.d.ts +2 -0
  33. package/dist/client/api/tests/disconnectClient.test.d.ts.map +1 -0
  34. package/dist/client/api/tests/getToken.test.d.ts +2 -0
  35. package/dist/client/api/tests/getToken.test.d.ts.map +1 -0
  36. package/dist/client/api/tests/renewal.test.d.ts +2 -0
  37. package/dist/client/api/tests/renewal.test.d.ts.map +1 -0
  38. package/dist/client/api/tests/setSessionState.test.d.ts +2 -0
  39. package/dist/client/api/tests/setSessionState.test.d.ts.map +1 -0
  40. package/dist/client/api/tests/terminateClient.test.d.ts +2 -0
  41. package/dist/client/api/tests/terminateClient.test.d.ts.map +1 -0
  42. package/dist/client/events/index.d.ts +1 -0
  43. package/dist/client/events/index.d.ts.map +1 -1
  44. package/dist/client/events/onClientBanned.d.ts +1 -1
  45. package/dist/client/events/onClientBanned.d.ts.map +1 -1
  46. package/dist/client/events/onSessionStateChange.d.ts +17 -0
  47. package/dist/client/events/onSessionStateChange.d.ts.map +1 -0
  48. package/dist/client/events/onTokenExpired.d.ts +17 -0
  49. package/dist/client/events/onTokenExpired.d.ts.map +1 -0
  50. package/dist/client/events/onTokenTerminated.d.ts +11 -0
  51. package/dist/client/events/onTokenTerminated.d.ts.map +1 -0
  52. package/dist/client/events/tests/onSessionStateChange.test.d.ts +2 -0
  53. package/dist/client/events/tests/onSessionStateChange.test.d.ts.map +1 -0
  54. package/dist/client/events/tests/onTokenTerminated.test.d.ts +2 -0
  55. package/dist/client/events/tests/onTokenTerminated.test.d.ts.map +1 -0
  56. package/dist/client/utils/setClientToken.d.ts +19 -0
  57. package/dist/client/utils/setClientToken.d.ts.map +1 -0
  58. package/dist/comment/events/tests/onCommentDeleted.test.d.ts +2 -0
  59. package/dist/comment/events/tests/onCommentDeleted.test.d.ts.map +1 -0
  60. package/dist/core/events.d.ts +3 -3
  61. package/dist/core/events.d.ts.map +1 -1
  62. package/dist/core/subscription.d.ts.map +1 -1
  63. package/dist/core/transports/http.d.ts.map +1 -1
  64. package/dist/index.cjs.js +503 -137
  65. package/dist/index.esm.js +502 -138
  66. package/dist/index.umd.js +4 -4
  67. package/dist/stream/api/tests/createStream.test.d.ts +2 -0
  68. package/dist/stream/api/tests/createStream.test.d.ts.map +1 -0
  69. package/dist/stream/api/tests/deleteStream.test.d.ts +2 -0
  70. package/dist/stream/api/tests/deleteStream.test.d.ts.map +1 -0
  71. package/dist/stream/api/tests/getStream.test.d.ts +2 -0
  72. package/dist/stream/api/tests/getStream.test.d.ts.map +1 -0
  73. package/dist/subChannel/api/tests/createSubChannel.test.d.ts +2 -0
  74. package/dist/subChannel/api/tests/createSubChannel.test.d.ts.map +1 -0
  75. package/dist/utils/constants.d.ts +2 -0
  76. package/dist/utils/constants.d.ts.map +1 -1
  77. package/dist/utils/tests/client.d.ts.map +1 -1
  78. package/dist/utils/tests/dummy/index.d.ts +2 -0
  79. package/dist/utils/tests/dummy/index.d.ts.map +1 -1
  80. package/dist/utils/tests/dummy/stream.d.ts +83 -0
  81. package/dist/utils/tests/dummy/stream.d.ts.map +1 -0
  82. package/dist/utils/tests/dummy/subChannel.d.ts +20 -0
  83. package/dist/utils/tests/dummy/subChannel.d.ts.map +1 -1
  84. package/dist/utils/tests/dummy/token.d.ts +11 -0
  85. package/dist/utils/tests/dummy/token.d.ts.map +1 -0
  86. package/package.json +1 -1
  87. package/src/@types/core/errors.ts +1 -0
  88. package/src/@types/core/events.ts +6 -0
  89. package/src/@types/domains/client.ts +45 -1
  90. package/src/@types/global.ts +14 -0
  91. package/src/client/api/accessTokenExpiryWatcher.ts +83 -0
  92. package/src/client/api/activeUser.ts +1 -1
  93. package/src/client/api/connectClient.ts +105 -24
  94. package/src/client/api/createClient.ts +9 -1
  95. package/src/client/api/disconnectClient.ts +26 -2
  96. package/src/client/api/getToken.ts +6 -6
  97. package/src/client/api/index.ts +2 -0
  98. package/src/client/api/renewal.ts +74 -0
  99. package/src/client/api/setSessionState.ts +75 -0
  100. package/src/client/api/terminateClient.ts +20 -0
  101. package/src/client/api/tests/accessTokenExpiryWatcher.test.ts +129 -0
  102. package/src/client/api/tests/connectClient.test.ts +84 -0
  103. package/src/client/api/tests/createClient.test.ts +8 -0
  104. package/src/client/api/tests/disconnectClient.test.ts +78 -0
  105. package/src/client/api/tests/getToken.test.ts +36 -0
  106. package/src/client/api/tests/renewal.test.ts +67 -0
  107. package/src/client/api/tests/setSessionState.test.ts +62 -0
  108. package/src/client/api/tests/terminateClient.test.ts +29 -0
  109. package/src/client/events/index.ts +2 -0
  110. package/src/client/events/onClientBanned.ts +12 -5
  111. package/src/client/events/onSessionStateChange.ts +31 -0
  112. package/src/client/events/onTokenExpired.ts +26 -0
  113. package/src/client/events/onTokenTerminated.ts +20 -0
  114. package/src/client/events/tests/onSessionStateChange.test.ts +37 -0
  115. package/src/client/events/tests/onTokenTerminated.test.ts +37 -0
  116. package/src/client/tests/connectClient.test.ts +6 -1
  117. package/src/client/utils/setClientToken.ts +39 -0
  118. package/src/comment/events/tests/onCommentDeleted.test.ts +27 -0
  119. package/src/core/events.ts +5 -3
  120. package/src/core/subscription.ts +3 -1
  121. package/src/core/transports/http.ts +36 -1
  122. package/src/core/transports/mqtt.ts +1 -1
  123. package/src/external/api/createUserToken.ts +2 -2
  124. package/src/stream/api/tests/createStream.test.ts +30 -0
  125. package/src/stream/api/tests/deleteStream.test.ts +48 -0
  126. package/src/stream/api/tests/getStream.test.ts +23 -0
  127. package/src/subChannel/api/tests/createSubChannel.test.ts +103 -0
  128. package/src/utils/constants.ts +2 -0
  129. package/src/utils/tests/client.ts +18 -2
  130. package/src/utils/tests/dummy/index.ts +3 -0
  131. package/src/utils/tests/dummy/stream.ts +86 -0
  132. package/src/utils/tests/dummy/subChannel.ts +22 -0
  133. package/src/utils/tests/dummy/token.ts +12 -0
@@ -0,0 +1,103 @@
1
+ import { createSubChannel } from '../createSubChannel';
2
+ import {
3
+ client,
4
+ generateRawSubChannel,
5
+ createSubChannelError400301,
6
+ createSubChannelError400400,
7
+ } from '~/utils/tests';
8
+
9
+ import { onSubChannelCreated } from '~/subChannel/events';
10
+
11
+ import { disableCache, enableCache, pullFromCache, pushToCache } from '~/cache/api';
12
+
13
+ const subChannelId = 'channelId11--sub-channel-id';
14
+
15
+ const subChannelPayload = {
16
+ channelId: 'channelId11',
17
+ displayName: 'sub channel name',
18
+ };
19
+
20
+ describe('createSubChannel', () => {
21
+ beforeEach(enableCache);
22
+
23
+ afterEach(disableCache);
24
+
25
+ // integration_test_id: fa72f0eb-b22b-4b9a-9e55-3a163a0ebd2a
26
+ test('it should return a valid sub channel', async () => {
27
+ const rawSubChannel = generateRawSubChannel();
28
+ client.http.post = jest.fn().mockResolvedValue({
29
+ data: { messageFeeds: [rawSubChannel], messages: [], users: [], files: [] },
30
+ });
31
+
32
+ const { data } = await createSubChannel(subChannelPayload);
33
+
34
+ expect(data.channelId).toEqual(subChannelPayload.channelId);
35
+ expect(data.displayName).toEqual(subChannelPayload.displayName);
36
+ expect(data.subChannelId).toEqual(subChannelId);
37
+ });
38
+
39
+ // integration_test_id: f5b376b7-32b6-47f3-a5a1-553221340d17
40
+ test('it should return error 400400 when try to create subChannel from wrong parent channel Id', async () => {
41
+ client.http.post = jest.fn().mockRejectedValue({
42
+ status: 404,
43
+ data: createSubChannelError400400,
44
+ });
45
+
46
+ try {
47
+ await createSubChannel({
48
+ channelId: createSubChannelError400400.data.detail.channelId,
49
+ displayName: 'sub channel name',
50
+ });
51
+ } catch ({ status = null, data = null }) {
52
+ expect(status).toEqual(404);
53
+ expect(data).toEqual(createSubChannelError400400);
54
+ }
55
+ });
56
+
57
+ // integration_test_id: 73b59e57-2330-4ed3-95bd-241c9e7a2c43
58
+ test('it should return error 400301 when try to create subChannel from channel Id', async () => {
59
+ client.http.post = jest.fn().mockRejectedValue({
60
+ status: 403,
61
+ data: createSubChannelError400301,
62
+ });
63
+
64
+ try {
65
+ await createSubChannel({
66
+ channelId: createSubChannelError400301.data.detail.channelId,
67
+ displayName: 'sub channel name',
68
+ });
69
+ } catch ({ status = null, data = null }) {
70
+ expect(status).toEqual(403);
71
+ expect(data).toEqual(createSubChannelError400301);
72
+ }
73
+ });
74
+
75
+ test('it should return a valid sub channel from cache', async () => {
76
+ const rawSubChannel = generateRawSubChannel();
77
+ client.http.post = jest.fn().mockResolvedValue({
78
+ data: { messageFeeds: [rawSubChannel], messages: [], users: [], files: [] },
79
+ });
80
+
81
+ const { data } = await createSubChannel(subChannelPayload);
82
+
83
+ const cache = pullFromCache(['subChannel', 'get', subChannelId]);
84
+
85
+ expect(cache?.data).toEqual(data);
86
+ });
87
+
88
+ test('should fire event `onSubChannelCreated`', async () => {
89
+ let dispose;
90
+ const rawSubChannel = generateRawSubChannel();
91
+ client.http.post = jest.fn().mockResolvedValue({
92
+ data: { messageFeeds: [rawSubChannel], messages: [], users: [], files: [] },
93
+ });
94
+
95
+ const callbackPromise = new Promise(resolve => {
96
+ dispose = onSubChannelCreated(resolve);
97
+ }).finally(dispose);
98
+
99
+ const { data } = await createSubChannel(subChannelPayload);
100
+
101
+ await expect(callbackPromise).resolves.toMatchObject(data);
102
+ });
103
+ });
@@ -6,3 +6,5 @@ export const LIVE_OBJECT_ENABLE_CACHE_MESSAGE =
6
6
  export const UNSYNCED_OBJECT_CACHED_AT_MESSAGE =
7
7
  'Observing unsynced object is not supported by Live Object.';
8
8
  export const UNSYNCED_OBJECT_CACHED_AT_VALUE = -5;
9
+ export const MINUTE = 60 * 1000;
10
+ export const ACCESS_TOKEN_WATCHER_INTERVAL = 10 * MINUTE;
@@ -6,9 +6,22 @@ import {
6
6
 
7
7
  import { user11 } from './dummy';
8
8
 
9
+ const sessionHandler: Amity.SessionHandler = {
10
+ sessionWillRenewAccessToken(_) {
11
+ // do nothing
12
+ },
13
+ };
14
+
9
15
  export const client = createClient('key', 'sg');
16
+ client.accessTokenExpiryWatcher = (_, __, ___) => () => {
17
+ //
18
+ };
10
19
 
11
20
  export const connectClient = async () => {
21
+ const now = new Date();
22
+ const nextMonth = new Date();
23
+ nextMonth.setDate(now.getDate() + 30);
24
+
12
25
  client.mqtt.connect = jest.fn();
13
26
  client.mqtt.subscribe = jest.fn();
14
27
  client.http.post = jest.fn().mockReturnValueOnce({
@@ -16,14 +29,17 @@ export const connectClient = async () => {
16
29
  accessToken: 'accessToken',
17
30
  refreshToken: 'refreshToken',
18
31
  users: [user11],
32
+ expiresAt: nextMonth.toISOString(),
33
+ issuedAt: now.toISOString(),
19
34
  },
20
35
  });
21
36
 
22
37
  setTimeout(() => {
23
38
  client.ws.emit('connect');
24
- }, 500);
39
+ // fixes jest warning of open handles
40
+ }, 500).unref();
25
41
 
26
- await sdkConnectClient({ userId: 'test' });
42
+ await sdkConnectClient({ userId: 'test' }, sessionHandler);
27
43
  };
28
44
 
29
45
  export const disconnectClient = async () => {
@@ -15,5 +15,8 @@ export * from './channel';
15
15
  export * from './subChannel';
16
16
 
17
17
  export * from './message';
18
+ export * from './token';
18
19
  export * from './member';
19
20
  export * from './community';
21
+
22
+ export * from './stream';
@@ -0,0 +1,86 @@
1
+ export const streamResponse = {
2
+ data: {
3
+ "videoStreamings": [
4
+ {
5
+ streamId: "123",
6
+ "userId": "123",
7
+ "thumbnailFileId": "123",
8
+ "title": "Test Stream",
9
+ "status": "idle",
10
+ "isLive": true,
11
+ "isDeleted": true,
12
+ "description": "Test Stream Description",
13
+ "platform": {
14
+ "name": "x86",
15
+ "version": "123"
16
+ },
17
+ "startedAt": "2023-01-17T07:19:06.414Z",
18
+ "endedAt": "2023-01-17T07:19:06.414Z",
19
+ "createdAt": "2023-01-17T07:19:06.414Z",
20
+ "updatedAt": "2023-01-17T07:19:06.414Z",
21
+ "metadata": {},
22
+ "resolution": "SD",
23
+ "streamerUrl": {
24
+ "url": "https://test-stream.test",
25
+ "components": {
26
+ "origin": "origin",
27
+ "appName": "stream app",
28
+ "streamName": "stream name",
29
+ "query": "123"
30
+ }
31
+ },
32
+ "recordings": [
33
+ {
34
+ "flv": {
35
+ "url": "https://test-stream-flv.test",
36
+ "duration": 0,
37
+ "startTime": 0,
38
+ "stopTime": 0
39
+ },
40
+ "mp4": {
41
+ "url": "https://test-stream-mp4.test",
42
+ "duration": 0,
43
+ "startTime": 0,
44
+ "stopTime": 0
45
+ },
46
+ "m3u8": {
47
+ "url": "https://test-stream-m3u8.test",
48
+ "duration": 0,
49
+ "startTime": 0,
50
+ "stopTime": 0
51
+ }
52
+ }
53
+ ],
54
+ "watcherUrl": {
55
+ "flv": {
56
+ "url": "https://test-stream-flv.test",
57
+ "components": {
58
+ "origin": "1",
59
+ "appName": "2",
60
+ "streamName": "3",
61
+ "query": "4"
62
+ }
63
+ },
64
+ "hls": {
65
+ "url": "https://test-stream-hls.test",
66
+ "components": {
67
+ "origin": "1",
68
+ "appName": "2",
69
+ "streamName": "3",
70
+ "query": "4"
71
+ }
72
+ },
73
+ "rtmp": {
74
+ "url": "https://test-stream-rtmp.test",
75
+ "components": {
76
+ "origin": "1",
77
+ "appName": "2",
78
+ "streamName": "3",
79
+ "query": "4"
80
+ }
81
+ }
82
+ }
83
+ }
84
+ ],
85
+ }
86
+ };
@@ -27,3 +27,25 @@ export function generateSubChannel(params?: Record<string, any>): Amity.SubChann
27
27
  ...params,
28
28
  };
29
29
  }
30
+
31
+ export const createSubChannelError400400 = {
32
+ status: 'error',
33
+ message: 'Channel not found.',
34
+ code: 400400,
35
+ data: {
36
+ detail: {
37
+ channelId: '63d0ccbc5defa46a1cab73a',
38
+ },
39
+ },
40
+ };
41
+
42
+ export const createSubChannelError400301 = {
43
+ status: 'error',
44
+ message: 'You are not a member of this channel.',
45
+ code: 400301,
46
+ data: {
47
+ detail: {
48
+ channelId: '63be2ef7827ef6bfc6798192',
49
+ },
50
+ },
51
+ };
@@ -0,0 +1,12 @@
1
+ import { user11 } from '.';
2
+
3
+ export const sessionResponse = {
4
+ data: {
5
+ accessToken: 'test-access-token',
6
+ refreshToken: 'test-refresh-token',
7
+ issuedAt: new Date(),
8
+ expiresAt: new Date(),
9
+ users: [user11],
10
+ files: [],
11
+ },
12
+ };