@amityco/ts-sdk 7.8.3-b5109db.0 → 7.8.4-0055f5bc.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 (108) hide show
  1. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/core/payload.d.ts +1 -1
  2. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/core/payload.d.ts.map +1 -1
  3. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/core/payload.js.map +1 -1
  4. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/client.d.ts +0 -2
  5. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/client.d.ts.map +1 -1
  6. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/client.js.map +1 -1
  7. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.d.ts +0 -1
  8. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.d.ts.map +1 -1
  9. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.js.map +1 -1
  10. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/categoryRepository/internalApi/queryCategories.js +2 -2
  11. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/categoryRepository/internalApi/queryCategories.js.map +1 -1
  12. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/createClient.d.ts.map +1 -1
  13. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/createClient.js +1 -2
  14. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/createClient.js.map +1 -1
  15. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/isConnected.d.ts.map +1 -1
  16. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/isConnected.js +1 -5
  17. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/isConnected.js.map +1 -1
  18. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/login.d.ts.map +1 -1
  19. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/login.js +0 -6
  20. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/login.js.map +1 -1
  21. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/logout.d.ts.map +1 -1
  22. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/logout.js +2 -9
  23. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/logout.js.map +1 -1
  24. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/resumeSession.d.ts.map +1 -1
  25. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/resumeSession.js +0 -13
  26. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/resumeSession.js.map +1 -1
  27. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/tests/createClient.test.js +0 -4
  28. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/tests/createClient.test.js.map +1 -1
  29. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/tests/login.test.js +1 -7
  30. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/tests/login.test.js.map +1 -1
  31. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/tests/logout.test.js +0 -8
  32. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/tests/logout.test.js.map +1 -1
  33. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/tests/resumeSession.test.js +1 -8
  34. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/tests/resumeSession.test.js.map +1 -1
  35. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/tests/terminateClient.test.js +0 -3
  36. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/tests/terminateClient.test.js.map +1 -1
  37. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setClientToken.d.ts.map +1 -1
  38. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setClientToken.js +0 -3
  39. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/utils/setClientToken.js.map +1 -1
  40. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/events.d.ts +0 -11
  41. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/events.d.ts.map +1 -1
  42. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/events.js +0 -17
  43. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/events.js.map +1 -1
  44. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/index.d.ts +0 -1
  45. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/index.d.ts.map +1 -1
  46. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/index.js +0 -1
  47. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/index.js.map +1 -1
  48. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/api/queryGlobalFeed.d.ts.map +1 -1
  49. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/api/queryGlobalFeed.js +4 -2
  50. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/api/queryGlobalFeed.js.map +1 -1
  51. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getGlobalFeed/PaginationController.d.ts.map +1 -1
  52. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getGlobalFeed/PaginationController.js +2 -2
  53. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getGlobalFeed/PaginationController.js.map +1 -1
  54. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/utils/tests/client.d.ts.map +1 -1
  55. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/utils/tests/client.js +1 -6
  56. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/utils/tests/client.js.map +1 -1
  57. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/tsconfig.tsbuildinfo +1 -1
  58. package/dist/@types/core/payload.d.ts +1 -1
  59. package/dist/@types/core/payload.d.ts.map +1 -1
  60. package/dist/@types/domains/client.d.ts +0 -2
  61. package/dist/@types/domains/client.d.ts.map +1 -1
  62. package/dist/@types/domains/feed.d.ts +0 -1
  63. package/dist/@types/domains/feed.d.ts.map +1 -1
  64. package/dist/client/api/createClient.d.ts.map +1 -1
  65. package/dist/client/api/isConnected.d.ts.map +1 -1
  66. package/dist/client/api/login.d.ts.map +1 -1
  67. package/dist/client/api/logout.d.ts.map +1 -1
  68. package/dist/client/api/resumeSession.d.ts.map +1 -1
  69. package/dist/client/utils/setClientToken.d.ts.map +1 -1
  70. package/dist/core/events.d.ts +0 -11
  71. package/dist/core/events.d.ts.map +1 -1
  72. package/dist/core/transports/index.d.ts +0 -1
  73. package/dist/core/transports/index.d.ts.map +1 -1
  74. package/dist/feedRepository/api/queryGlobalFeed.d.ts.map +1 -1
  75. package/dist/feedRepository/observers/getGlobalFeed/PaginationController.d.ts.map +1 -1
  76. package/dist/index.cjs.js +13 -95
  77. package/dist/index.esm.js +13 -94
  78. package/dist/index.umd.js +3 -4
  79. package/dist/utils/tests/client.d.ts.map +1 -1
  80. package/package.json +3 -5
  81. package/src/@types/core/payload.ts +1 -1
  82. package/src/@types/domains/client.ts +0 -1
  83. package/src/@types/domains/feed.ts +0 -1
  84. package/src/categoryRepository/internalApi/queryCategories.ts +2 -2
  85. package/src/client/api/createClient.ts +0 -1
  86. package/src/client/api/isConnected.ts +1 -8
  87. package/src/client/api/login.ts +0 -6
  88. package/src/client/api/logout.ts +1 -8
  89. package/src/client/api/resumeSession.ts +0 -12
  90. package/src/client/api/tests/createClient.test.ts +0 -6
  91. package/src/client/api/tests/login.test.ts +42 -51
  92. package/src/client/api/tests/logout.test.ts +1 -12
  93. package/src/client/api/tests/resumeSession.test.ts +102 -111
  94. package/src/client/api/tests/terminateClient.test.ts +0 -6
  95. package/src/client/utils/setClientToken.ts +0 -3
  96. package/src/core/events.ts +0 -18
  97. package/src/core/transports/index.ts +0 -1
  98. package/src/feedRepository/api/queryGlobalFeed.ts +3 -2
  99. package/src/feedRepository/observers/getGlobalFeed/PaginationController.ts +3 -2
  100. package/src/utils/tests/client.ts +1 -7
  101. package/tsconfig.tsbuildinfo +1 -1
  102. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/ws.d.ts +0 -27
  103. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/ws.d.ts.map +0 -1
  104. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/ws.js +0 -53
  105. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/core/transports/ws.js.map +0 -1
  106. package/dist/core/transports/ws.d.ts +0 -27
  107. package/dist/core/transports/ws.d.ts.map +0 -1
  108. package/src/core/transports/ws.ts +0 -60
@@ -1 +1 @@
1
- {"version":3,"file":"resumeSession.d.ts","sourceRoot":"","sources":["../../../src/client/api/resumeSession.ts"],"names":[],"mappings":"AA0CA,UAAU,MAAM;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AA+DD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,aAAa,WAChB,MAAM,kBACE,MAAM,cAAc,WAC3B,MAAM,mBAAmB,KACjC,QAAQ,OAAO,CA+IjB,CAAC"}
1
+ {"version":3,"file":"resumeSession.d.ts","sourceRoot":"","sources":["../../../src/client/api/resumeSession.ts"],"names":[],"mappings":"AA0CA,UAAU,MAAM;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AA4DD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,aAAa,WAChB,MAAM,kBACE,MAAM,cAAc,WAC3B,MAAM,mBAAmB,KACjC,QAAQ,OAAO,CAsIjB,CAAC"}
@@ -1,8 +1,6 @@
1
1
  import jwtDecode from 'jwt-decode';
2
2
  /* eslint-disable no-param-reassign */
3
3
  import { modifyMqttConnection } from '~/client/utils/modifyMqttConnection';
4
- /* eslint-disable require-atomic-updates */
5
- import { proxyWebsocketEvents } from '~/core/events';
6
4
  import { onChannelDeleted } from '~/channelRepository/events/onChannelDeleted';
7
5
  import { onChannelMemberBanned } from '~/channelRepository/events/onChannelMemberBanned';
8
6
  import { markReadEngineOnLoginHandler } from '~/subChannelRepository/utils/markReadEngine';
@@ -60,9 +58,6 @@ const validateAccessToken = async ({ token, userId }) => {
60
58
  isGlobalBanned: false,
61
59
  isUserDeleted: false,
62
60
  };
63
- // manually setup the token for ws transport
64
- if (client.ws)
65
- client.ws.io.opts.query = { token: token.accessToken };
66
61
  client.token = token;
67
62
  setSessionState("established" /* Amity.SessionStates.ESTABLISHED */);
68
63
  return user;
@@ -92,7 +87,6 @@ const validateAccessToken = async ({ token, userId }) => {
92
87
  * @async
93
88
  */
94
89
  export const resumeSession = async (params, sessionHandler, config) => {
95
- var _a;
96
90
  const client = getActiveClient();
97
91
  let unsubWatcher;
98
92
  client.log('client/api/resumeSession', Object.assign({ apiKey: client.apiKey, sessionState: client.sessionState }, params));
@@ -103,9 +97,6 @@ export const resumeSession = async (params, sessionHandler, config) => {
103
97
  if (client.mqtt && client.mqtt.connected) {
104
98
  client.mqtt.disconnect();
105
99
  }
106
- if (client.ws && client.ws.connected) {
107
- client.ws.disconnect();
108
- }
109
100
  // Clear existing subscriptions
110
101
  subscriptions.forEach(fn => fn());
111
102
  subscriptions = [];
@@ -131,10 +122,6 @@ export const resumeSession = async (params, sessionHandler, config) => {
131
122
  terminateClient("globalBan" /* Amity.TokenTerminationReason.GLOBAL_BAN */);
132
123
  return false;
133
124
  }
134
- // FIXME: events are duplicated if connectClient is called few times without disconnectClient
135
- // wire websocket events to our event emitter
136
- proxyWebsocketEvents(client.ws, client.emitter);
137
- (_a = client.ws) === null || _a === void 0 ? void 0 : _a.open();
138
125
  client.userId = user.userId;
139
126
  client.sessionHandler = sessionHandler;
140
127
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"resumeSession.js","sourceRoot":"","sources":["../../../src/client/api/resumeSession.ts"],"names":[],"mappings":"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","sourcesContent":["import jwtDecode from 'jwt-decode';\n/* eslint-disable no-param-reassign */\nimport { modifyMqttConnection } from '~/client/utils/modifyMqttConnection';\n/* eslint-disable require-atomic-updates */\nimport { proxyWebsocketEvents } from '~/core/events';\nimport { onChannelDeleted } from '~/channelRepository/events/onChannelDeleted';\nimport { onChannelMemberBanned } from '~/channelRepository/events/onChannelMemberBanned';\n\nimport { markReadEngineOnLoginHandler } from '~/subChannelRepository/utils/markReadEngine';\nimport { onUserDeleted } from '~/userRepository/events/onUserDeleted';\n\nimport analyticsEngineOnLoginHandler from '~/analytic/utils/analyticsEngineOnLoginHandler';\nimport readReceiptSyncEngineOnLoginHandler from '~/client/utils/ReadReceiptSync/readReceiptSyncEngineOnLoginHandler';\nimport legacyReadReceiptSyncEngineOnLoginHandler from '~/client/utils/ReadReceiptSync/legacyReadReceiptSyncEngineOnLoginHandler';\nimport objectResolverEngineOnLoginHandler from '~/client/utils/ObjectResolver/objectResolverEngineOnLoginHandler';\nimport { logout } from './logout';\n\nimport { getActiveClient } from './activeClient';\nimport { terminateClient } from './terminateClient';\nimport { setActiveUser } from './activeUser';\nimport { setSessionState } from './setSessionState';\n\nimport { onClientBanned } from '../events';\nimport { onTokenExpired } from '../events/onTokenExpired';\nimport { onTokenTerminated } from '../events/onTokenTerminated';\n\nimport { removeChannelMarkerCache } from '../utils/removeChannelMarkerCache';\nimport { initializeMessagePreviewSetting } from '../utils/messagePreviewEngine';\nimport { ASCError } from '~/core/errors';\nimport SessionWatcher from '../utils/SessionWatcher';\n\n/*\n * declared earlier to accomodate case when logging in with a different user\n * than the one already connected, in which case the existing subscriptions need\n * to be cleared\n */\nlet subscriptions: Amity.Unsubscriber[] = [];\n\nasync function runMqtt() {\n await modifyMqttConnection();\n}\n\ninterface Params {\n userId: string;\n token: {\n issuedAt: string;\n expiresAt: string;\n accessToken: string;\n };\n}\n\nconst isSameUserId = (token: Params['token']['accessToken']) => {\n const client = getActiveClient();\n\n const decoded = jwtDecode<{\n user: {\n userId: string;\n publicUserId: string;\n deviceInfo: Amity.Device['deviceInfo'];\n networkId: string;\n displayName: string;\n refreshToken: string;\n };\n }>(token);\n\n return decoded?.user?.publicUserId === client.userId;\n};\n\nconst validateAccessToken = async ({ token, userId }: Params) => {\n const client = getActiveClient();\n // begin establishing session\n setSessionState(Amity.SessionStates.ESTABLISHING);\n\n const {\n data: { users },\n } = await client.http.get(`/api/v3/users/${userId}`, {\n headers: {\n Authorization: `Bearer ${token.accessToken}`,\n },\n });\n\n const user = users.find((u: Amity.User) => u.userId === userId);\n\n client.http.defaults.headers.common.Authorization = `Bearer ${token.accessToken}`;\n\n client.http.defaults.metadata = {\n tokenExpiry: token.expiresAt,\n isGlobalBanned: false,\n isUserDeleted: false,\n };\n\n client.upload.defaults.headers.common.Authorization = `Bearer ${token.accessToken}`;\n\n client.upload.defaults.metadata = {\n tokenExpiry: token.expiresAt,\n isGlobalBanned: false,\n isUserDeleted: false,\n };\n\n // manually setup the token for ws transport\n if (client.ws) client.ws.io.opts.query = { token: token.accessToken };\n\n client.token = token;\n\n setSessionState(Amity.SessionStates.ESTABLISHED);\n\n return user;\n};\n\n/* begin_public_function\n id: client.resumeSession\n*/\n/**\n * ```js\n * import { resumeSession } from '@amityco/ts-sdk/client/api'\n * const success = await resumeSession({\n * userId: 'XYZ123456789',\n * token: { accessToken: 'abc123', issuedAt: '2023-01-01T00:00:00Z', expiresAt: '2023-01-02T00:00:00Z' }\n * })\n * ```\n *\n * Connects an {@link Amity.Client} instance to ASC servers using an existing access token\n *\n * @param params the connect parameters\n * @param params.userId the user ID for the current session\n * @param params.token the existing access token with its metadata\n * @param sessionHandler the session handler for token renewal\n * @param config optional configuration\n * @returns a success boolean if connected\n *\n * @category Client API\n * @async\n */\nexport const resumeSession = async (\n params: Params,\n sessionHandler: Amity.SessionHandler,\n config?: Amity.ConnectClientConfig,\n): Promise<boolean> => {\n const client = getActiveClient();\n let unsubWatcher: Amity.Unsubscriber;\n\n client.log('client/api/resumeSession', {\n apiKey: client.apiKey,\n sessionState: client.sessionState,\n ...params,\n });\n\n // Handle existing connected user\n if (client.userId) {\n if (client.userId === params.userId && isSameUserId(params.token.accessToken)) {\n // Clear connections and listeners but preserve cache\n if (client.mqtt && client.mqtt.connected) {\n client.mqtt.disconnect();\n }\n if (client.ws && client.ws.connected) {\n client.ws.disconnect();\n }\n\n // Clear existing subscriptions\n subscriptions.forEach(fn => fn());\n subscriptions = [];\n } else {\n // Different user - do full logout\n await logout();\n\n // Remove subscription to ban and delete\n subscriptions.forEach(fn => fn());\n subscriptions = [];\n }\n }\n\n try {\n const user = await validateAccessToken(params);\n\n if (user == null) {\n throw new ASCError(\n `${params.userId} has not been found`,\n Amity.ClientError.UNKNOWN_ERROR,\n Amity.ErrorLevel.ERROR,\n );\n }\n\n if (user.isDeleted) {\n terminateClient(Amity.TokenTerminationReason.USER_DELETED);\n return false;\n }\n\n if (user.isGlobalBanned) {\n terminateClient(Amity.TokenTerminationReason.GLOBAL_BAN);\n return false;\n }\n\n // FIXME: events are duplicated if connectClient is called few times without disconnectClient\n // wire websocket events to our event emitter\n proxyWebsocketEvents(client.ws, client.emitter);\n\n client.ws?.open();\n\n client.userId = user.userId;\n\n client.sessionHandler = sessionHandler;\n\n /*\n * Cannot push to subscriptions as watcher needs to continue working even if\n * token expires\n */\n unsubWatcher = client.accessTokenExpiryWatcher(sessionHandler);\n\n setActiveUser(user);\n } catch (error) {\n /*\n * if getting token failed session state reverts to initial state when app\n * is first launched\n */\n SessionWatcher.getInstance().setSessionState(Amity.SessionStates.NOT_LOGGED_IN);\n\n // pass error down tree so the calling function handle it\n throw error;\n }\n\n if (config?.disableRTE !== true) {\n runMqtt();\n }\n\n await initializeMessagePreviewSetting();\n\n if (subscriptions.length === 0) {\n subscriptions.push(\n // GLOBAL_BAN\n onClientBanned((_: Amity.UserPayload) => {\n terminateClient(Amity.TokenTerminationReason.GLOBAL_BAN);\n\n subscriptions.forEach(fn => fn());\n\n unsubWatcher();\n }),\n\n onTokenTerminated(_ => {\n terminateClient();\n\n subscriptions.forEach(fn => fn());\n\n unsubWatcher();\n }),\n\n onUserDeleted((user: Amity.InternalUser) => {\n if (user.userId === client.userId) {\n terminateClient(Amity.TokenTerminationReason.USER_DELETED);\n\n subscriptions.forEach(fn => fn());\n\n unsubWatcher();\n }\n }),\n\n onTokenExpired(state => {\n SessionWatcher.getInstance().setSessionState(state);\n\n logout();\n\n subscriptions.forEach(fn => fn());\n }),\n\n // NOTE: This is a temporary solution to handle the channel marker when the user is forced to leave\n // the channel because currently backend can't handle this, so every time a user is banned from\n // a channel or the channel is deleted the channel's unread count will not be reset to zero\n onChannelDeleted(removeChannelMarkerCache),\n onChannelMemberBanned(removeChannelMarkerCache),\n\n markReadEngineOnLoginHandler(),\n analyticsEngineOnLoginHandler(),\n objectResolverEngineOnLoginHandler(),\n );\n\n if (client.useLegacyUnreadCount) {\n subscriptions.push(readReceiptSyncEngineOnLoginHandler());\n } else subscriptions.push(legacyReadReceiptSyncEngineOnLoginHandler());\n }\n\n return true;\n};\n/* end_public_function */\n"]}
1
+ {"version":3,"file":"resumeSession.js","sourceRoot":"","sources":["../../../src/client/api/resumeSession.ts"],"names":[],"mappings":"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","sourcesContent":["import jwtDecode from 'jwt-decode';\n/* eslint-disable no-param-reassign */\nimport { modifyMqttConnection } from '~/client/utils/modifyMqttConnection';\n/* eslint-disable require-atomic-updates */\nimport { proxyWebsocketEvents } from '~/core/events';\nimport { onChannelDeleted } from '~/channelRepository/events/onChannelDeleted';\nimport { onChannelMemberBanned } from '~/channelRepository/events/onChannelMemberBanned';\n\nimport { markReadEngineOnLoginHandler } from '~/subChannelRepository/utils/markReadEngine';\nimport { onUserDeleted } from '~/userRepository/events/onUserDeleted';\n\nimport analyticsEngineOnLoginHandler from '~/analytic/utils/analyticsEngineOnLoginHandler';\nimport readReceiptSyncEngineOnLoginHandler from '~/client/utils/ReadReceiptSync/readReceiptSyncEngineOnLoginHandler';\nimport legacyReadReceiptSyncEngineOnLoginHandler from '~/client/utils/ReadReceiptSync/legacyReadReceiptSyncEngineOnLoginHandler';\nimport objectResolverEngineOnLoginHandler from '~/client/utils/ObjectResolver/objectResolverEngineOnLoginHandler';\nimport { logout } from './logout';\n\nimport { getActiveClient } from './activeClient';\nimport { terminateClient } from './terminateClient';\nimport { setActiveUser } from './activeUser';\nimport { setSessionState } from './setSessionState';\n\nimport { onClientBanned } from '../events';\nimport { onTokenExpired } from '../events/onTokenExpired';\nimport { onTokenTerminated } from '../events/onTokenTerminated';\n\nimport { removeChannelMarkerCache } from '../utils/removeChannelMarkerCache';\nimport { initializeMessagePreviewSetting } from '../utils/messagePreviewEngine';\nimport { ASCError } from '~/core/errors';\nimport SessionWatcher from '../utils/SessionWatcher';\n\n/*\n * declared earlier to accomodate case when logging in with a different user\n * than the one already connected, in which case the existing subscriptions need\n * to be cleared\n */\nlet subscriptions: Amity.Unsubscriber[] = [];\n\nasync function runMqtt() {\n await modifyMqttConnection();\n}\n\ninterface Params {\n userId: string;\n token: {\n issuedAt: string;\n expiresAt: string;\n accessToken: string;\n };\n}\n\nconst isSameUserId = (token: Params['token']['accessToken']) => {\n const client = getActiveClient();\n\n const decoded = jwtDecode<{\n user: {\n userId: string;\n publicUserId: string;\n deviceInfo: Amity.Device['deviceInfo'];\n networkId: string;\n displayName: string;\n refreshToken: string;\n };\n }>(token);\n\n return decoded?.user?.publicUserId === client.userId;\n};\n\nconst validateAccessToken = async ({ token, userId }: Params) => {\n const client = getActiveClient();\n // begin establishing session\n setSessionState(Amity.SessionStates.ESTABLISHING);\n\n const {\n data: { users },\n } = await client.http.get(`/api/v3/users/${userId}`, {\n headers: {\n Authorization: `Bearer ${token.accessToken}`,\n },\n });\n\n const user = users.find((u: Amity.User) => u.userId === userId);\n\n client.http.defaults.headers.common.Authorization = `Bearer ${token.accessToken}`;\n\n client.http.defaults.metadata = {\n tokenExpiry: token.expiresAt,\n isGlobalBanned: false,\n isUserDeleted: false,\n };\n\n client.upload.defaults.headers.common.Authorization = `Bearer ${token.accessToken}`;\n\n client.upload.defaults.metadata = {\n tokenExpiry: token.expiresAt,\n isGlobalBanned: false,\n isUserDeleted: false,\n };\n\n client.token = token;\n\n setSessionState(Amity.SessionStates.ESTABLISHED);\n\n return user;\n};\n\n/* begin_public_function\n id: client.resumeSession\n*/\n/**\n * ```js\n * import { resumeSession } from '@amityco/ts-sdk/client/api'\n * const success = await resumeSession({\n * userId: 'XYZ123456789',\n * token: { accessToken: 'abc123', issuedAt: '2023-01-01T00:00:00Z', expiresAt: '2023-01-02T00:00:00Z' }\n * })\n * ```\n *\n * Connects an {@link Amity.Client} instance to ASC servers using an existing access token\n *\n * @param params the connect parameters\n * @param params.userId the user ID for the current session\n * @param params.token the existing access token with its metadata\n * @param sessionHandler the session handler for token renewal\n * @param config optional configuration\n * @returns a success boolean if connected\n *\n * @category Client API\n * @async\n */\nexport const resumeSession = async (\n params: Params,\n sessionHandler: Amity.SessionHandler,\n config?: Amity.ConnectClientConfig,\n): Promise<boolean> => {\n const client = getActiveClient();\n let unsubWatcher: Amity.Unsubscriber;\n\n client.log('client/api/resumeSession', {\n apiKey: client.apiKey,\n sessionState: client.sessionState,\n ...params,\n });\n\n // Handle existing connected user\n if (client.userId) {\n if (client.userId === params.userId && isSameUserId(params.token.accessToken)) {\n // Clear connections and listeners but preserve cache\n if (client.mqtt && client.mqtt.connected) {\n client.mqtt.disconnect();\n }\n\n // Clear existing subscriptions\n subscriptions.forEach(fn => fn());\n subscriptions = [];\n } else {\n // Different user - do full logout\n await logout();\n\n // Remove subscription to ban and delete\n subscriptions.forEach(fn => fn());\n subscriptions = [];\n }\n }\n\n try {\n const user = await validateAccessToken(params);\n\n if (user == null) {\n throw new ASCError(\n `${params.userId} has not been found`,\n Amity.ClientError.UNKNOWN_ERROR,\n Amity.ErrorLevel.ERROR,\n );\n }\n\n if (user.isDeleted) {\n terminateClient(Amity.TokenTerminationReason.USER_DELETED);\n return false;\n }\n\n if (user.isGlobalBanned) {\n terminateClient(Amity.TokenTerminationReason.GLOBAL_BAN);\n return false;\n }\n\n client.userId = user.userId;\n\n client.sessionHandler = sessionHandler;\n\n /*\n * Cannot push to subscriptions as watcher needs to continue working even if\n * token expires\n */\n unsubWatcher = client.accessTokenExpiryWatcher(sessionHandler);\n\n setActiveUser(user);\n } catch (error) {\n /*\n * if getting token failed session state reverts to initial state when app\n * is first launched\n */\n SessionWatcher.getInstance().setSessionState(Amity.SessionStates.NOT_LOGGED_IN);\n\n // pass error down tree so the calling function handle it\n throw error;\n }\n\n if (config?.disableRTE !== true) {\n runMqtt();\n }\n\n await initializeMessagePreviewSetting();\n\n if (subscriptions.length === 0) {\n subscriptions.push(\n // GLOBAL_BAN\n onClientBanned((_: Amity.UserPayload) => {\n terminateClient(Amity.TokenTerminationReason.GLOBAL_BAN);\n\n subscriptions.forEach(fn => fn());\n\n unsubWatcher();\n }),\n\n onTokenTerminated(_ => {\n terminateClient();\n\n subscriptions.forEach(fn => fn());\n\n unsubWatcher();\n }),\n\n onUserDeleted((user: Amity.InternalUser) => {\n if (user.userId === client.userId) {\n terminateClient(Amity.TokenTerminationReason.USER_DELETED);\n\n subscriptions.forEach(fn => fn());\n\n unsubWatcher();\n }\n }),\n\n onTokenExpired(state => {\n SessionWatcher.getInstance().setSessionState(state);\n\n logout();\n\n subscriptions.forEach(fn => fn());\n }),\n\n // NOTE: This is a temporary solution to handle the channel marker when the user is forced to leave\n // the channel because currently backend can't handle this, so every time a user is banned from\n // a channel or the channel is deleted the channel's unread count will not be reset to zero\n onChannelDeleted(removeChannelMarkerCache),\n onChannelMemberBanned(removeChannelMarkerCache),\n\n markReadEngineOnLoginHandler(),\n analyticsEngineOnLoginHandler(),\n objectResolverEngineOnLoginHandler(),\n );\n\n if (client.useLegacyUnreadCount) {\n subscriptions.push(readReceiptSyncEngineOnLoginHandler());\n } else subscriptions.push(legacyReadReceiptSyncEngineOnLoginHandler());\n }\n\n return true;\n};\n/* end_public_function */\n"]}
@@ -8,10 +8,6 @@ describe('createClient', () => {
8
8
  const client = createClient('test-api-key');
9
9
  expect(client.http).toBeDefined();
10
10
  });
11
- test('it should define ws transport', () => {
12
- const client = createClient('test-api-key');
13
- expect(client.ws).toBeDefined();
14
- });
15
11
  test('it should define mqtt transport', () => {
16
12
  const client = createClient('test-api-key');
17
13
  expect(client.mqtt).toBeDefined();
@@ -1 +1 @@
1
- {"version":3,"file":"createClient.test.js","sourceRoot":"","sources":["../../../../src/client/api/tests/createClient.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE9C,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACrE,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC;QAE7B,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,uDAAmC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { createClient } from '../createClient';\n\ndescribe('createClient', () => {\n test('it should create client', () => {\n const client = createClient('test-api-key');\n\n expect(client).toBeDefined();\n });\n\n test('it should define http transport', () => {\n const client = createClient('test-api-key');\n\n expect(client.http).toBeDefined();\n });\n\n test('it should define ws transport', () => {\n const client = createClient('test-api-key');\n\n expect(client.ws).toBeDefined();\n });\n\n test('it should define mqtt transport', () => {\n const client = createClient('test-api-key');\n\n expect(client.mqtt).toBeDefined();\n });\n\n test('it should define event emitter', () => {\n const client = createClient('test-api-key');\n\n expect(client.emitter).toBeDefined();\n });\n\n test('it should return existing client if there is one', () => {\n const expected = createClient('test-api-key');\n const recieved = createClient('test-api-key');\n\n expect(recieved).toStrictEqual(expected);\n });\n\n test('it should set not logged in as the start up session state', () => {\n const got = createClient('key', 'sg');\n const { sessionState } = got;\n\n expect(got).toBeDefined();\n expect(sessionState).toBe(Amity.SessionStates.NOT_LOGGED_IN);\n });\n});\n"]}
1
+ {"version":3,"file":"createClient.test.js","sourceRoot":"","sources":["../../../../src/client/api/tests/createClient.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC5D,MAAM,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAE9C,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACrE,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC;QAE7B,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,uDAAmC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { createClient } from '../createClient';\n\ndescribe('createClient', () => {\n test('it should create client', () => {\n const client = createClient('test-api-key');\n\n expect(client).toBeDefined();\n });\n\n test('it should define http transport', () => {\n const client = createClient('test-api-key');\n\n expect(client.http).toBeDefined();\n });\n\n test('it should define mqtt transport', () => {\n const client = createClient('test-api-key');\n\n expect(client.mqtt).toBeDefined();\n });\n\n test('it should define event emitter', () => {\n const client = createClient('test-api-key');\n\n expect(client.emitter).toBeDefined();\n });\n\n test('it should return existing client if there is one', () => {\n const expected = createClient('test-api-key');\n const recieved = createClient('test-api-key');\n\n expect(recieved).toStrictEqual(expected);\n });\n\n test('it should set not logged in as the start up session state', () => {\n const got = createClient('key', 'sg');\n const { sessionState } = got;\n\n expect(got).toBeDefined();\n expect(sessionState).toBe(Amity.SessionStates.NOT_LOGGED_IN);\n });\n});\n"]}
@@ -8,13 +8,7 @@ const sessionHandler = {
8
8
  // do nothing
9
9
  },
10
10
  };
11
- const onConnect = () => setTimeout(() => {
12
- const CONNECT_PACKET = { type: 0, nsp: client.ws.nsp };
13
- client.ws.emit('connect');
14
- // simulate a connection ack packet from server
15
- client.ws.io.emit('packet', CONNECT_PACKET);
16
- }, 50);
17
- describe('login', () => {
11
+ const onConnect = () => describe('login', () => {
18
12
  beforeEach(() => {
19
13
  client = createClient('key', 'sg');
20
14
  client.mqtt.connect = jest.fn();
@@ -1 +1 @@
1
- {"version":3,"file":"login.test.js","sourceRoot":"","sources":["../../../../src/client/api/tests/login.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { ASCApiError } from '~/core/errors';\nimport { sessionResponse, user11, disconnectClient } from '~/utils/tests';\nimport { login, createClient } from '..';\nimport { setActiveClient } from '../activeClient';\n\nlet client: Amity.Client;\n\nconst sessionHandler: Amity.SessionHandler = {\n sessionWillRenewAccessToken(_) {\n // do nothing\n },\n};\n\nconst onConnect = () =>\n setTimeout(() => {\n const CONNECT_PACKET = { type: 0, nsp: client.ws.nsp };\n\n client.ws.emit('connect');\n\n // simulate a connection ack packet from server\n client.ws.io.emit('packet', CONNECT_PACKET);\n }, 50);\n\ndescribe('login', () => {\n beforeEach(() => {\n client = createClient('key', 'sg');\n client.mqtt.connect = jest.fn();\n client.mqtt.subscribe = jest.fn();\n client.http.post = jest.fn().mockResolvedValueOnce(sessionResponse);\n\n setActiveClient(client);\n });\n\n afterEach(async () => {\n if (client.sessionState === Amity.SessionStates.ESTABLISHED) await disconnectClient();\n });\n\n test('it should connect client', async () => {\n onConnect().unref();\n\n const recieved = await login({ userId: user11.userId }, sessionHandler);\n\n expect(recieved).toBe(true);\n });\n\n test('it should establish connection', async () => {\n onConnect().unref();\n\n await login({ userId: user11.userId }, sessionHandler);\n const { sessionState } = client;\n\n expect(sessionState).toBe(Amity.SessionStates.ESTABLISHED);\n });\n\n test('it should have session state establishing while connecting client', () => {\n login({ userId: user11.userId }, sessionHandler);\n\n expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHING);\n });\n\n test('it should have session state notLoggedIn on failure', async () => {\n client.http.post = jest\n .fn()\n .mockRejectedValue(\n new ASCApiError('unauthorzed', Amity.ServerError.UNAUTHORIZED, Amity.ErrorLevel.FATAL),\n );\n\n await expect(login({ userId: user11.userId }, sessionHandler)).rejects.toThrow('unauthorzed');\n expect(client.sessionState).toBe(Amity.SessionStates.NOT_LOGGED_IN);\n });\n\n test('it should terminate session on ban', async () => {\n onConnect().unref();\n\n await login({ userId: user11.userId }, sessionHandler);\n\n // ban user\n client.emitter.emit('user.didGlobalBan', {} as Amity.UserPayload);\n\n expect(client.sessionState).toBe(Amity.SessionStates.TERMINATED);\n });\n});\n"]}
1
+ {"version":3,"file":"login.test.js","sourceRoot":"","sources":["../../../../src/client/api/tests/login.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { ASCApiError } from '~/core/errors';\nimport { sessionResponse, user11, disconnectClient } from '~/utils/tests';\nimport { login, createClient } from '..';\nimport { setActiveClient } from '../activeClient';\n\nlet client: Amity.Client;\n\nconst sessionHandler: Amity.SessionHandler = {\n sessionWillRenewAccessToken(_) {\n // do nothing\n },\n};\n\nconst onConnect = () =>\n describe('login', () => {\n beforeEach(() => {\n client = createClient('key', 'sg');\n client.mqtt.connect = jest.fn();\n client.mqtt.subscribe = jest.fn();\n client.http.post = jest.fn().mockResolvedValueOnce(sessionResponse);\n\n setActiveClient(client);\n });\n\n afterEach(async () => {\n if (client.sessionState === Amity.SessionStates.ESTABLISHED) await disconnectClient();\n });\n\n test('it should connect client', async () => {\n onConnect().unref();\n\n const recieved = await login({ userId: user11.userId }, sessionHandler);\n\n expect(recieved).toBe(true);\n });\n\n test('it should establish connection', async () => {\n onConnect().unref();\n\n await login({ userId: user11.userId }, sessionHandler);\n const { sessionState } = client;\n\n expect(sessionState).toBe(Amity.SessionStates.ESTABLISHED);\n });\n\n test('it should have session state establishing while connecting client', () => {\n login({ userId: user11.userId }, sessionHandler);\n\n expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHING);\n });\n\n test('it should have session state notLoggedIn on failure', async () => {\n client.http.post = jest\n .fn()\n .mockRejectedValue(\n new ASCApiError('unauthorzed', Amity.ServerError.UNAUTHORIZED, Amity.ErrorLevel.FATAL),\n );\n\n await expect(login({ userId: user11.userId }, sessionHandler)).rejects.toThrow('unauthorzed');\n expect(client.sessionState).toBe(Amity.SessionStates.NOT_LOGGED_IN);\n });\n\n test('it should terminate session on ban', async () => {\n onConnect().unref();\n\n await login({ userId: user11.userId }, sessionHandler);\n\n // ban user\n client.emitter.emit('user.didGlobalBan', {} as Amity.UserPayload);\n\n expect(client.sessionState).toBe(Amity.SessionStates.TERMINATED);\n });\n });\n"]}
@@ -1,40 +1,33 @@
1
1
  import { pushToCache, pullFromCache, enableCache } from '~/cache/api';
2
2
  import { client, connectClient, message11 as message } from '~/utils/tests';
3
3
  import { logout } from '..';
4
- const disconnect = () => setTimeout(() => client.ws.emit('disconnect'), 500);
5
4
  describe('logout', () => {
6
5
  beforeEach(async () => {
7
6
  await connectClient();
8
7
  });
9
8
  test('it should disconnect client', async () => {
10
- disconnect().unref();
11
9
  const recieved = await logout();
12
10
  expect(recieved).toBe(true);
13
11
  });
14
12
  test('it should set sesion state to notLoggedIn after disconnect', async () => {
15
- disconnect().unref();
16
13
  await logout();
17
14
  expect(client.sessionState).toBe("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
18
15
  });
19
16
  test('it should not update sesion state if session state terminated', async () => {
20
17
  client.sessionState = "terminated" /* Amity.SessionStates.TERMINATED */;
21
- disconnect().unref();
22
18
  await logout();
23
19
  expect(client.sessionState).toBe("terminated" /* Amity.SessionStates.TERMINATED */);
24
20
  });
25
21
  test('it should clear userId and accessToken on disconnect', async () => {
26
- disconnect().unref();
27
22
  await logout();
28
23
  expect(client.userId).toBeUndefined();
29
24
  expect(client.token).toBeUndefined();
30
25
  });
31
26
  test('it should clear auth header on disconnect', async () => {
32
- disconnect().unref();
33
27
  await logout();
34
28
  expect(client.http.defaults.headers.common.Authorization).toBeFalsy();
35
29
  });
36
30
  test('it should clear cache on disconnect', async () => {
37
- disconnect().unref();
38
31
  enableCache();
39
32
  const cacheKey = ['message', 'get', message.messageId];
40
33
  pushToCache(cacheKey, message);
@@ -44,7 +37,6 @@ describe('logout', () => {
44
37
  test('it should not clear cache if tokenExpired', async () => {
45
38
  var _a;
46
39
  client.sessionState = "tokenExpired" /* Amity.SessionStates.TOKEN_EXPIRED */;
47
- disconnect().unref();
48
40
  enableCache();
49
41
  const cacheKey = ['message', 'get', message.messageId];
50
42
  pushToCache(cacheKey, message);
@@ -1 +1 @@
1
- {"version":3,"file":"logout.test.js","sourceRoot":"","sources":["../../../../src/client/api/tests/logout.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { pushToCache, pullFromCache, enableCache } from '~/cache/api';\nimport { client, connectClient, message11 as message } from '~/utils/tests';\n\nimport { logout } from '..';\n\nconst disconnect = () => setTimeout(() => client.ws.emit('disconnect'), 500);\n\ndescribe('logout', () => {\n beforeEach(async () => {\n await connectClient();\n });\n\n test('it should disconnect client', async () => {\n disconnect().unref();\n\n const recieved = await logout();\n\n expect(recieved).toBe(true);\n });\n\n test('it should set sesion state to notLoggedIn after disconnect', async () => {\n disconnect().unref();\n await logout();\n\n expect(client.sessionState).toBe(Amity.SessionStates.NOT_LOGGED_IN);\n });\n\n test('it should not update sesion state if session state terminated', async () => {\n client.sessionState = Amity.SessionStates.TERMINATED;\n disconnect().unref();\n\n await logout();\n\n expect(client.sessionState).toBe(Amity.SessionStates.TERMINATED);\n });\n\n test('it should clear userId and accessToken on disconnect', async () => {\n disconnect().unref();\n\n await logout();\n\n expect(client.userId).toBeUndefined();\n expect(client.token).toBeUndefined();\n });\n\n test('it should clear auth header on disconnect', async () => {\n disconnect().unref();\n\n await logout();\n\n expect(client.http.defaults.headers.common.Authorization).toBeFalsy();\n });\n\n test('it should clear cache on disconnect', async () => {\n disconnect().unref();\n enableCache();\n\n const cacheKey = ['message', 'get', message.messageId];\n pushToCache(cacheKey, message);\n\n await logout();\n\n expect(pullFromCache(cacheKey)).toBeUndefined();\n });\n\n test('it should not clear cache if tokenExpired', async () => {\n client.sessionState = Amity.SessionStates.TOKEN_EXPIRED;\n disconnect().unref();\n enableCache();\n\n const cacheKey = ['message', 'get', message.messageId];\n pushToCache(cacheKey, message);\n\n await logout();\n\n expect(pullFromCache(cacheKey)?.data).toStrictEqual(message);\n });\n});\n"]}
1
+ {"version":3,"file":"logout.test.js","sourceRoot":"","sources":["../../../../src/client/api/tests/logout.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAE5B,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,QAAQ,GAAG,MAAM,MAAM,EAAE,CAAC;QAEhC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,uDAAmC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,CAAC,YAAY,oDAAiC,CAAC;QAErD,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,mDAAgC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACrD,WAAW,EAAE,CAAC;QAEd,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACvD,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE/B,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;;QAC3D,MAAM,CAAC,YAAY,yDAAoC,CAAC;QAExD,WAAW,EAAE,CAAC;QAEd,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACvD,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE/B,MAAM,MAAM,EAAE,CAAC;QAEf,MAAM,CAAC,MAAA,aAAa,CAAC,QAAQ,CAAC,0CAAE,IAAI,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { pushToCache, pullFromCache, enableCache } from '~/cache/api';\nimport { client, connectClient, message11 as message } from '~/utils/tests';\n\nimport { logout } from '..';\n\ndescribe('logout', () => {\n beforeEach(async () => {\n await connectClient();\n });\n\n test('it should disconnect client', async () => {\n const recieved = await logout();\n\n expect(recieved).toBe(true);\n });\n\n test('it should set sesion state to notLoggedIn after disconnect', async () => {\n await logout();\n\n expect(client.sessionState).toBe(Amity.SessionStates.NOT_LOGGED_IN);\n });\n\n test('it should not update sesion state if session state terminated', async () => {\n client.sessionState = Amity.SessionStates.TERMINATED;\n\n await logout();\n\n expect(client.sessionState).toBe(Amity.SessionStates.TERMINATED);\n });\n\n test('it should clear userId and accessToken on disconnect', async () => {\n await logout();\n\n expect(client.userId).toBeUndefined();\n expect(client.token).toBeUndefined();\n });\n\n test('it should clear auth header on disconnect', async () => {\n await logout();\n\n expect(client.http.defaults.headers.common.Authorization).toBeFalsy();\n });\n\n test('it should clear cache on disconnect', async () => {\n enableCache();\n\n const cacheKey = ['message', 'get', message.messageId];\n pushToCache(cacheKey, message);\n\n await logout();\n\n expect(pullFromCache(cacheKey)).toBeUndefined();\n });\n\n test('it should not clear cache if tokenExpired', async () => {\n client.sessionState = Amity.SessionStates.TOKEN_EXPIRED;\n\n enableCache();\n\n const cacheKey = ['message', 'get', message.messageId];\n pushToCache(cacheKey, message);\n\n await logout();\n\n expect(pullFromCache(cacheKey)?.data).toStrictEqual(message);\n });\n});\n"]}
@@ -18,14 +18,7 @@ const mockUserResponse = {
18
18
  users: [user11],
19
19
  },
20
20
  };
21
- const onConnect = () => setTimeout(() => {
22
- var _a, _b, _c;
23
- const CONNECT_PACKET = { type: 0, nsp: (_a = client.ws) === null || _a === void 0 ? void 0 : _a.nsp };
24
- (_b = client.ws) === null || _b === void 0 ? void 0 : _b.emit('connect');
25
- // simulate a connection ack packet from server
26
- (_c = client.ws) === null || _c === void 0 ? void 0 : _c.io.emit('packet', CONNECT_PACKET);
27
- }, 50);
28
- describe('resumeSession', () => {
21
+ const onConnect = () => describe('resumeSession', () => {
29
22
  beforeEach(() => {
30
23
  var _a, _b;
31
24
  client = createClient('key', 'sg');
@@ -1 +1 @@
1
- {"version":3,"file":"resumeSession.test.js","sourceRoot":"","sources":["../../../../src/client/api/tests/resumeSession.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { ASCApiError } from '~/core/errors';\nimport { user11, disconnectClient } from '~/utils/tests';\nimport { resumeSession, createClient } from '..';\nimport { setActiveClient } from '../activeClient';\n\nlet client: Amity.Client;\n\nconst sessionHandler: Amity.SessionHandler = {\n sessionWillRenewAccessToken(_) {\n // do nothing\n },\n};\n\nconst mockToken = {\n accessToken: 'mock-access-token',\n issuedAt: '2023-01-01T00:00:00Z',\n expiresAt: '2025-01-01T00:00:00Z',\n};\n\nconst mockUserResponse = {\n data: {\n users: [user11],\n },\n};\n\nconst onConnect = () =>\n setTimeout(() => {\n const CONNECT_PACKET = { type: 0, nsp: client.ws?.nsp };\n\n client.ws?.emit('connect');\n\n // simulate a connection ack packet from server\n client.ws?.io.emit('packet', CONNECT_PACKET);\n }, 50);\n\ndescribe('resumeSession', () => {\n beforeEach(() => {\n client = createClient('key', 'sg');\n client.mqtt?.connect && (client.mqtt.connect = jest.fn());\n client.mqtt?.subscribe && (client.mqtt.subscribe = jest.fn());\n client.http.get = jest.fn().mockResolvedValueOnce(mockUserResponse);\n\n setActiveClient(client);\n });\n\n afterEach(async () => {\n if (client.sessionState === Amity.SessionStates.ESTABLISHED) await disconnectClient();\n });\n\n test('it should connect client with access token', async () => {\n onConnect().unref();\n\n const received = await resumeSession(\n { userId: user11.userId, token: mockToken },\n sessionHandler,\n );\n\n expect(received).toBe(true);\n });\n\n test('it should establish connection', async () => {\n onConnect().unref();\n\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n const { sessionState } = client;\n\n expect(sessionState).toBe(Amity.SessionStates.ESTABLISHED);\n });\n\n test('it should have session state establishing while connecting client', () => {\n resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHING);\n });\n\n test('it should have session state notLoggedIn on failure', async () => {\n client.http.get = jest\n .fn()\n .mockRejectedValue(\n new ASCApiError('unauthorized', Amity.ServerError.UNAUTHORIZED, Amity.ErrorLevel.FATAL),\n );\n\n await expect(\n resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler),\n ).rejects.toThrow('unauthorized');\n expect(client.sessionState).toBe(Amity.SessionStates.NOT_LOGGED_IN);\n });\n\n test('it should set authorization header with token', async () => {\n onConnect().unref();\n\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n expect(client.http.defaults.headers.common.Authorization).toBe(\n `Bearer ${mockToken.accessToken}`,\n );\n expect(client.upload.defaults.headers.common.Authorization).toBe(\n `Bearer ${mockToken.accessToken}`,\n );\n });\n\n test('it should set token metadata', async () => {\n onConnect().unref();\n\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n expect(client.token).toEqual(mockToken);\n expect(client.http.defaults.metadata).toEqual({\n tokenExpiry: mockToken.expiresAt,\n isGlobalBanned: false,\n isUserDeleted: false,\n });\n });\n\n test('it should call user endpoint to validate token', async () => {\n onConnect().unref();\n\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n expect(client.http.get).toHaveBeenCalledWith(`/api/v3/users/${user11.userId}`);\n });\n\n test('it should terminate session on ban', async () => {\n onConnect().unref();\n\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n // ban user\n client.emitter.emit('user.didGlobalBan', {} as Amity.UserPayload);\n\n expect(client.sessionState).toBe(Amity.SessionStates.TERMINATED);\n });\n\n test('it should reset client state when user is already connected with same userId', async () => {\n onConnect().unref();\n\n // First connection\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHED);\n expect(client.userId).toBe(user11.userId);\n\n // Mock the HTTP call for second connection\n client.http.get = jest.fn().mockResolvedValueOnce(mockUserResponse);\n\n // Second connection with same userId should treat as token expiry (preserve cache)\n onConnect().unref();\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n // Verify that the client is properly reset and reconnected\n expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHED);\n expect(client.userId).toBe(user11.userId);\n });\n\n test('it should preserve cache when resuming session with same userId', async () => {\n onConnect().unref();\n\n // First connection - set some cache data\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n if (client.cache) {\n client.cache.data = { test: 'data' };\n }\n\n // Mock the HTTP call for second connection\n client.http.get = jest.fn().mockResolvedValueOnce(mockUserResponse);\n\n // Second connection with same userId\n onConnect().unref();\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n // Cache should be preserved when same userId is used\n expect(client.cache?.data).toEqual({ test: 'data' });\n });\n});\n"]}
1
+ {"version":3,"file":"resumeSession.test.js","sourceRoot":"","sources":["../../../../src/client/api/tests/resumeSession.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { ASCApiError } from '~/core/errors';\nimport { user11, disconnectClient } from '~/utils/tests';\nimport { resumeSession, createClient } from '..';\nimport { setActiveClient } from '../activeClient';\n\nlet client: Amity.Client;\n\nconst sessionHandler: Amity.SessionHandler = {\n sessionWillRenewAccessToken(_) {\n // do nothing\n },\n};\n\nconst mockToken = {\n accessToken: 'mock-access-token',\n issuedAt: '2023-01-01T00:00:00Z',\n expiresAt: '2025-01-01T00:00:00Z',\n};\n\nconst mockUserResponse = {\n data: {\n users: [user11],\n },\n};\n\nconst onConnect = () =>\n describe('resumeSession', () => {\n beforeEach(() => {\n client = createClient('key', 'sg');\n client.mqtt?.connect && (client.mqtt.connect = jest.fn());\n client.mqtt?.subscribe && (client.mqtt.subscribe = jest.fn());\n client.http.get = jest.fn().mockResolvedValueOnce(mockUserResponse);\n\n setActiveClient(client);\n });\n\n afterEach(async () => {\n if (client.sessionState === Amity.SessionStates.ESTABLISHED) await disconnectClient();\n });\n\n test('it should connect client with access token', async () => {\n onConnect().unref();\n\n const received = await resumeSession(\n { userId: user11.userId, token: mockToken },\n sessionHandler,\n );\n\n expect(received).toBe(true);\n });\n\n test('it should establish connection', async () => {\n onConnect().unref();\n\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n const { sessionState } = client;\n\n expect(sessionState).toBe(Amity.SessionStates.ESTABLISHED);\n });\n\n test('it should have session state establishing while connecting client', () => {\n resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHING);\n });\n\n test('it should have session state notLoggedIn on failure', async () => {\n client.http.get = jest\n .fn()\n .mockRejectedValue(\n new ASCApiError('unauthorized', Amity.ServerError.UNAUTHORIZED, Amity.ErrorLevel.FATAL),\n );\n\n await expect(\n resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler),\n ).rejects.toThrow('unauthorized');\n expect(client.sessionState).toBe(Amity.SessionStates.NOT_LOGGED_IN);\n });\n\n test('it should set authorization header with token', async () => {\n onConnect().unref();\n\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n expect(client.http.defaults.headers.common.Authorization).toBe(\n `Bearer ${mockToken.accessToken}`,\n );\n expect(client.upload.defaults.headers.common.Authorization).toBe(\n `Bearer ${mockToken.accessToken}`,\n );\n });\n\n test('it should set token metadata', async () => {\n onConnect().unref();\n\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n expect(client.token).toEqual(mockToken);\n expect(client.http.defaults.metadata).toEqual({\n tokenExpiry: mockToken.expiresAt,\n isGlobalBanned: false,\n isUserDeleted: false,\n });\n });\n\n test('it should call user endpoint to validate token', async () => {\n onConnect().unref();\n\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n expect(client.http.get).toHaveBeenCalledWith(`/api/v3/users/${user11.userId}`);\n });\n\n test('it should terminate session on ban', async () => {\n onConnect().unref();\n\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n // ban user\n client.emitter.emit('user.didGlobalBan', {} as Amity.UserPayload);\n\n expect(client.sessionState).toBe(Amity.SessionStates.TERMINATED);\n });\n\n test('it should reset client state when user is already connected with same userId', async () => {\n onConnect().unref();\n\n // First connection\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHED);\n expect(client.userId).toBe(user11.userId);\n\n // Mock the HTTP call for second connection\n client.http.get = jest.fn().mockResolvedValueOnce(mockUserResponse);\n\n // Second connection with same userId should treat as token expiry (preserve cache)\n onConnect().unref();\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n // Verify that the client is properly reset and reconnected\n expect(client.sessionState).toBe(Amity.SessionStates.ESTABLISHED);\n expect(client.userId).toBe(user11.userId);\n });\n\n test('it should preserve cache when resuming session with same userId', async () => {\n onConnect().unref();\n\n // First connection - set some cache data\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n if (client.cache) {\n client.cache.data = { test: 'data' };\n }\n\n // Mock the HTTP call for second connection\n client.http.get = jest.fn().mockResolvedValueOnce(mockUserResponse);\n\n // Second connection with same userId\n onConnect().unref();\n await resumeSession({ userId: user11.userId, token: mockToken }, sessionHandler);\n\n // Cache should be preserved when same userId is used\n expect(client.cache?.data).toEqual({ test: 'data' });\n });\n });\n"]}
@@ -1,18 +1,15 @@
1
1
  import { client, connectClient } from '~/utils/tests';
2
2
  import { terminateClient } from '../terminateClient';
3
- const disconnect = () => setTimeout(() => client.ws.emit('disconnect'), 500);
4
3
  describe('terminateClient', () => {
5
4
  beforeAll(async () => {
6
5
  await connectClient();
7
6
  });
8
7
  test('it should terminate client session', async () => {
9
- disconnect().unref();
10
8
  const expected = "terminated" /* Amity.SessionStates.TERMINATED */;
11
9
  terminateClient();
12
10
  expect(client.sessionState).toBe(expected);
13
11
  });
14
12
  test('it should clear sessionHandler', async () => {
15
- disconnect().unref();
16
13
  terminateClient();
17
14
  expect(client.sessionHandler).toBeUndefined();
18
15
  });
@@ -1 +1 @@
1
- {"version":3,"file":"terminateClient.test.js","sourceRoot":"","sources":["../../../../src/client/api/tests/terminateClient.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC;AAE7E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QACpD,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QAErB,MAAM,QAAQ,oDAAiC,CAAC;QAEhD,eAAe,EAAE,CAAC;QAElB,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAChD,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;QAErB,eAAe,EAAE,CAAC;QAElB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { client, connectClient } from '~/utils/tests';\n\nimport { terminateClient } from '../terminateClient';\n\nconst disconnect = () => setTimeout(() => client.ws.emit('disconnect'), 500);\n\ndescribe('terminateClient', () => {\n beforeAll(async () => {\n await connectClient();\n });\n\n test('it should terminate client session', async () => {\n disconnect().unref();\n\n const expected = Amity.SessionStates.TERMINATED;\n\n terminateClient();\n\n expect(client.sessionState).toBe(expected);\n });\n\n test('it should clear sessionHandler', async () => {\n disconnect().unref();\n\n terminateClient();\n\n expect(client.sessionHandler).toBeUndefined();\n });\n});\n"]}
1
+ {"version":3,"file":"terminateClient.test.js","sourceRoot":"","sources":["../../../../src/client/api/tests/terminateClient.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,QAAQ,oDAAiC,CAAC;QAEhD,eAAe,EAAE,CAAC;QAElB,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAChD,eAAe,EAAE,CAAC;QAElB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { client, connectClient } from '~/utils/tests';\n\nimport { terminateClient } from '../terminateClient';\n\ndescribe('terminateClient', () => {\n beforeAll(async () => {\n await connectClient();\n });\n\n test('it should terminate client session', async () => {\n const expected = Amity.SessionStates.TERMINATED;\n\n terminateClient();\n\n expect(client.sessionState).toBe(expected);\n });\n\n test('it should clear sessionHandler', async () => {\n terminateClient();\n\n expect(client.sessionHandler).toBeUndefined();\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"setClientToken.d.ts","sourceRoot":"","sources":["../../../src/client/utils/setClientToken.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,WAAkB,WAAW,eAAe,CAAC,CAAC,CAAC,CAAC;;;EAgC1E,CAAC"}
1
+ {"version":3,"file":"setClientToken.d.ts","sourceRoot":"","sources":["../../../src/client/utils/setClientToken.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,WAAkB,WAAW,eAAe,CAAC,CAAC,CAAC,CAAC;;;EA6B1E,CAAC"}
@@ -31,9 +31,6 @@ export const setClientToken = async (params) => {
31
31
  isGlobalBanned: false,
32
32
  isUserDeleted: false,
33
33
  };
34
- // manually setup the token for ws transport
35
- if (client.ws)
36
- client.ws.io.opts.query = { token: accessToken };
37
34
  client.token = { accessToken, issuedAt, expiresAt };
38
35
  setSessionState("established" /* Amity.SessionStates.ESTABLISHED */);
39
36
  return { accessToken, users };
@@ -1 +1 @@
1
- {"version":3,"file":"setClientToken.js","sourceRoot":"","sources":["../../../src/client/utils/setClientToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,MAAsC,EAAE,EAAE;IAC7E,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,6BAA6B;IAC7B,eAAe,uDAAkC,CAAC;IAElD,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE3E,8CAA8C;IAC9C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,UAAU,WAAW,EAAE,CAAC;IAE5E,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG;QAC9B,WAAW,EAAE,SAAS;QACtB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;KACrB,CAAC;IAEF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,UAAU,WAAW,EAAE,CAAC;IAE9E,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG;QAChC,WAAW,EAAE,SAAS;QACtB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;KACrB,CAAC;IAEF,4CAA4C;IAC5C,IAAI,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAEhE,MAAM,CAAC,KAAK,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAEpD,eAAe,qDAAiC,CAAC;IAEjD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC,CAAC","sourcesContent":["import { getActiveClient } from '../api/activeClient';\nimport { setSessionState } from '../api/setSessionState';\nimport { getToken } from '../api/getToken';\n\n/**\n * A util to set or refresh client token\n *\n * @param params.userId the user ID for the current session\n * @param params.displayName the user's displayName for the current session\n * @param params.deviceId Manual override of the user's device id (for device management)\n * @param params.authToken The authentication token - necessary when network option is set to secure\n * @returns token & user info\n *\n * @category private\n * @async\n */\nexport const setClientToken = async (params: Parameters<typeof getToken>[0]) => {\n const client = getActiveClient();\n // begin establishing session\n setSessionState(Amity.SessionStates.ESTABLISHING);\n\n const { accessToken, users, expiresAt, issuedAt } = await getToken(params);\n\n // manually setup the token for http transport\n client.http.defaults.headers.common.Authorization = `Bearer ${accessToken}`;\n\n client.http.defaults.metadata = {\n tokenExpiry: expiresAt,\n isGlobalBanned: false,\n isUserDeleted: false,\n };\n\n client.upload.defaults.headers.common.Authorization = `Bearer ${accessToken}`;\n\n client.upload.defaults.metadata = {\n tokenExpiry: expiresAt,\n isGlobalBanned: false,\n isUserDeleted: false,\n };\n\n // manually setup the token for ws transport\n if (client.ws) client.ws.io.opts.query = { token: accessToken };\n\n client.token = { accessToken, issuedAt, expiresAt };\n\n setSessionState(Amity.SessionStates.ESTABLISHED);\n\n return { accessToken, users };\n};\n"]}
1
+ {"version":3,"file":"setClientToken.js","sourceRoot":"","sources":["../../../src/client/utils/setClientToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,MAAsC,EAAE,EAAE;IAC7E,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,6BAA6B;IAC7B,eAAe,uDAAkC,CAAC;IAElD,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE3E,8CAA8C;IAC9C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,UAAU,WAAW,EAAE,CAAC;IAE5E,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG;QAC9B,WAAW,EAAE,SAAS;QACtB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;KACrB,CAAC;IAEF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,UAAU,WAAW,EAAE,CAAC;IAE9E,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG;QAChC,WAAW,EAAE,SAAS;QACtB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;KACrB,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAEpD,eAAe,qDAAiC,CAAC;IAEjD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC,CAAC","sourcesContent":["import { getActiveClient } from '../api/activeClient';\nimport { setSessionState } from '../api/setSessionState';\nimport { getToken } from '../api/getToken';\n\n/**\n * A util to set or refresh client token\n *\n * @param params.userId the user ID for the current session\n * @param params.displayName the user's displayName for the current session\n * @param params.deviceId Manual override of the user's device id (for device management)\n * @param params.authToken The authentication token - necessary when network option is set to secure\n * @returns token & user info\n *\n * @category private\n * @async\n */\nexport const setClientToken = async (params: Parameters<typeof getToken>[0]) => {\n const client = getActiveClient();\n // begin establishing session\n setSessionState(Amity.SessionStates.ESTABLISHING);\n\n const { accessToken, users, expiresAt, issuedAt } = await getToken(params);\n\n // manually setup the token for http transport\n client.http.defaults.headers.common.Authorization = `Bearer ${accessToken}`;\n\n client.http.defaults.metadata = {\n tokenExpiry: expiresAt,\n isGlobalBanned: false,\n isUserDeleted: false,\n };\n\n client.upload.defaults.headers.common.Authorization = `Bearer ${accessToken}`;\n\n client.upload.defaults.metadata = {\n tokenExpiry: expiresAt,\n isGlobalBanned: false,\n isUserDeleted: false,\n };\n\n client.token = { accessToken, issuedAt, expiresAt };\n\n setSessionState(Amity.SessionStates.ESTABLISHED);\n\n return { accessToken, users };\n};\n"]}
@@ -1,16 +1,5 @@
1
1
  /** @hidden */
2
2
  export declare const createEventEmitter: () => import("mitt").Emitter<Amity.Events>;
3
- /**
4
- * Wraps the websocket events into the client's event emitter for
5
- * abstraction of transport.
6
- *
7
- * @param ws A websocket connection to listen from
8
- * @param emitter An event emitter to wire the events to
9
- *
10
- * @category Transport
11
- * @hidden
12
- */
13
- export declare const proxyWebsocketEvents: (ws: Amity.Client['ws'], emitter: Amity.Client['emitter']) => void;
14
3
  export declare const proxyMqttEvents: (mqttClient: Amity.Client['mqtt'], emitter: Amity.Client['emitter']) => void;
15
4
  /**
16
5
  * Standardize the subscription of SSE through web sockets
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAwCA,cAAc;AACd,eAAO,MAAM,kBAAkB,4CAE9B,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,OAAQ,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,MAAM,MAAM,CAAC,SAAS,CAAC,SAM5F,CAAC;AAEF,eAAO,MAAM,eAAe,eACd,MAAM,MAAM,CAAC,MAAM,CAAC,WACvB,MAAM,MAAM,CAAC,SAAS,CAAC,SAajC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,u6HACxB,MAAM,MAAM,aACT,MAAM,oDAGhB,MAAM,YAsBR,CAAC;AAEF,eAAO,MAAM,2BAA2B,u6HAC9B,MAAM,MAAM,aACT,MAAM,yBAEJ,OAAO,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,KAC5C,MAAM,YAQR,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,08HAKrB,CAAC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAwCA,cAAc;AACd,eAAO,MAAM,kBAAkB,4CAE9B,CAAC;AAEF,eAAO,MAAM,eAAe,eACd,MAAM,MAAM,CAAC,MAAM,CAAC,WACvB,MAAM,MAAM,CAAC,SAAS,CAAC,SAajC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,u6HACxB,MAAM,MAAM,aACT,MAAM,oDAGhB,MAAM,YAsBR,CAAC;AAEF,eAAO,MAAM,2BAA2B,u6HAC9B,MAAM,MAAM,aACT,MAAM,yBAEJ,OAAO,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,KAC5C,MAAM,YAQR,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,08HAKrB,CAAC"}
@@ -34,23 +34,6 @@ const MQTT_EVENTS = [
34
34
  export const createEventEmitter = () => {
35
35
  return mitt();
36
36
  };
37
- /**
38
- * Wraps the websocket events into the client's event emitter for
39
- * abstraction of transport.
40
- *
41
- * @param ws A websocket connection to listen from
42
- * @param emitter An event emitter to wire the events to
43
- *
44
- * @category Transport
45
- * @hidden
46
- */
47
- export const proxyWebsocketEvents = (ws, emitter) => {
48
- WS_EVENTS.forEach(event => {
49
- ws === null || ws === void 0 ? void 0 : ws.on(event, (param) => {
50
- emitter.emit(event, param);
51
- });
52
- });
53
- };
54
37
  export const proxyMqttEvents = (mqttClient, emitter) => {
55
38
  MQTT_EVENTS.forEach(event => {
56
39
  mqttClient === null || mqttClient === void 0 ? void 0 : mqttClient.on(event, (...params) => {
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport mitt from 'mitt';\n\nimport { getActiveClient } from '~/client/api/activeClient';\n\nimport { scheduleTask } from './microtasks';\n\n// need to sync up the list\nconst WS_EVENTS = [\n 'disconnected',\n 'error',\n 'connect_error',\n 'reconnect_error',\n 'reconnect_failed',\n 'sessionStateChange',\n // for internal use by accessTokenExpiryWatcher\n 'tokenExpired',\n] as const;\n\nconst MQTT_EVENTS = [\n 'connect',\n 'message',\n 'disconnect',\n 'error',\n 'close',\n 'end',\n 'reconnect',\n\n 'video-streaming.didStart',\n 'video-streaming.didRecord',\n 'video-streaming.didStop',\n 'video-streaming.didFlag',\n 'video-streaming.didTerminate',\n\n 'video-streaming.viewerDidBan',\n 'video-streaming.viewerDidUnban',\n\n 'liveReaction.created',\n] as const;\n\n/** @hidden */\nexport const createEventEmitter = () => {\n return mitt<Amity.Events>();\n};\n\n/**\n * Wraps the websocket events into the client's event emitter for\n * abstraction of transport.\n *\n * @param ws A websocket connection to listen from\n * @param emitter An event emitter to wire the events to\n *\n * @category Transport\n * @hidden\n */\nexport const proxyWebsocketEvents = (ws: Amity.Client['ws'], emitter: Amity.Client['emitter']) => {\n WS_EVENTS.forEach(event => {\n ws?.on(event, (param: Amity.Events[typeof event]) => {\n emitter.emit(event, param);\n });\n });\n};\n\nexport const proxyMqttEvents = (\n mqttClient: Amity.Client['mqtt'],\n emitter: Amity.Client['emitter'],\n) => {\n MQTT_EVENTS.forEach(event => {\n mqttClient?.on(event, (...params: any[]) => {\n emitter.emit(event, params.length === 1 ? params[0] : params);\n });\n });\n\n // @ts-ignore\n mqttClient.on('message', (topic: string, payload: Buffer) => {\n const message = JSON.parse(payload.toString());\n emitter.emit(message.eventType, message.data);\n });\n};\n\n/**\n * Standardize the subscription of SSE through web sockets\n *\n * @param client The current client for which to subscribe the event to\n * @param namespace A unique name for the logger\n * @param event The websocket event name\n * @param fn A wrapper for the callback.\n * @returns A dispose function to unsubscribe to the event\n *\n * @category Transport\n * @hidden\n */\nexport const createEventSubscriber = <T extends keyof Amity.Events>(\n client: Amity.Client,\n namespace: string,\n event: T,\n fn: Amity.Listener<Amity.Events[T]>,\n): Amity.Unsubscriber => {\n const { log, emitter } = client;\n\n const timestamp = Date.now();\n log(`${namespace}(tmpid: ${timestamp}) > listen`);\n\n const handler = (...payload: Parameters<typeof fn>) => {\n log(`${namespace}(tmpid: ${timestamp}) > trigger`, payload);\n\n try {\n fn(...payload);\n } catch (e) {\n log(`${namespace}(tmpid: ${timestamp}) > error`, e);\n }\n };\n\n emitter.on(event, handler);\n\n return () => {\n log(`${namespace}(tmpid: ${timestamp}) > dispose`);\n emitter.off(event, handler);\n };\n};\n\nexport const createMqttMessageSubscriber = <T extends keyof Amity.Events>(\n client: Amity.Client,\n namespace: string,\n event: T,\n fn: (params: Record<string, unknown>) => void,\n): Amity.Unsubscriber => {\n return createEventSubscriber(client, namespace, 'message', ([topic, message]) => {\n const payload = JSON.parse(message.toString());\n\n if (payload.eventType === event) {\n fn(payload.data);\n }\n });\n};\n\n/**\n * Wrapper around dispatch event\n *\n * @hidden\n */\nexport const fireEvent = <T extends keyof Amity.Events>(event: T, payload: Amity.Events[T]) => {\n const { emitter } = getActiveClient();\n scheduleTask(() => {\n emitter.emit(event, payload);\n });\n};\n"]}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport mitt from 'mitt';\n\nimport { getActiveClient } from '~/client/api/activeClient';\n\nimport { scheduleTask } from './microtasks';\n\n// need to sync up the list\nconst WS_EVENTS = [\n 'disconnected',\n 'error',\n 'connect_error',\n 'reconnect_error',\n 'reconnect_failed',\n 'sessionStateChange',\n // for internal use by accessTokenExpiryWatcher\n 'tokenExpired',\n] as const;\n\nconst MQTT_EVENTS = [\n 'connect',\n 'message',\n 'disconnect',\n 'error',\n 'close',\n 'end',\n 'reconnect',\n\n 'video-streaming.didStart',\n 'video-streaming.didRecord',\n 'video-streaming.didStop',\n 'video-streaming.didFlag',\n 'video-streaming.didTerminate',\n\n 'video-streaming.viewerDidBan',\n 'video-streaming.viewerDidUnban',\n\n 'liveReaction.created',\n] as const;\n\n/** @hidden */\nexport const createEventEmitter = () => {\n return mitt<Amity.Events>();\n};\n\nexport const proxyMqttEvents = (\n mqttClient: Amity.Client['mqtt'],\n emitter: Amity.Client['emitter'],\n) => {\n MQTT_EVENTS.forEach(event => {\n mqttClient?.on(event, (...params: any[]) => {\n emitter.emit(event, params.length === 1 ? params[0] : params);\n });\n });\n\n // @ts-ignore\n mqttClient.on('message', (topic: string, payload: Buffer) => {\n const message = JSON.parse(payload.toString());\n emitter.emit(message.eventType, message.data);\n });\n};\n\n/**\n * Standardize the subscription of SSE through web sockets\n *\n * @param client The current client for which to subscribe the event to\n * @param namespace A unique name for the logger\n * @param event The websocket event name\n * @param fn A wrapper for the callback.\n * @returns A dispose function to unsubscribe to the event\n *\n * @category Transport\n * @hidden\n */\nexport const createEventSubscriber = <T extends keyof Amity.Events>(\n client: Amity.Client,\n namespace: string,\n event: T,\n fn: Amity.Listener<Amity.Events[T]>,\n): Amity.Unsubscriber => {\n const { log, emitter } = client;\n\n const timestamp = Date.now();\n log(`${namespace}(tmpid: ${timestamp}) > listen`);\n\n const handler = (...payload: Parameters<typeof fn>) => {\n log(`${namespace}(tmpid: ${timestamp}) > trigger`, payload);\n\n try {\n fn(...payload);\n } catch (e) {\n log(`${namespace}(tmpid: ${timestamp}) > error`, e);\n }\n };\n\n emitter.on(event, handler);\n\n return () => {\n log(`${namespace}(tmpid: ${timestamp}) > dispose`);\n emitter.off(event, handler);\n };\n};\n\nexport const createMqttMessageSubscriber = <T extends keyof Amity.Events>(\n client: Amity.Client,\n namespace: string,\n event: T,\n fn: (params: Record<string, unknown>) => void,\n): Amity.Unsubscriber => {\n return createEventSubscriber(client, namespace, 'message', ([topic, message]) => {\n const payload = JSON.parse(message.toString());\n\n if (payload.eventType === event) {\n fn(payload.data);\n }\n });\n};\n\n/**\n * Wrapper around dispatch event\n *\n * @hidden\n */\nexport const fireEvent = <T extends keyof Amity.Events>(event: T, payload: Amity.Events[T]) => {\n const { emitter } = getActiveClient();\n scheduleTask(() => {\n emitter.emit(event, payload);\n });\n};\n"]}
@@ -1,4 +1,3 @@
1
1
  export * from './http';
2
- export * from './ws';
3
2
  export * from './mqtt';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC;AACrB,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC"}
@@ -1,4 +1,3 @@
1
1
  export * from './http';
2
- export * from './ws';
3
2
  export * from './mqtt';
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC;AACrB,cAAc,QAAQ,CAAC","sourcesContent":["export * from './http';\nexport * from './ws';\nexport * from './mqtt';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/transports/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC","sourcesContent":["export * from './http';\nexport * from './mqtt';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"queryGlobalFeed.d.ts","sourceRoot":"","sources":["../../../src/feedRepository/api/queryGlobalFeed.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;KAgBK;AACL,eAAO,MAAM,eAAe;aAClB,MAAM,eAAe,GAC5B,QACD,KAAK,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CACxF;IAgDD;;;;;;;;;;;;;SAaK;oBAEK,WAAW,sBAAsB,CAAC,CAAC,CAAC,CAAC,GAE3C,KAAK,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,GACvF,SAAS;CArBZ,CAAC"}
1
+ {"version":3,"file":"queryGlobalFeed.d.ts","sourceRoot":"","sources":["../../../src/feedRepository/api/queryGlobalFeed.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;KAgBK;AACL,eAAO,MAAM,eAAe;aAClB,MAAM,eAAe,GAC5B,QACD,KAAK,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CACxF;IAiDD;;;;;;;;;;;;;SAaK;oBAEK,WAAW,sBAAsB,CAAC,CAAC,CAAC,CAAC,GAE3C,KAAK,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,GACvF,SAAS;CArBZ,CAAC"}
@@ -29,14 +29,16 @@ import { prepareCommunityPayload } from '~/communityRepository/utils';
29
29
  export const queryGlobalFeed = async (query) => {
30
30
  const client = getActiveClient();
31
31
  client.log('feed/queryGlobalFeed', query);
32
- const _a = query !== null && query !== void 0 ? query : {}, { queryToken, dataTypes, resolveParent } = _a, params = __rest(_a, ["queryToken", "dataTypes", "resolveParent"]);
32
+ const _a = query !== null && query !== void 0 ? query : {}, { queryToken, dataTypes } = _a, params = __rest(_a, ["queryToken", "dataTypes"]);
33
33
  const options = (() => {
34
34
  if (queryToken)
35
35
  return { token: queryToken };
36
36
  return undefined;
37
37
  })();
38
38
  const { data: queryPayload } = await client.http.get(`/api/v4/me/global-feeds`, {
39
- params: Object.assign(Object.assign({}, params), { dataTypes, resolveParent: resolveParent !== null && resolveParent !== void 0 ? resolveParent : true, options }),
39
+ params: Object.assign(Object.assign({}, params), { dataTypes,
40
+ // If dataTypes is specified, resolveParent will be true
41
+ resolveParent: dataTypes && dataTypes.length > 0 ? true : undefined, options }),
40
42
  });
41
43
  const { paging } = queryPayload, payload = __rest(queryPayload, ["paging"]);
42
44
  const data = prepareMembershipPayload(payload, 'communityUsers');
@@ -1 +1 @@
1
- {"version":3,"file":"queryGlobalFeed.js","sourceRoot":"","sources":["../../../src/feedRepository/api/queryGlobalFeed.ts"],"names":[],"mappings":"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","sourcesContent":["import { getActiveClient } from '~/client/api/activeClient';\n\nimport { ingestInCache } from '~/cache/api/ingestInCache';\nimport { pullFromCache, pushToCache } from '~/cache/api';\nimport { getResolver } from '~/core/model';\nimport { prepareMembershipPayload } from '~/group/utils';\nimport { LinkedObject } from '~/utils/linkedObject';\nimport { prepareCommunityPayload } from '~/communityRepository/utils';\n\n/* begin_public_function\n id: feed.query.global_feed\n*/\n/**\n *\n * @deprecated This function will to be deprecated. Please use getGlobalFeed instead.\n *\n * ```js\n * import { queryGlobalFeed } from '@amityco/ts-sdk'\n * const posts = await queryGlobalFeed()\n * ```\n *\n * Queries a paginable list of {@link Amity.Post} objects\n *\n * @param query The query parameters\n * @returns A page of {@link Amity.Post} objects\n *\n * @category Feed API\n * @async\n * */\nexport const queryGlobalFeed = async (\n query?: Amity.QueryGlobalFeed,\n): Promise<\n Omit<Amity.Cached<Amity.Paged<Amity.Post> & Amity.Pagination>, 'nextPage' | 'prevPage'>\n> => {\n const client = getActiveClient();\n client.log('feed/queryGlobalFeed', query);\n\n const { queryToken, dataTypes, resolveParent, ...params } = query ?? {};\n\n const options = (() => {\n if (queryToken) return { token: queryToken };\n return undefined;\n })();\n\n const { data: queryPayload } = await client.http.get<Amity.PostPayload & Amity.Pagination>(\n `/api/v4/me/global-feeds`,\n {\n params: {\n ...params,\n dataTypes,\n resolveParent: resolveParent ?? true,\n options,\n },\n },\n );\n\n const { paging, ...payload } = queryPayload;\n\n const data = prepareMembershipPayload(payload, 'communityUsers');\n\n const { posts } = data;\n\n const { communities: processedCommunity } = prepareCommunityPayload(data);\n\n const cachedAt = client.cache && Date.now();\n\n if (client.cache) {\n ingestInCache({ ...data, communitis: processedCommunity });\n\n const cacheKey = ['globalFeed', 'query', { ...params, options } as Amity.Serializable];\n pushToCache(cacheKey, { posts: posts.map(getResolver('post')), paging });\n }\n\n return {\n data: posts.map(LinkedObject.post),\n cachedAt,\n paging,\n };\n};\n/* end_public_function */\n\n/**\n * ```js\n * import { queryGlobalFeed } from '@amityco/ts-sdk'\n * const posts = await queryGlobalFeed.locally()\n * ```\n *\n * Queries a paginable list of {@link Amity.Post} objects from cache\n *\n * @param query The query parameters\n * @returns A page of {@link Amity.Post} objects\n *\n * @category Feed API\n * @async\n * */\nqueryGlobalFeed.locally = (\n query?: Parameters<typeof queryGlobalFeed>[0],\n):\n | Omit<Amity.Cached<Amity.Paged<Amity.Post> & Amity.Pagination>, 'nextPage' | 'prevPage'>\n | undefined => {\n const client = getActiveClient();\n client.log('post/queryGlobalFeed.locally', query);\n\n if (!client.cache) return;\n\n const { ...params } = query ?? {};\n\n const queryKey = ['globalFeed', 'query', { ...params } as Amity.Serializable];\n const { data, cachedAt } =\n pullFromCache<{ posts: Amity.Post['postId'][] } & Amity.Pagination>(queryKey) ?? {};\n\n if (!data?.posts.length) return;\n\n const posts: Amity.Post[] = data.posts\n .map(postId => pullFromCache<Amity.InternalPost>(['post', 'get', postId])!)\n .filter(Boolean)\n .map(({ data }) => data)\n .map(LinkedObject.post);\n\n const { paging } = data;\n\n return posts.length === data?.posts?.length\n ? {\n data: posts,\n cachedAt,\n paging,\n }\n : undefined;\n};\n"]}
1
+ {"version":3,"file":"queryGlobalFeed.js","sourceRoot":"","sources":["../../../src/feedRepository/api/queryGlobalFeed.ts"],"names":[],"mappings":"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","sourcesContent":["import { getActiveClient } from '~/client/api/activeClient';\n\nimport { ingestInCache } from '~/cache/api/ingestInCache';\nimport { pullFromCache, pushToCache } from '~/cache/api';\nimport { getResolver } from '~/core/model';\nimport { prepareMembershipPayload } from '~/group/utils';\nimport { LinkedObject } from '~/utils/linkedObject';\nimport { prepareCommunityPayload } from '~/communityRepository/utils';\n\n/* begin_public_function\n id: feed.query.global_feed\n*/\n/**\n *\n * @deprecated This function will to be deprecated. Please use getGlobalFeed instead.\n *\n * ```js\n * import { queryGlobalFeed } from '@amityco/ts-sdk'\n * const posts = await queryGlobalFeed()\n * ```\n *\n * Queries a paginable list of {@link Amity.Post} objects\n *\n * @param query The query parameters\n * @returns A page of {@link Amity.Post} objects\n *\n * @category Feed API\n * @async\n * */\nexport const queryGlobalFeed = async (\n query?: Amity.QueryGlobalFeed,\n): Promise<\n Omit<Amity.Cached<Amity.Paged<Amity.Post> & Amity.Pagination>, 'nextPage' | 'prevPage'>\n> => {\n const client = getActiveClient();\n client.log('feed/queryGlobalFeed', query);\n\n const { queryToken, dataTypes, ...params } = query ?? {};\n\n const options = (() => {\n if (queryToken) return { token: queryToken };\n return undefined;\n })();\n\n const { data: queryPayload } = await client.http.get<Amity.PostPayload & Amity.Pagination>(\n `/api/v4/me/global-feeds`,\n {\n params: {\n ...params,\n dataTypes,\n // If dataTypes is specified, resolveParent will be true\n resolveParent: dataTypes && dataTypes.length > 0 ? true : undefined,\n options,\n },\n },\n );\n\n const { paging, ...payload } = queryPayload;\n\n const data = prepareMembershipPayload(payload, 'communityUsers');\n\n const { posts } = data;\n\n const { communities: processedCommunity } = prepareCommunityPayload(data);\n\n const cachedAt = client.cache && Date.now();\n\n if (client.cache) {\n ingestInCache({ ...data, communitis: processedCommunity });\n\n const cacheKey = ['globalFeed', 'query', { ...params, options } as Amity.Serializable];\n pushToCache(cacheKey, { posts: posts.map(getResolver('post')), paging });\n }\n\n return {\n data: posts.map(LinkedObject.post),\n cachedAt,\n paging,\n };\n};\n/* end_public_function */\n\n/**\n * ```js\n * import { queryGlobalFeed } from '@amityco/ts-sdk'\n * const posts = await queryGlobalFeed.locally()\n * ```\n *\n * Queries a paginable list of {@link Amity.Post} objects from cache\n *\n * @param query The query parameters\n * @returns A page of {@link Amity.Post} objects\n *\n * @category Feed API\n * @async\n * */\nqueryGlobalFeed.locally = (\n query?: Parameters<typeof queryGlobalFeed>[0],\n):\n | Omit<Amity.Cached<Amity.Paged<Amity.Post> & Amity.Pagination>, 'nextPage' | 'prevPage'>\n | undefined => {\n const client = getActiveClient();\n client.log('post/queryGlobalFeed.locally', query);\n\n if (!client.cache) return;\n\n const { ...params } = query ?? {};\n\n const queryKey = ['globalFeed', 'query', { ...params } as Amity.Serializable];\n const { data, cachedAt } =\n pullFromCache<{ posts: Amity.Post['postId'][] } & Amity.Pagination>(queryKey) ?? {};\n\n if (!data?.posts.length) return;\n\n const posts: Amity.Post[] = data.posts\n .map(postId => pullFromCache<Amity.InternalPost>(['post', 'get', postId])!)\n .filter(Boolean)\n .map(({ data }) => data)\n .map(LinkedObject.post);\n\n const { paging } = data;\n\n return posts.length === data?.posts?.length\n ? {\n data: posts,\n cachedAt,\n paging,\n }\n : undefined;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PaginationController.d.ts","sourceRoot":"","sources":["../../../../src/feedRepository/observers/getGlobalFeed/PaginationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAElF,qBAAa,8BAA+B,SAAQ,oBAAoB,CACtE,MAAM,EACN,KAAK,CAAC,wBAAwB,CAC/B;IACO,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,wBAAwB,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;CAgBxF"}
1
+ {"version":3,"file":"PaginationController.d.ts","sourceRoot":"","sources":["../../../../src/feedRepository/observers/getGlobalFeed/PaginationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAElF,qBAAa,8BAA+B,SAAQ,oBAAoB,CACtE,MAAM,EACN,KAAK,CAAC,wBAAwB,CAC/B;IACO,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,wBAAwB,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;CAiBxF"}