@amityco/ts-sdk 7.9.2 → 7.9.3-26ea573.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 (138) hide show
  1. package/.env +26 -26
  2. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/core/errors.d.ts +3 -1
  3. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/core/errors.d.ts.map +1 -1
  4. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/core/errors.js.map +1 -1
  5. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/client.d.ts +10 -0
  6. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/client.d.ts.map +1 -1
  7. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/client.js.map +1 -1
  8. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/user.d.ts +6 -0
  9. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/user.d.ts.map +1 -1
  10. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/user.js +6 -1
  11. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/user.js.map +1 -1
  12. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.d.ts +1 -0
  13. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.d.ts.map +1 -1
  14. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.js +1 -0
  15. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.js.map +1 -1
  16. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/activeUser.d.ts +1 -0
  17. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/activeUser.d.ts.map +1 -1
  18. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/activeUser.js +1 -0
  19. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/activeUser.js.map +1 -1
  20. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getBotToken.d.ts +21 -0
  21. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getBotToken.d.ts.map +1 -0
  22. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getBotToken.js +27 -0
  23. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getBotToken.js.map +1 -0
  24. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getCurrentUser.d.ts +2 -0
  25. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getCurrentUser.d.ts.map +1 -0
  26. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getCurrentUser.js +21 -0
  27. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getCurrentUser.js.map +1 -0
  28. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getCurrentUserType.d.ts +3 -0
  29. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getCurrentUserType.d.ts.map +1 -0
  30. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getCurrentUserType.js +16 -0
  31. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getCurrentUserType.js.map +1 -0
  32. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getToken.d.ts +1 -3
  33. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getToken.d.ts.map +1 -1
  34. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getToken.js.map +1 -1
  35. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getVisitorToken.d.ts +24 -0
  36. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getVisitorToken.d.ts.map +1 -0
  37. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getVisitorToken.js +30 -0
  38. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getVisitorToken.js.map +1 -0
  39. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.d.ts +4 -0
  40. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.d.ts.map +1 -1
  41. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.js +4 -0
  42. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.js.map +1 -1
  43. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/login.d.ts.map +1 -1
  44. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/login.js +4 -4
  45. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/login.js.map +1 -1
  46. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/loginAsBot.d.ts +24 -0
  47. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/loginAsBot.d.ts.map +1 -0
  48. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/loginAsBot.js +95 -0
  49. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/loginAsBot.js.map +1 -0
  50. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/loginAsVisitor.d.ts +26 -0
  51. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/loginAsVisitor.d.ts.map +1 -0
  52. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/loginAsVisitor.js +92 -0
  53. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/loginAsVisitor.js.map +1 -0
  54. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/renewal.d.ts.map +1 -1
  55. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/renewal.js +35 -2
  56. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/renewal.js.map +1 -1
  57. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setBotClientToken.d.ts +16 -0
  58. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setBotClientToken.d.ts.map +1 -0
  59. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setBotClientToken.js +29 -0
  60. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setBotClientToken.js.map +1 -0
  61. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setClientToken.d.ts +2 -1
  62. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setClientToken.d.ts.map +1 -1
  63. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setClientToken.js +2 -2
  64. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setClientToken.js.map +1 -1
  65. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setCurrentUser.d.ts +5 -0
  66. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setCurrentUser.d.ts.map +1 -0
  67. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setCurrentUser.js +9 -0
  68. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setCurrentUser.js.map +1 -0
  69. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setVisitorClientToken.d.ts +21 -0
  70. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setVisitorClientToken.d.ts.map +1 -0
  71. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setVisitorClientToken.js +34 -0
  72. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setVisitorClientToken.js.map +1 -0
  73. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/http.d.ts.map +1 -1
  74. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/http.js +4 -4
  75. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/http.js.map +1 -1
  76. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/tsconfig.tsbuildinfo +1 -1
  77. package/dist/@types/core/errors.d.ts +3 -1
  78. package/dist/@types/core/errors.d.ts.map +1 -1
  79. package/dist/@types/domains/client.d.ts +10 -0
  80. package/dist/@types/domains/client.d.ts.map +1 -1
  81. package/dist/@types/domains/user.d.ts +6 -0
  82. package/dist/@types/domains/user.d.ts.map +1 -1
  83. package/dist/@types/index.d.ts +1 -0
  84. package/dist/@types/index.d.ts.map +1 -1
  85. package/dist/client/api/activeUser.d.ts +1 -0
  86. package/dist/client/api/activeUser.d.ts.map +1 -1
  87. package/dist/client/api/getBotToken.d.ts +21 -0
  88. package/dist/client/api/getBotToken.d.ts.map +1 -0
  89. package/dist/client/api/getCurrentUser.d.ts +2 -0
  90. package/dist/client/api/getCurrentUser.d.ts.map +1 -0
  91. package/dist/client/api/getCurrentUserType.d.ts +3 -0
  92. package/dist/client/api/getCurrentUserType.d.ts.map +1 -0
  93. package/dist/client/api/getToken.d.ts +1 -3
  94. package/dist/client/api/getToken.d.ts.map +1 -1
  95. package/dist/client/api/getVisitorToken.d.ts +24 -0
  96. package/dist/client/api/getVisitorToken.d.ts.map +1 -0
  97. package/dist/client/api/index.d.ts +4 -0
  98. package/dist/client/api/index.d.ts.map +1 -1
  99. package/dist/client/api/login.d.ts.map +1 -1
  100. package/dist/client/api/loginAsBot.d.ts +24 -0
  101. package/dist/client/api/loginAsBot.d.ts.map +1 -0
  102. package/dist/client/api/loginAsVisitor.d.ts +26 -0
  103. package/dist/client/api/loginAsVisitor.d.ts.map +1 -0
  104. package/dist/client/api/renewal.d.ts.map +1 -1
  105. package/dist/client/utils/setBotClientToken.d.ts +16 -0
  106. package/dist/client/utils/setBotClientToken.d.ts.map +1 -0
  107. package/dist/client/utils/setClientToken.d.ts +2 -1
  108. package/dist/client/utils/setClientToken.d.ts.map +1 -1
  109. package/dist/client/utils/setCurrentUser.d.ts +5 -0
  110. package/dist/client/utils/setCurrentUser.d.ts.map +1 -0
  111. package/dist/client/utils/setVisitorClientToken.d.ts +21 -0
  112. package/dist/client/utils/setVisitorClientToken.d.ts.map +1 -0
  113. package/dist/core/transports/http.d.ts.map +1 -1
  114. package/dist/index.cjs.js +390 -37
  115. package/dist/index.esm.js +391 -38
  116. package/dist/index.umd.js +3 -3
  117. package/package.json +1 -1
  118. package/src/@types/core/errors.ts +2 -0
  119. package/src/@types/domains/client.ts +15 -0
  120. package/src/@types/domains/user.ts +8 -0
  121. package/src/@types/index.ts +1 -0
  122. package/src/client/api/activeUser.ts +1 -0
  123. package/src/client/api/getBotToken.ts +44 -0
  124. package/src/client/api/getCurrentUser.ts +32 -0
  125. package/src/client/api/getCurrentUserType.ts +23 -0
  126. package/src/client/api/getToken.ts +1 -1
  127. package/src/client/api/getVisitorToken.ts +47 -0
  128. package/src/client/api/index.ts +6 -0
  129. package/src/client/api/login.ts +5 -4
  130. package/src/client/api/loginAsBot.ts +126 -0
  131. package/src/client/api/loginAsVisitor.ts +131 -0
  132. package/src/client/api/renewal.ts +42 -2
  133. package/src/client/utils/setBotClientToken.ts +35 -0
  134. package/src/client/utils/setClientToken.ts +2 -2
  135. package/src/client/utils/setCurrentUser.ts +15 -0
  136. package/src/client/utils/setVisitorClientToken.ts +41 -0
  137. package/src/core/transports/http.ts +5 -4
  138. package/tsconfig.tsbuildinfo +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amityco/ts-sdk",
3
- "version": "7.9.2",
3
+ "version": "7.9.3-26ea573.0",
4
4
  "license": "CC-BY-ND-4.0",
5
5
  "author": "amity.co <developers@amity.co> (https://amity.co)",
6
6
  "description": "Amity Social Cloud Typescript SDK",
@@ -23,6 +23,8 @@ declare global {
23
23
  BAN_WORD_FOUND = 400308,
24
24
  LINK_NOT_ALLOWED = 400309,
25
25
  BUSINESS_ERROR = 500000,
26
+ VISITOR_PERMISSION_DENIED = 403999,
27
+ BOT_PERMISSION_DENIED = 403998,
26
28
  }
27
29
 
28
30
  const enum ClientError {
@@ -94,10 +94,20 @@ declare global {
94
94
  expiresAt: string;
95
95
  };
96
96
 
97
+ type SessionResponse = Tokens & {
98
+ users: Amity.RawUser[];
99
+ userType: Amity.UserType;
100
+ };
101
+
97
102
  type AccessTokenRenewal = {
98
103
  renew: () => void;
99
104
  renewWithAuthToken: (authToken: string) => void;
100
105
  unableToRetrieveAuthToken: () => void;
106
+ renewWithAuthSignature: ({
107
+ authSignature,
108
+ authSignatureExpiresAt,
109
+ }: Amity.ConnectClientAsVisitorParams) => void;
110
+ unableToRetrieveAuthSignature: () => void;
101
111
  };
102
112
 
103
113
  interface SessionHandler {
@@ -150,6 +160,11 @@ declare global {
150
160
  deviceId?: Amity.Device['deviceId'];
151
161
  };
152
162
 
163
+ type ConnectClientAsVisitorParams = {
164
+ authSignature?: string;
165
+ authSignatureExpiresAt?: string;
166
+ };
167
+
153
168
  type ConnectClientConfig = {
154
169
  disableRTE: boolean;
155
170
  };
@@ -1,5 +1,11 @@
1
1
  import { AmityUserSearchMatchType } from '~/userRepository';
2
2
 
3
+ export const enum UserTypeEnum {
4
+ SIGNED_IN = 'signed-in',
5
+ VISITOR = 'visitor',
6
+ BOT = 'bot',
7
+ }
8
+
3
9
  export {};
4
10
 
5
11
  declare global {
@@ -29,6 +35,8 @@ declare global {
29
35
  | 'onUnflagged'
30
36
  | 'onFlagCleared';
31
37
 
38
+ type UserType = `${UserTypeEnum}`;
39
+
32
40
  type RawUser = {
33
41
  _id: string;
34
42
  userId: string;
@@ -46,3 +46,4 @@ export * from './domains/pinnedPost';
46
46
  export * from './domains/liveReaction';
47
47
  export * from './domains/feed';
48
48
  export * from './domains/hashtag';
49
+ export * from './domains/user';
@@ -7,6 +7,7 @@ let activeUser: Amity.ActiveUser | null = null;
7
7
  */
8
8
  /**
9
9
  * for internal use
10
+ * @deprecated please use getCurrentUser api instead.
10
11
  */
11
12
  export const getActiveUser = () => {
12
13
  if (!activeUser) {
@@ -0,0 +1,44 @@
1
+ import { getActiveClient } from './activeClient';
2
+
3
+ import { getDeviceInfo } from '~/core/device';
4
+
5
+ /**
6
+ * Retrieves a pair of {@link Amity.Tokens} necessary for connection
7
+ *
8
+ * @param param get bot token param
9
+ * @param params.deviceId The user's device Id (can be manually set for native users)
10
+ * @param options get bot token options
11
+ * @param options.setAccessTokenCookie The authentication token - necessary when network option is set to secure
12
+ * @return The accessToken for the given userId
13
+ *
14
+ * @category Client API
15
+ * @hidden
16
+ */
17
+ export const getBotToken = async ({
18
+ params,
19
+ options,
20
+ }: {
21
+ params: { deviceId: string };
22
+ options?: { setAccessTokenCookie?: boolean };
23
+ }) => {
24
+ const client = getActiveClient();
25
+ client.log('client/api/getBotToken');
26
+
27
+ const deviceInfo = getDeviceInfo();
28
+
29
+ const { data } = await client.http.post<Amity.SessionResponse>(
30
+ '/api/v5/sessions/bot',
31
+ {
32
+ ...params,
33
+ deviceInfo,
34
+ },
35
+ {
36
+ headers: {
37
+ 'X-API-Key': client.apiKey,
38
+ 'set-access-token-cookie': options?.setAccessTokenCookie || false,
39
+ },
40
+ },
41
+ );
42
+
43
+ return data;
44
+ };
@@ -0,0 +1,32 @@
1
+ import { ASCError } from '~/core/errors';
2
+ import { getActiveClient } from './activeClient';
3
+ import { pullFromCache } from '~/cache/api';
4
+ import { userLinkedObject } from '~/utils/linkedObject/userLinkedObject';
5
+
6
+ /* begin_public_function
7
+ id: client.get_current_user
8
+ */
9
+ export const getCurrentUser = (): Amity.User => {
10
+ const client = getActiveClient();
11
+
12
+ if (!client) {
13
+ throw new ASCError(
14
+ 'Connect client first',
15
+ Amity.ClientError.UNKNOWN_ERROR,
16
+ Amity.ErrorLevel.FATAL,
17
+ );
18
+ }
19
+
20
+ const cache = pullFromCache<Amity.User>(['user', 'get', client.userId])?.data!;
21
+
22
+ if (!cache) {
23
+ throw new ASCError(
24
+ 'Connect client first',
25
+ Amity.ClientError.UNKNOWN_ERROR,
26
+ Amity.ErrorLevel.FATAL,
27
+ );
28
+ }
29
+
30
+ return userLinkedObject(cache);
31
+ };
32
+ /* end_public_function */
@@ -0,0 +1,23 @@
1
+ import { ASCError } from '~/core/errors';
2
+
3
+ let currentUserType: Amity.UserType | null = null;
4
+
5
+ /* begin_public_function
6
+ id: client.get_current_user_type
7
+ */
8
+ export const getCurrentUserType = () => {
9
+ if (!currentUserType) {
10
+ throw new ASCError(
11
+ 'Connect client first',
12
+ Amity.ClientError.UNKNOWN_ERROR,
13
+ Amity.ErrorLevel.FATAL,
14
+ );
15
+ }
16
+
17
+ return currentUserType!;
18
+ };
19
+ /* end_public_function */
20
+
21
+ export const setCurrentUserType = (userType: Amity.UserType) => {
22
+ currentUserType = userType;
23
+ };
@@ -31,7 +31,7 @@ export const getToken = async ({
31
31
 
32
32
  const deviceInfo = getDeviceInfo();
33
33
 
34
- const { data } = await client.http.post<Amity.Tokens & { users: Amity.InternalUser[] }>(
34
+ const { data } = await client.http.post<Amity.SessionResponse>(
35
35
  '/api/v5/sessions',
36
36
  {
37
37
  ...params,
@@ -0,0 +1,47 @@
1
+ import { getActiveClient } from './activeClient';
2
+
3
+ import { getDeviceInfo } from '~/core/device';
4
+
5
+ /**
6
+ * Retrieves a pair of {@link Amity.Tokens} necessary for connection
7
+ *
8
+ * @param params get visitor token param
9
+ * @param params.deviceId The user's device Id (can be manually set for native users)
10
+ * @param params.authSignature The authenitcation signature - necessary when network option is set to secure
11
+ * @param params.authSignatureExpiresAt Expire time of the authenitcation signature
12
+ * @param options get bot token options
13
+ * @param options.setAccessTokenCookie The authentication token - necessary when network option is set to secure
14
+ * @return The accessToken for the given userId
15
+ *
16
+ *
17
+ * @category Client API
18
+ * @hidden
19
+ */
20
+ export const getVisitorToken = async ({
21
+ params,
22
+ options,
23
+ }: {
24
+ params: Amity.ConnectClientAsVisitorParams & { deviceId: string };
25
+ options?: { setAccessTokenCookie?: boolean };
26
+ }) => {
27
+ const client = getActiveClient();
28
+ client.log('client/api/getVisitorToken', params);
29
+
30
+ const deviceInfo = getDeviceInfo();
31
+
32
+ const { data } = await client.http.post<Amity.SessionResponse>(
33
+ '/api/v5/sessions/visitor',
34
+ {
35
+ ...params,
36
+ deviceInfo,
37
+ },
38
+ {
39
+ headers: {
40
+ 'X-API-Key': client.apiKey,
41
+ 'set-access-token-cookie': options?.setAccessTokenCookie || false,
42
+ },
43
+ },
44
+ );
45
+
46
+ return data;
47
+ };
@@ -25,3 +25,9 @@ export * from './fetchLinkPreview';
25
25
  export * from './getSocialSettings';
26
26
 
27
27
  export * from './getShareableLinkConfiguration';
28
+
29
+ export * from './loginAsVisitor';
30
+ export * from './loginAsBot';
31
+
32
+ export * from './getCurrentUser';
33
+ export * from './getCurrentUserType';
@@ -2,7 +2,6 @@
2
2
  import { modifyMqttConnection } from '~/client/utils/modifyMqttConnection';
3
3
  /* eslint-disable require-atomic-updates */
4
4
  import { getDeviceId } from '~/core/device';
5
- import { proxyWebsocketEvents } from '~/core/events';
6
5
  import { onChannelDeleted } from '~/channelRepository/events/onChannelDeleted';
7
6
  import { onChannelMemberBanned } from '~/channelRepository/events/onChannelMemberBanned';
8
7
 
@@ -29,6 +28,8 @@ import { removeChannelMarkerCache } from '../utils/removeChannelMarkerCache';
29
28
  import { initializeMessagePreviewSetting } from '../utils/messagePreviewEngine';
30
29
  import { ASCError } from '~/core/errors';
31
30
  import SessionWatcher from '../utils/SessionWatcher';
31
+ import { setCurrentUserType } from './getCurrentUserType';
32
+ import { setCurrentUser } from '../utils/setCurrentUser';
32
33
 
33
34
  /*
34
35
  * declared earlier to accomodate case when logging in with a different user
@@ -91,7 +92,7 @@ export const login = async (
91
92
  const defaultDeviceId = await getDeviceId();
92
93
 
93
94
  try {
94
- const { users } = await setClientToken({
95
+ const { users, userType } = await setClientToken({
95
96
  params: {
96
97
  ...params,
97
98
  displayName: params?.displayName,
@@ -117,7 +118,7 @@ export const login = async (
117
118
  return false;
118
119
  }
119
120
 
120
- if (user.isGlobalBanned) {
121
+ if (user.isGlobalBan) {
121
122
  terminateClient(Amity.TokenTerminationReason.GLOBAL_BAN);
122
123
  return false;
123
124
  }
@@ -132,7 +133,7 @@ export const login = async (
132
133
  */
133
134
  unsubWatcher = client.accessTokenExpiryWatcher(sessionHandler);
134
135
 
135
- setActiveUser(user);
136
+ setCurrentUser({ user, userType });
136
137
  } catch (error) {
137
138
  /*
138
139
  * if getting token failed session state reverts to initial state when app
@@ -0,0 +1,126 @@
1
+ /* eslint-disable no-param-reassign */
2
+ import { modifyMqttConnection } from '~/client/utils/modifyMqttConnection';
3
+ /* eslint-disable require-atomic-updates */
4
+ import { getDeviceId } from '~/core/device';
5
+ import { logout } from './logout';
6
+
7
+ import { getActiveClient } from './activeClient';
8
+ import { terminateClient } from './terminateClient';
9
+ import { setActiveUser } from './activeUser';
10
+
11
+ import { onTokenExpired } from '../events/onTokenExpired';
12
+ import { onTokenTerminated } from '../events/onTokenTerminated';
13
+ import { initializeMessagePreviewSetting } from '../utils/messagePreviewEngine';
14
+
15
+ import SessionWatcher from '../utils/SessionWatcher';
16
+ import { setBotClientToken } from '../utils/setBotClientToken';
17
+ import { setCurrentUserType } from './getCurrentUserType';
18
+ import { setCurrentUser } from '../utils/setCurrentUser';
19
+
20
+ /*
21
+ * declared earlier to accomodate case when logging in with a different user
22
+ * than the one already connected, in which case the existing subscriptions need
23
+ * to be cleared
24
+ */
25
+ const subscriptions: Amity.Unsubscriber[] = [];
26
+
27
+ /* begin_public_function
28
+ id: client.loginAsBot
29
+ */
30
+ /**
31
+ * ```js
32
+ * import { loginAsBot } from '@amityco/ts-sdk/client/api'
33
+ * const success = await loginAsBot({
34
+ sessionHandler: {
35
+ sessionWillRenewAccessToken(renewal: Amity.AccessTokenRenewal) {
36
+ ...
37
+ }
38
+ * })
39
+ * ```
40
+ *
41
+ * Connects an {@link Amity.Client} instance to ASC servers
42
+ *
43
+ * @param params. the connect parameters
44
+ * @param params.sessionHandler
45
+ * @returns a success boolean if connected
46
+ *
47
+ * @category Client API
48
+ * @async
49
+ */
50
+
51
+ export const loginAsBot = async (params: {
52
+ sessionHandler: Amity.SessionHandler;
53
+ }): Promise<boolean> => {
54
+ const client = getActiveClient();
55
+ let unsubWatcher: Amity.Unsubscriber;
56
+
57
+ client.log('client/api/connectClient', {
58
+ apiKey: client.apiKey,
59
+ sessionState: client.sessionState,
60
+ });
61
+
62
+ // generate deviceId
63
+ const deviceId = await getDeviceId();
64
+ let user: Amity.RawUser;
65
+
66
+ try {
67
+ const { users, userType } = await setBotClientToken({
68
+ params: {
69
+ deviceId,
70
+ },
71
+ options: {
72
+ setAccessTokenCookie: true,
73
+ },
74
+ });
75
+
76
+ [user] = users;
77
+
78
+ client.userId = user.userId;
79
+
80
+ client.sessionHandler = params.sessionHandler;
81
+
82
+ /*
83
+ * Cannot push to subscriptions as watcher needs to continue working even if
84
+ * token expires
85
+ */
86
+ unsubWatcher = client.accessTokenExpiryWatcher(params.sessionHandler);
87
+
88
+ setCurrentUser({ user, userType });
89
+ } catch (error) {
90
+ /*
91
+ * if getting token failed session state reverts to initial state when app
92
+ * is first launched
93
+ */
94
+ SessionWatcher.getInstance().setSessionState(Amity.SessionStates.NOT_LOGGED_IN);
95
+
96
+ // pass error down tree so the calling function handle it
97
+ throw error;
98
+ }
99
+
100
+ await initializeMessagePreviewSetting();
101
+
102
+ if (subscriptions.length === 0) {
103
+ // handling internal SDK events
104
+ subscriptions.push(
105
+ onTokenTerminated(_ => {
106
+ terminateClient();
107
+
108
+ subscriptions.forEach(fn => fn());
109
+
110
+ unsubWatcher();
111
+ }),
112
+
113
+ onTokenExpired(state => {
114
+ SessionWatcher.getInstance().setSessionState(state);
115
+
116
+ logout();
117
+
118
+ subscriptions.forEach(fn => fn());
119
+ }),
120
+ );
121
+ }
122
+
123
+ return true;
124
+ };
125
+
126
+ /* end_public_function */
@@ -0,0 +1,131 @@
1
+ /* eslint-disable no-param-reassign */
2
+ import { modifyMqttConnection } from '~/client/utils/modifyMqttConnection';
3
+ /* eslint-disable require-atomic-updates */
4
+ import { getDeviceId } from '~/core/device';
5
+ import { logout } from './logout';
6
+
7
+ import { getActiveClient } from './activeClient';
8
+ import { terminateClient } from './terminateClient';
9
+ import { setActiveUser } from './activeUser';
10
+
11
+ import { onTokenExpired } from '../events/onTokenExpired';
12
+ import { onTokenTerminated } from '../events/onTokenTerminated';
13
+ import { initializeMessagePreviewSetting } from '../utils/messagePreviewEngine';
14
+
15
+ import SessionWatcher from '../utils/SessionWatcher';
16
+ import { setVisitorClientToken } from '../utils/setVisitorClientToken';
17
+ import { setCurrentUserType } from './getCurrentUserType';
18
+ import { setCurrentUser } from '../utils/setCurrentUser';
19
+
20
+ /*
21
+ * declared earlier to accomodate case when logging in with a different user
22
+ * than the one already connected, in which case the existing subscriptions need
23
+ * to be cleared
24
+ */
25
+ const subscriptions: Amity.Unsubscriber[] = [];
26
+
27
+ /* begin_public_function
28
+ id: client.loginAsVisitor
29
+ */
30
+ /**
31
+ * ```js
32
+ * import { loginAsVisitor } from '@amityco/ts-sdk/client/api'
33
+ * const success = await loginAsVisitor({
34
+ sessionHandler: {
35
+ sessionWillRenewAccessToken(renewal: Amity.AccessTokenRenewal) {
36
+ ...
37
+ }
38
+ * })
39
+ * ```
40
+ *
41
+ * Connects an {@link Amity.Client} instance to ASC servers
42
+ *
43
+ * @param params. the connect parameters
44
+ * @param params.authSignature The authenitcation signature - necessary when network option is set to secure
45
+ * @param params.authSignatureExpiresAt Expire time of the authenitcation signature
46
+ * @param params.sessionHandler
47
+ * @returns a success boolean if connected
48
+ *
49
+ * @category Client API
50
+ * @async
51
+ */
52
+
53
+ export const loginAsVisitor = async (
54
+ params: Amity.ConnectClientAsVisitorParams & {
55
+ sessionHandler: Amity.SessionHandler;
56
+ },
57
+ ): Promise<boolean> => {
58
+ const client = getActiveClient();
59
+ let unsubWatcher: Amity.Unsubscriber;
60
+ client.log('client/api/connectClient', {
61
+ apiKey: client.apiKey,
62
+ sessionState: client.sessionState,
63
+ ...params,
64
+ });
65
+
66
+ // generate deviceId
67
+ const deviceId = await getDeviceId();
68
+ let user: Amity.RawUser;
69
+
70
+ try {
71
+ const { users, userType } = await setVisitorClientToken({
72
+ params: {
73
+ ...params,
74
+ deviceId,
75
+ },
76
+ options: {
77
+ setAccessTokenCookie: true,
78
+ },
79
+ });
80
+
81
+ [user] = users;
82
+
83
+ client.userId = user.userId;
84
+
85
+ client.sessionHandler = params.sessionHandler;
86
+
87
+ /*
88
+ * Cannot push to subscriptions as watcher needs to continue working even if
89
+ * token expires
90
+ */
91
+ unsubWatcher = client.accessTokenExpiryWatcher(params.sessionHandler);
92
+
93
+ setCurrentUser({ user, userType });
94
+ } catch (error) {
95
+ /*
96
+ * if getting token failed session state reverts to initial state when app
97
+ * is first launched
98
+ */
99
+ SessionWatcher.getInstance().setSessionState(Amity.SessionStates.NOT_LOGGED_IN);
100
+
101
+ // pass error down tree so the calling function handle it
102
+ throw error;
103
+ }
104
+
105
+ await initializeMessagePreviewSetting();
106
+
107
+ if (subscriptions.length === 0) {
108
+ // handling internal SDK events
109
+ subscriptions.push(
110
+ onTokenTerminated(_ => {
111
+ terminateClient();
112
+
113
+ subscriptions.forEach(fn => fn());
114
+
115
+ unsubWatcher();
116
+ }),
117
+
118
+ onTokenExpired(state => {
119
+ SessionWatcher.getInstance().setSessionState(state);
120
+
121
+ logout();
122
+
123
+ subscriptions.forEach(fn => fn());
124
+ }),
125
+ );
126
+ }
127
+
128
+ return true;
129
+ };
130
+
131
+ /* end_public_function */
@@ -1,10 +1,12 @@
1
1
  import { getDeviceId } from '~/core/device';
2
2
  import { ACCESS_TOKEN_WATCHER_INTERVAL } from '~/utils/constants';
3
3
 
4
- import { getActiveUser } from './activeUser';
5
4
  import { setClientToken as refreshToken } from '../utils/setClientToken';
5
+ import { setVisitorClientToken as refreshVisitorToken } from '../utils/setVisitorClientToken';
6
6
  import { getActiveClient } from './activeClient';
7
7
  import { login } from './login';
8
+ import { loginAsVisitor } from './loginAsVisitor';
9
+ import { getCurrentUser } from './getCurrentUser';
8
10
 
9
11
  /* begin_public_function
10
12
  id: client.renew_access_token
@@ -30,7 +32,7 @@ export const renewal = (): Amity.AccessTokenRenewal => {
30
32
  * Per instance of Renewal, only one renewal is allowed
31
33
  */
32
34
  const renewToken = async (authToken?: Amity.ConnectClientParams['authToken']): Promise<void> => {
33
- const { userId, displayName } = getActiveUser();
35
+ const { userId, displayName } = getCurrentUser();
34
36
  const deviceId = await getDeviceId();
35
37
 
36
38
  const params = { userId, displayName, authToken, deviceId };
@@ -53,6 +55,30 @@ export const renewal = (): Amity.AccessTokenRenewal => {
53
55
  if (renewTimeoutId) clearTimeout(renewTimeoutId);
54
56
  };
55
57
 
58
+ const renewVisitorToken = async ({
59
+ authSignature,
60
+ authSignatureExpiresAt,
61
+ }: Amity.ConnectClientAsVisitorParams): Promise<void> => {
62
+ const deviceId = await getDeviceId();
63
+
64
+ if (client.sessionState === Amity.SessionStates.TOKEN_EXPIRED && client.sessionHandler) {
65
+ await loginAsVisitor({ sessionHandler: client.sessionHandler });
66
+ } else {
67
+ // about to expire
68
+
69
+ await refreshVisitorToken({
70
+ params: { authSignature, authSignatureExpiresAt, deviceId },
71
+ options: {
72
+ setAccessTokenCookie: true,
73
+ },
74
+ });
75
+ }
76
+
77
+ tokenRenewed = true;
78
+
79
+ if (renewTimeoutId) clearTimeout(renewTimeoutId);
80
+ };
81
+
56
82
  return {
57
83
  renew: () => {
58
84
  if (tokenRenewed) {
@@ -75,6 +101,20 @@ export const renewal = (): Amity.AccessTokenRenewal => {
75
101
  client.sessionHandler?.sessionWillRenewAccessToken(renewal());
76
102
  }, ACCESS_TOKEN_WATCHER_INTERVAL);
77
103
  },
104
+
105
+ renewWithAuthSignature: (params: Amity.ConnectClientAsVisitorParams) => {
106
+ if (tokenRenewed) {
107
+ console.log("'renew' method can be called only once per renewal instance");
108
+ return;
109
+ }
110
+ renewVisitorToken(params);
111
+ },
112
+
113
+ unableToRetrieveAuthSignature: () => {
114
+ renewTimeoutId = setTimeout(() => {
115
+ client.sessionHandler?.sessionWillRenewAccessToken(renewal());
116
+ }, ACCESS_TOKEN_WATCHER_INTERVAL);
117
+ },
78
118
  };
79
119
  };
80
120
  /* end_public_function */
@@ -0,0 +1,35 @@
1
+ import { getActiveClient } from '../api/activeClient';
2
+ import { setSessionState } from '../api/setSessionState';
3
+ import { getBotToken } from '../api/getBotToken';
4
+
5
+ /**
6
+ * A util to set or refresh client token
7
+ * @param options get bot token options
8
+ * @param options.setAccessTokenCookie The authentication token - necessary when network option is set to secure
9
+ * @returns token & user info
10
+ *
11
+ * @category private
12
+ * @async
13
+ */
14
+ export const setBotClientToken = async (params: Parameters<typeof getBotToken>[0]) => {
15
+ const client = getActiveClient();
16
+ // begin establishing session
17
+ setSessionState(Amity.SessionStates.ESTABLISHING);
18
+
19
+ const { accessToken, users, expiresAt, issuedAt, userType } = await getBotToken(params);
20
+
21
+ // manually setup the token for http transport
22
+ client.http.defaults.headers.common.Authorization = `Bearer ${accessToken}`;
23
+
24
+ client.http.defaults.metadata = {
25
+ tokenExpiry: expiresAt,
26
+ isGlobalBanned: false,
27
+ isUserDeleted: false,
28
+ };
29
+
30
+ client.token = { accessToken, issuedAt, expiresAt };
31
+
32
+ setSessionState(Amity.SessionStates.ESTABLISHED);
33
+
34
+ return { accessToken, users, userType };
35
+ };
@@ -19,7 +19,7 @@ export const setClientToken = async (params: Parameters<typeof getToken>[0]) =>
19
19
  // begin establishing session
20
20
  setSessionState(Amity.SessionStates.ESTABLISHING);
21
21
 
22
- const { accessToken, users, expiresAt, issuedAt } = await getToken(params);
22
+ const { accessToken, users, expiresAt, issuedAt, userType } = await getToken(params);
23
23
 
24
24
  // manually setup the token for http transport
25
25
  client.http.defaults.headers.common.Authorization = `Bearer ${accessToken}`;
@@ -42,5 +42,5 @@ export const setClientToken = async (params: Parameters<typeof getToken>[0]) =>
42
42
 
43
43
  setSessionState(Amity.SessionStates.ESTABLISHED);
44
44
 
45
- return { accessToken, users };
45
+ return { accessToken, users, userType };
46
46
  };