@amityco/ts-sdk-react-native 7.26.1-fbe5a6dd.0 → 7.27.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 (59) hide show
  1. package/dist/@types/core/transport.d.ts +3 -3
  2. package/dist/@types/core/transport.d.ts.map +1 -1
  3. package/dist/@types/domains/client.d.ts +9 -0
  4. package/dist/@types/domains/client.d.ts.map +1 -1
  5. package/dist/@types/domains/content.d.ts +6 -1
  6. package/dist/@types/domains/content.d.ts.map +1 -1
  7. package/dist/@types/domains/file.d.ts +11 -2
  8. package/dist/@types/domains/file.d.ts.map +1 -1
  9. package/dist/@types/domains/liveViewerCount.d.ts +22 -0
  10. package/dist/@types/domains/liveViewerCount.d.ts.map +1 -0
  11. package/dist/@types/index.d.ts +1 -0
  12. package/dist/@types/index.d.ts.map +1 -1
  13. package/dist/client/api/createClient.d.ts.map +1 -1
  14. package/dist/client/api/getLiveViewerCountConfig.d.ts +24 -0
  15. package/dist/client/api/getLiveViewerCountConfig.d.ts.map +1 -0
  16. package/dist/client/api/index.d.ts +1 -0
  17. package/dist/client/api/index.d.ts.map +1 -1
  18. package/dist/client/api/loginWithAccessToken.d.ts.map +1 -1
  19. package/dist/client/api/logout.d.ts.map +1 -1
  20. package/dist/client/api/renewTokenWithHandler.d.ts.map +1 -1
  21. package/dist/client/api/renewWithAccessToken.d.ts.map +1 -1
  22. package/dist/client/api/resumeSession.d.ts.map +1 -1
  23. package/dist/client/api/tests/renewTokenWithHandler.test.d.ts +2 -0
  24. package/dist/client/api/tests/renewTokenWithHandler.test.d.ts.map +1 -0
  25. package/dist/client/api/tests/renewWithAccessToken.test.d.ts +2 -0
  26. package/dist/client/api/tests/renewWithAccessToken.test.d.ts.map +1 -0
  27. package/dist/client/api/tests/validateAccessToken.test.d.ts +2 -0
  28. package/dist/client/api/tests/validateAccessToken.test.d.ts.map +1 -0
  29. package/dist/client/api/validateAccessToken.d.ts +1 -1
  30. package/dist/client/api/validateAccessToken.d.ts.map +1 -1
  31. package/dist/core/transports/mqtt.d.ts.map +1 -1
  32. package/dist/fileRepository/api/getFile.d.ts.map +1 -1
  33. package/dist/fileRepository/api/uploadImage.d.ts.map +1 -1
  34. package/dist/fileRepository/api/uploadVideo.d.ts.map +1 -1
  35. package/dist/index.cjs.js +221 -117
  36. package/dist/index.esm.js +222 -118
  37. package/dist/index.umd.js +1 -1
  38. package/dist/postRepository/events/utils.d.ts.map +1 -1
  39. package/dist/userRepository/observers/index.d.ts +1 -0
  40. package/dist/userRepository/observers/index.d.ts.map +1 -1
  41. package/dist/userRepository/observers/searchUserByDisplayName.d.ts +2 -0
  42. package/dist/userRepository/observers/searchUserByDisplayName.d.ts.map +1 -1
  43. package/dist/userRepository/observers/searchUsers.d.ts +26 -0
  44. package/dist/userRepository/observers/searchUsers.d.ts.map +1 -0
  45. package/dist/userRepository/observers/tests/integrations/searchUsers.integration.test.d.ts +2 -0
  46. package/dist/userRepository/observers/tests/integrations/searchUsers.integration.test.d.ts.map +1 -0
  47. package/dist/userRepository/observers/tests/searchUsers.test.d.ts +2 -0
  48. package/dist/userRepository/observers/tests/searchUsers.test.d.ts.map +1 -0
  49. package/dist/utils/linkedObject/fileLinkedObject.d.ts +2 -0
  50. package/dist/utils/linkedObject/fileLinkedObject.d.ts.map +1 -0
  51. package/dist/utils/linkedObject/index.d.ts +1 -0
  52. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  53. package/dist/utils/linkedObject/postLinkedObject.d.ts.map +1 -1
  54. package/dist/utils/tests/dummy/file.d.ts.map +1 -1
  55. package/package.json +1 -1
  56. package/dist/postRepository/events/parentPost.d.ts +0 -32
  57. package/dist/postRepository/events/parentPost.d.ts.map +0 -1
  58. package/dist/postRepository/events/tests/parentPost.test.d.ts +0 -2
  59. package/dist/postRepository/events/tests/parentPost.test.d.ts.map +0 -1
package/dist/index.esm.js CHANGED
@@ -308,10 +308,17 @@ var NotificationRolesFilterTypeEnum;
308
308
  NotificationRolesFilterTypeEnum["ONLY"] = "only";
309
309
  })(NotificationRolesFilterTypeEnum || (NotificationRolesFilterTypeEnum = {}));
310
310
 
311
+ var AmityLiveViewerCountMode;
312
+ (function (AmityLiveViewerCountMode) {
313
+ AmityLiveViewerCountMode["ALWAYS_SHOW"] = "always";
314
+ AmityLiveViewerCountMode["HIDE_ENTIRELY"] = "hidden";
315
+ AmityLiveViewerCountMode["SHOW_ABOVE_MINIMUM"] = "above-minimum";
316
+ })(AmityLiveViewerCountMode || (AmityLiveViewerCountMode = {}));
317
+
311
318
  function getVersion() {
312
319
  try {
313
- // the string ''v7.26.0-esm'' should be replaced by actual value by @rollup/plugin-replace
314
- return 'v7.26.0-esm';
320
+ // the string ''v7.27.0-esm'' should be replaced by actual value by @rollup/plugin-replace
321
+ return 'v7.27.0-esm';
315
322
  }
316
323
  catch (error) {
317
324
  return '__dev__';
@@ -2461,10 +2468,11 @@ var MqttError;
2461
2468
  MqttError[MqttError["BAD_USERNAME_OR_PASSWORD"] = 134] = "BAD_USERNAME_OR_PASSWORD";
2462
2469
  MqttError[MqttError["NOT_AUTHORIZED"] = 135] = "NOT_AUTHORIZED";
2463
2470
  })(MqttError || (MqttError = {}));
2464
- // MQTT 5 session expiry, in seconds. 0xFFFFFFFF keeps the session alive
2465
- // indefinitely, matching the previous 3.1.1 `clean: false` behaviour where the
2466
- // broker retained the session (and its subscriptions) across disconnects.
2467
- const SESSION_EXPIRY_INTERVAL = 0xffffffff;
2471
+ // MQTT 5 session expiry, in seconds. Under MQTT 3.1.1 the broker capped
2472
+ // retained sessions at ~30 min; under MQTT 5 the client's value wins, so an
2473
+ // unbounded value ("never") left disconnected sessions piling up on the broker.
2474
+ // 1800s matches the previous 3.1.1 cap.
2475
+ const SESSION_EXPIRY_INTERVAL = 1800;
2468
2476
  function getMqttOptions(params) {
2469
2477
  return Object.assign({ clean: false, clientId: `mqttjs_ + ${Math.random().toString(16).substring(2, 10)}`, protocolId: 'MQTT', protocolVersion: 5, reconnectPeriod: RETRY_BASE_TIMEOUT, resubscribe: true,
2470
2478
  // The broker/LB drops idle sockets at ~60s. mqtt.js v5 sends its first
@@ -2581,8 +2589,16 @@ const createMqttTransport = (endpoint) => {
2581
2589
  }
2582
2590
  return {
2583
2591
  connect,
2584
- async disconnect() {
2592
+ async disconnect(options) {
2585
2593
  if (this.connected) {
2594
+ // On logout we want the broker to release the session immediately
2595
+ // instead of keeping it around for SESSION_EXPIRY_INTERVAL. mqtt.js
2596
+ // only sends a DISCONNECT packet when `force` is false; force=true
2597
+ // just tears the socket down and the broker keeps the session until
2598
+ // it expires on its own.
2599
+ if (options === null || options === void 0 ? void 0 : options.endSession) {
2600
+ return new Promise(resolve => mqttClient === null || mqttClient === void 0 ? void 0 : mqttClient.end(false, { reasonCode: 0, properties: { sessionExpiryInterval: 0 } }, () => resolve()));
2601
+ }
2586
2602
  return new Promise(resolve => mqttClient === null || mqttClient === void 0 ? void 0 : mqttClient.end(true, undefined, () => resolve()));
2587
2603
  }
2588
2604
  },
@@ -5078,6 +5094,51 @@ const getCoreUserSettings = async () => {
5078
5094
  return data;
5079
5095
  };
5080
5096
 
5097
+ const DEFAULT_CONFIG = {
5098
+ mode: AmityLiveViewerCountMode.ALWAYS_SHOW,
5099
+ threshold: 50,
5100
+ };
5101
+ const isValidMode = (value) => value === AmityLiveViewerCountMode.ALWAYS_SHOW ||
5102
+ value === AmityLiveViewerCountMode.HIDE_ENTIRELY ||
5103
+ value === AmityLiveViewerCountMode.SHOW_ABOVE_MINIMUM;
5104
+ const isValidThreshold = (value) => typeof value === 'number' && Number.isInteger(value) && value >= 1 && value <= 1000;
5105
+ /**
5106
+ * ```js
5107
+ * import { getLiveViewerCountConfig } from '@amityco/ts-sdk'
5108
+ * const config = await getLiveViewerCountConfig()
5109
+ * ```
5110
+ *
5111
+ * Fetches the network-level {@link Amity.LiveViewerCountConfig} governing
5112
+ * how the live viewer count is displayed to viewers on a livestream.
5113
+ *
5114
+ * Cold-read — no observable, no cache. Call once per livestream mount /
5115
+ * rejoin. Admin-driven config changes take effect on the next join, not
5116
+ * mid-stream.
5117
+ *
5118
+ * On a malformed payload (unknown mode, out-of-range or missing threshold)
5119
+ * the SDK falls open to `{ mode: ALWAYS_SHOW, threshold: 50 }` and logs a
5120
+ * warning. Network errors reject.
5121
+ *
5122
+ * @returns A Promise of {@link Amity.LiveViewerCountConfig}
5123
+ *
5124
+ * @category Client API
5125
+ * @async
5126
+ */
5127
+ /* begin_public_function id: client.getLiveViewerCountConfig */
5128
+ const getLiveViewerCountConfig = async () => {
5129
+ var _a, _b;
5130
+ const client = getActiveClient();
5131
+ const { data } = await client.http.get('/api/v3/network-settings/video-streaming');
5132
+ const mode = (_a = data === null || data === void 0 ? void 0 : data.videoStreaming) === null || _a === void 0 ? void 0 : _a.viewerCountDisplayMode;
5133
+ const threshold = (_b = data === null || data === void 0 ? void 0 : data.videoStreaming) === null || _b === void 0 ? void 0 : _b.viewerCountDisplayMinimum;
5134
+ if (!isValidMode(mode) || !isValidThreshold(threshold)) {
5135
+ client.log('client/getLiveViewerCountConfig', 'malformed videoStreaming settings, falling back to default', { mode, threshold });
5136
+ return DEFAULT_CONFIG;
5137
+ }
5138
+ return { mode, threshold };
5139
+ };
5140
+ /* end_public_function */
5141
+
5081
5142
  /* begin_public_function
5082
5143
  id: client.getProductCatalogueSetting
5083
5144
  */
@@ -5444,7 +5505,7 @@ const logout = async () => {
5444
5505
  const client = getActiveClient();
5445
5506
  client.log('client/api/disconnectClient');
5446
5507
  if (client.mqtt && client.mqtt.connected) {
5447
- client.mqtt.disconnect();
5508
+ await client.mqtt.disconnect({ endSession: true });
5448
5509
  }
5449
5510
  /*
5450
5511
  * for cases when session state is terminated (example on ban) or token expired,
@@ -5465,6 +5526,7 @@ const logout = async () => {
5465
5526
  client.userId = undefined;
5466
5527
  client.token = undefined;
5467
5528
  client.loginType = undefined;
5529
+ client.isGloballyBanned = false;
5468
5530
  client.http.defaults.headers.common.Authorization = '';
5469
5531
  client.http.defaults.metadata = {
5470
5532
  tokenExpiry: '',
@@ -7760,19 +7822,21 @@ const renewal = () => {
7760
7822
 
7761
7823
  const validateAccessToken = async ({ token, userId }) => {
7762
7824
  const client = getActiveClient();
7763
- // Validate token using sessions API
7764
- await client.http.get('/api/v3/sessions', {
7825
+ // Verify the token and hydrate the caller in a single call.
7826
+ const { data } = await client.http.get('/api/v4/sessions', {
7765
7827
  headers: {
7766
7828
  Authorization: `Bearer ${token.accessToken}`,
7767
7829
  },
7768
7830
  });
7769
- // Get user details
7770
- const { data: { users }, } = await client.http.get(`/api/v3/users/${userId}`, {
7771
- headers: {
7772
- Authorization: `Bearer ${token.accessToken}`,
7773
- },
7774
- });
7775
- const user = users.find((u) => u.userId === userId);
7831
+ const { users, files, userType } = data;
7832
+ const [user] = users;
7833
+ if (userId && (user === null || user === void 0 ? void 0 : user.userId) && userId !== user.userId) {
7834
+ client.log('client/api/validateAccessToken', {
7835
+ message: 'session userId does not match the token userId; using the server value',
7836
+ tokenUserId: userId,
7837
+ sessionUserId: user.userId,
7838
+ });
7839
+ }
7776
7840
  client.http.defaults.headers.common.Authorization = `Bearer ${token.accessToken}`;
7777
7841
  client.http.defaults.metadata = {
7778
7842
  tokenExpiry: token.expiresAt,
@@ -7786,6 +7850,8 @@ const validateAccessToken = async ({ token, userId }) => {
7786
7850
  isUserDeleted: false,
7787
7851
  };
7788
7852
  client.token = token;
7853
+ ingestInCache(prepareUserPayload({ users, files }));
7854
+ setCurrentUserType(userType);
7789
7855
  return user;
7790
7856
  };
7791
7857
 
@@ -7868,14 +7934,6 @@ const loginWithAccessToken = async (accessToken) => {
7868
7934
  setSessionState("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
7869
7935
  throw new ASCError(`User ${userId} has not been found`, 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
7870
7936
  }
7871
- if (user.isDeleted) {
7872
- setSessionState("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
7873
- throw new ASCError(`User ${userId} has been deleted`, 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
7874
- }
7875
- if (user.isGlobalBanned) {
7876
- setSessionState("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
7877
- throw new ASCError(`User ${userId} is globally banned`, 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
7878
- }
7879
7937
  // Set userId and login method flag
7880
7938
  client.userId = user.userId;
7881
7939
  // Set login method flag to 'accessToken' in platform-specific login session
@@ -7889,8 +7947,10 @@ const loginWithAccessToken = async (accessToken) => {
7889
7947
  catch (error) {
7890
7948
  // If error occurs, revert session state to not logged in
7891
7949
  setSessionState("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
7892
- // Re-throw if it's already an ASCError
7893
7950
  if (error instanceof ASCError) {
7951
+ if (error.code === 400312 /* Amity.ServerError.GLOBAL_BAN */) {
7952
+ client.isGloballyBanned = true;
7953
+ }
7894
7954
  throw error;
7895
7955
  }
7896
7956
  // Wrap other errors
@@ -7958,11 +8018,18 @@ const renewWithAccessToken = async (accessToken) => {
7958
8018
  await loginWithAccessToken(accessToken);
7959
8019
  }
7960
8020
  else {
7961
- // about to expire
7962
- await validateAccessToken({
7963
- token: tokenObject,
7964
- userId,
7965
- });
8021
+ try {
8022
+ await validateAccessToken({
8023
+ token: tokenObject,
8024
+ userId,
8025
+ });
8026
+ }
8027
+ catch (error) {
8028
+ if (error instanceof ASCError && error.code === 400312 /* Amity.ServerError.GLOBAL_BAN */) {
8029
+ client.isGloballyBanned = true;
8030
+ }
8031
+ throw error;
8032
+ }
7966
8033
  }
7967
8034
  };
7968
8035
  /* end_public_function */
@@ -7979,6 +8046,9 @@ const renewTokenWithHandler = async ({ useScheduledTask = false, }) => {
7979
8046
  if (!client.userId || !client.accessTokenHandler) {
7980
8047
  return;
7981
8048
  }
8049
+ if (client.isGloballyBanned) {
8050
+ return;
8051
+ }
7982
8052
  try {
7983
8053
  const newToken = await client.accessTokenHandler.onTokenRenew(client.userId);
7984
8054
  if (useScheduledTask) {
@@ -8577,6 +8647,7 @@ const createClient = (apiKey, apiRegion = API_REGIONS.SG, { debugSession = DEFAU
8577
8647
  getCoreUserSettings,
8578
8648
  getSocialSettings,
8579
8649
  getChatSettings,
8650
+ getLiveViewerCountConfig,
8580
8651
  getVisitorDeviceId: getDeviceId,
8581
8652
  getMessagePreviewSetting: getMessagePreviewSetting$1,
8582
8653
  onRTEConnectionStateChange,
@@ -8716,21 +8787,13 @@ const resumeSession = async (params, sessionHandler, config) => {
8716
8787
  if (user == null) {
8717
8788
  throw new ASCError(`${params.userId} has not been found`, 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
8718
8789
  }
8719
- if (user.isDeleted) {
8720
- terminateClient("userDeleted" /* Amity.TokenTerminationReason.USER_DELETED */);
8721
- return false;
8722
- }
8723
- if (user.isGlobalBanned) {
8724
- terminateClient("globalBan" /* Amity.TokenTerminationReason.GLOBAL_BAN */);
8725
- return false;
8726
- }
8727
8790
  client.userId = user.userId;
8728
8791
  client.sessionHandler = sessionHandler;
8729
8792
  /*
8730
8793
  * Cannot push to subscriptions as watcher needs to continue working even if
8731
8794
  * token expires
8732
8795
  */
8733
- unsubWatcher = client.accessTokenExpiryWatcher(sessionHandler);
8796
+ unsubWatcher = client.accessTokenExpiryWatcher();
8734
8797
  setActiveUser(user);
8735
8798
  }
8736
8799
  catch (error) {
@@ -9716,6 +9779,7 @@ var index$s = /*#__PURE__*/Object.freeze({
9716
9779
  setCurrentUserType: setCurrentUserType,
9717
9780
  setAccessTokenHandler: setAccessTokenHandler,
9718
9781
  getChatSettings: getChatSettings,
9782
+ getLiveViewerCountConfig: getLiveViewerCountConfig,
9719
9783
  getCoreUserSettings: getCoreUserSettings,
9720
9784
  notifications: notifications,
9721
9785
  enableAutoSubscriptions: enableAutoSubscriptions,
@@ -12632,7 +12696,7 @@ const getWatchSessionStorage = () => {
12632
12696
  return storageInstance;
12633
12697
  };
12634
12698
 
12635
- const privateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDAARz+hmBgi8pJ\nQb8LeY41gtHhk+ACMwRfhsn7GqpqRQNG2qU0755mzZuVDUqjQMGSo8THJB7O+OJs\nflbZRkFXlFoFOVNw1UpNOgwEQZ6wB9oRwzepTJAfF1sVhm/o/ixvXh1zDFNDy6yZ\npXyiiJHUVxqyjllZhxnwdvjoVtDs6hW6awG09bB9nh/TTejlUKXoAgzqVwu/1QMu\nUVViET495elEe19aUarEy+oL2iKeXCEvqda/pWNBdbieFyJvvZ08HN8dPuT88wq2\njZLEAth1vrwQ2IAa4ktaLcBQdLJgIkrbDvAiVZ8lQAjS/bq5vXQikTGvoPlC5bbn\nvuOM/3eLAgMBAAECggEAVZ+peHAghq2QVj71nX5lxsNCKaCyYwixSJBpfouTt7Rz\nE6PpzMOXFi1W1o+I22jDakuSM2SOQKqI/u0QefB0r0O/KVk5NrZHXk0mkrdYtxOp\nUgaGyf8UvmjB+8VqHrNKyZdk9qtmbnNj01kTTcAtmE4H39zPR7eR/8Rul94vaZbs\nwCnKJS3mLT3JxyGug6lxanveKkjG+CKC1nJQYWaxCJxaFSzbwXQPvDhB+TvrIbee\npd5v4EAyEJohpr+T9oDGGJkb/KARBZCtwLyB976PKJwwBA8MRVL1i5QwawuMiMq5\nUtnOnbGKtCeFzaLbNU0Qi8bqyims84EQxC6DOu1fkQKBgQDdvsoBsEhsOXV7hlIJ\naEd0eSJZVkdqimxH8uGoMM2FeNaOrcB6yBXqTSP0R3OIyf8eaY6yjRvP30ZNXcll\n/gD3O1Mu6YmWQdt1W2WA6pKOsUuPXasf0pdOF7IiFZKlSabz5YHXFqwVuqm8loaj\nsXel3YWqPVdHiankE7tz+3ssnQKBgQDdqi4TNdD1MdEpihx19jr0QjUiXW3939FK\nqp30HESPEGDGQzXdmJgif9HhZb+cJSuWaHEbjgBrYahvgCF+y6LbEpOD+D/dmT+s\nDEAQaR84sah6dokwPjV8fjBSrcVFjCS+doxv0d3p/9OUEeyUhFrY03nxtIEYkLIE\n/Zvn37b4RwKBgQCLENVFe9XfsaVhQ5r9dV2iyTlmh7qgMZG5CbTFs12hQGhm8McO\n+Z7s41YSJCFr/yq1WwP4LJDtrBw99vyQr1zRsG35tNLp3gGRNzGQSQyC2uQFVHw2\np+7mNewsfhUK/gbrXNsyFnDz6635rPlhfbII3sWuP2wWXFqkxE9CbMwR7QKBgQC6\nawDMzxmo2/iYArrkyevSuEuPVxvFwpF1RgAI6C0QVCnPE38dmdN4UB7mfHekje4W\nVEercMURidPp0cxZolCYBQtilUjAyL0vqC3In1/Ogjq6oy3FEMxSop1pKxMY5j+Q\nnoqFD+6deLUrddeNH7J3X4LSr4dSbX4JjG+tlgt+yQKBgQCuwTL4hA6KqeInQ0Ta\n9VQX5Qr8hFlqJz1gpymi/k63tW/Ob8yedbg3WWNWyShwRMFYyY9S81ITFWM95uL6\nvF3x9rmRjwElJw9PMwVu6dmf/CO0Z1wzXSp2VVD12gbrUD/0/d7MUoJ9LgC8X8f/\nn0txLHYGHbx+nf95+JUg6lV3hg==\n-----END PRIVATE KEY-----";
12699
+ const privateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHo80SecH7FuF2\nhFYnb+l26/VN8UMLXAQFLnxciNTEwkGVFMpdezlH8rU2HtUJL4RETogbAOLVY0XM\njs6sPn8G1nALmh9qeDpUtVqFOVtBHxEZ910TLOtQiunjqJKO5nWdqZ71EC3OFluR\niGQkO84BiIFbv37ub7xl3S8XarbtKoLcyVpkDHi+1wx1pgCAn6gtBUgckPL5NR8j\nLseabl3HAXQfhTCKo4tmOFM2Dxwl1IUMmIJrJg/aIU/U0tj/1Eoo7mG0JcNWX19l\nW3EecCbi0ncCJOrkUdwlBrcjaMayaX/ubEwyUeTGiLdyc4L3GRLHjyK8xgVNXRMH\nbZWJ2a5NAgMBAAECggEASxuE+35zTFO/XydKgmvIGcWL9FbgMlXb7Vcf0nBoG945\nbiz0NVc2paraIhJXc608xbYF3qLmtAE1MVBI0ORyRdBHNxY024l/6H6SH60Ed+uI\nM4ysp5ourY6Vj+DLwpdRiI9YDjqYAQDIUmhNxJP7XPhOMoZI6st+xZQBM34ic/bv\nAMSJm9OZphSp3+qXVkFZztr2mxD2EZSJJLYxi8BCdgM2qhazalbcJ6zDKHCZWVWm\n8RRxDGldyMb/237JxETzP40tAlzOZDmBAbUgEnurDJ93RVDIE3rbZUshwgeQd18a\nem096mWgvB1AIKYgsTAR3pw+V19YWAjq/glP6fz8wQKBgQD/oQq+ukKF0PRgBeM5\ngeTjSwsdGppQLmf5ndujvoiz/TpdjDEPu6R8kigQr1rG2t4K/yfdZoI8RdmJD1al\n3Q7N9hofooSy4rj6E3txzWZCHJjHad2cnCp/O26HiReGAl7wTcfTmNdiFHhZQzm5\nJBkvWAiwuvQMNfEbnXxw6/vIDwKBgQDH7fX8gsc77JLvAWgp1MaQN/sbqVb6JeT1\nFQfR8E/WFCSmzQBtNzd5KgYuCeelwr/8DyYytvN2BzCYZXp73gI1jF3YlW5jVn74\nOY6TwQ095digwo6Z0yuxopdIOApKgAkL9PRKgNrqAf3NAyMua6lOGifzjDojC3KU\nfylQmxMn4wKBgHp2B9O/H0dEBw5JQ8W0+JX6yWQz7mEjGiR2/1W+XXb8hQ1zr709\nw1r6Gb+EghRpnZ3fBpYGGbYOMFx8wKHM+N6qW3F0ReX8v2juFGE8aRSa5oYBrWzt\nU16Idjbv8hj84cZ1PJmdyvDtpYn9rpWHOZl4rxEbPvbqkIsOMyNVqdT5AoGAOSge\nmwIIU2le2FVeohbibXiToWTYKMuMmURZ5/r72AgKMmWJKbAPe+Q3wBG01/7FRBpQ\noU8Ma0HC8s6QJbliiEyIx9JwrJWd1vkdecBHONrtA4ibm/5zD2WcOllLF+FitLhi\n3qnX6+6F0IaFGFBPJrTzlv0P4dTz/OAdv52V7GECgYEA2TttOKBAqWllgOaZOkql\nLVMJVmgR7s6tLi1+cEP8ZcapV9aRbRzTAKXm4f8AEhtlG9F9kCOvHYCYGi6JaiWJ\nZkHjeex3T+eE6Di6y5Bm/Ift5jtVhJ4jCVwHOKTMej79NPUFTJfv8hCo29haBDv6\nRXFrv+T21KCcw8k3sJeJWWQ=\n-----END PRIVATE KEY-----";
12636
12700
  /*
12637
12701
  * The crypto algorithm used for importing key and signing string
12638
12702
  */
@@ -13060,6 +13124,21 @@ const productTagLinkedObject = (productTag) => {
13060
13124
  return Object.assign(Object.assign({}, productTag), { product: internalProduct ? productLinkedObject(internalProduct) : undefined });
13061
13125
  };
13062
13126
 
13127
+ const fileLinkedObject = (file) => {
13128
+ var _a, _b, _c;
13129
+ if (!file)
13130
+ return file;
13131
+ if (file.type === 'video') {
13132
+ const video = (_b = (_a = file.attributes) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.video;
13133
+ return Object.assign(Object.assign({}, file), { getWidth: () => { var _a; return (_a = video === null || video === void 0 ? void 0 : video.width) !== null && _a !== void 0 ? _a : 0; }, getHeight: () => { var _a; return (_a = video === null || video === void 0 ? void 0 : video.height) !== null && _a !== void 0 ? _a : 0; }, getRotation: () => { var _a; return (_a = video === null || video === void 0 ? void 0 : video.rotation) !== null && _a !== void 0 ? _a : 0; } });
13134
+ }
13135
+ if (file.type === 'image') {
13136
+ const metadata = (_c = file.attributes) === null || _c === void 0 ? void 0 : _c.metadata;
13137
+ return Object.assign(Object.assign({}, file), { getWidth: () => { var _a; return (_a = metadata === null || metadata === void 0 ? void 0 : metadata.width) !== null && _a !== void 0 ? _a : 0; }, getHeight: () => { var _a; return (_a = metadata === null || metadata === void 0 ? void 0 : metadata.height) !== null && _a !== void 0 ? _a : 0; } });
13138
+ }
13139
+ return file;
13140
+ };
13141
+
13063
13142
  const postLinkedObject = (post) => {
13064
13143
  return shallowClone(post, {
13065
13144
  childrenPosts: post.children
@@ -13098,85 +13177,99 @@ const postLinkedObject = (post) => {
13098
13177
  .filter(Boolean) || []);
13099
13178
  },
13100
13179
  get creator() {
13180
+ // The id is checked for a value, not just for presence: a payload can
13181
+ // carry the field as null, and a null segment in a cache key throws while
13182
+ // being encoded rather than simply missing the cache.
13183
+ if (!post.postedUserId)
13184
+ return undefined;
13101
13185
  const cacheData = pullFromCache(['user', 'get', post.postedUserId]);
13102
13186
  if (!(cacheData === null || cacheData === void 0 ? void 0 : cacheData.data))
13103
- return;
13187
+ return undefined;
13104
13188
  return userLinkedObject(cacheData.data);
13105
13189
  },
13106
13190
  get targetCommunity() {
13107
13191
  var _a;
13192
+ if (!post.targetId)
13193
+ return undefined;
13108
13194
  const communityCache = (_a = pullFromCache([
13109
13195
  'community',
13110
13196
  'get',
13111
13197
  post.targetId,
13112
13198
  ])) === null || _a === void 0 ? void 0 : _a.data;
13113
13199
  if (!communityCache)
13114
- return;
13200
+ return undefined;
13115
13201
  return communityLinkedObject(communityCache);
13116
13202
  },
13117
13203
  getImageInfo() {
13118
13204
  var _a, _b;
13119
- return isAmityImagePost(post)
13120
- ? (_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.fileId])) === null || _b === void 0 ? void 0 : _b.data
13121
- : undefined;
13205
+ if (!isAmityImagePost(post) || !((_a = post.data) === null || _a === void 0 ? void 0 : _a.fileId))
13206
+ return undefined;
13207
+ return fileLinkedObject((_b = pullFromCache(['file', 'get', post.data.fileId])) === null || _b === void 0 ? void 0 : _b.data);
13122
13208
  },
13123
13209
  getVideoInfo() {
13124
13210
  var _a, _b, _c;
13125
- return isAmityVideoPost(post)
13126
- ? (_c = pullFromCache(['file', 'get', (_b = (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.videoFileId) === null || _b === void 0 ? void 0 : _b.original])) === null || _c === void 0 ? void 0 : _c.data
13127
- : undefined;
13211
+ const originalFileId = isAmityVideoPost(post) ? (_b = (_a = post.data) === null || _a === void 0 ? void 0 : _a.videoFileId) === null || _b === void 0 ? void 0 : _b.original : undefined;
13212
+ if (!originalFileId)
13213
+ return undefined;
13214
+ return fileLinkedObject((_c = pullFromCache(['file', 'get', originalFileId])) === null || _c === void 0 ? void 0 : _c.data);
13128
13215
  },
13129
13216
  getVideoThumbnailInfo() {
13130
13217
  var _a, _b;
13131
- return isAmityVideoPost(post)
13132
- ? (_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.thumbnailFileId])) === null || _b === void 0 ? void 0 : _b.data
13133
- : undefined;
13218
+ // `isAmityVideoPost` proves the field is *present* — it tests
13219
+ // `'thumbnailFileId' in post.data` and presence is not a value. The
13220
+ // server sends the field as null until it has finished transcoding the
13221
+ // video, so a just-published post reaches here with a null id and used to
13222
+ // build the cache key ['file', 'get', null].
13223
+ const thumbnailFileId = isAmityVideoPost(post) ? (_a = post.data) === null || _a === void 0 ? void 0 : _a.thumbnailFileId : undefined;
13224
+ if (!thumbnailFileId)
13225
+ return undefined;
13226
+ return fileLinkedObject((_b = pullFromCache(['file', 'get', thumbnailFileId])) === null || _b === void 0 ? void 0 : _b.data);
13134
13227
  },
13135
13228
  getFileInfo() {
13136
13229
  var _a, _b;
13137
- return isAmityFilePost(post)
13138
- ? (_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.fileId])) === null || _b === void 0 ? void 0 : _b.data
13139
- : undefined;
13230
+ if (!isAmityFilePost(post) || !((_a = post.data) === null || _a === void 0 ? void 0 : _a.fileId))
13231
+ return undefined;
13232
+ return (_b = pullFromCache(['file', 'get', post.data.fileId])) === null || _b === void 0 ? void 0 : _b.data;
13140
13233
  },
13141
13234
  getLivestreamInfo() {
13142
13235
  var _a, _b;
13143
- if (!isAmityLivestreamPost(post))
13144
- return;
13236
+ if (!isAmityLivestreamPost(post) || !((_a = post.data) === null || _a === void 0 ? void 0 : _a.streamId))
13237
+ return undefined;
13145
13238
  const cache = (_b = pullFromCache([
13146
13239
  'stream',
13147
13240
  'get',
13148
- (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.streamId,
13241
+ post.data.streamId,
13149
13242
  ])) === null || _b === void 0 ? void 0 : _b.data;
13150
13243
  if (!cache)
13151
- return;
13244
+ return undefined;
13152
13245
  return streamLinkedObject(cache);
13153
13246
  },
13154
13247
  getPollInfo() {
13155
13248
  var _a, _b;
13156
- if (!isAmityPollPost(post))
13157
- return;
13158
- const cache = (_b = pullFromCache(['poll', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.pollId])) === null || _b === void 0 ? void 0 : _b.data;
13249
+ if (!isAmityPollPost(post) || !((_a = post.data) === null || _a === void 0 ? void 0 : _a.pollId))
13250
+ return undefined;
13251
+ const cache = (_b = pullFromCache(['poll', 'get', post.data.pollId])) === null || _b === void 0 ? void 0 : _b.data;
13159
13252
  if (!cache)
13160
- return;
13253
+ return undefined;
13161
13254
  return pollLinkedObject(cache);
13162
13255
  },
13163
13256
  getClipInfo() {
13164
13257
  var _a, _b;
13165
- return isAmityClipPost(post)
13166
- ? (_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.fileId])) === null || _b === void 0 ? void 0 : _b.data
13167
- : undefined;
13258
+ if (!isAmityClipPost(post) || !((_a = post.data) === null || _a === void 0 ? void 0 : _a.fileId))
13259
+ return undefined;
13260
+ return (_b = pullFromCache(['file', 'get', post.data.fileId])) === null || _b === void 0 ? void 0 : _b.data;
13168
13261
  },
13169
13262
  getAudioInfo() {
13170
13263
  var _a, _b;
13171
- return isAmityAudioPost(post)
13172
- ? (_b = pullFromCache(['file', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.fileId])) === null || _b === void 0 ? void 0 : _b.data
13173
- : undefined;
13264
+ if (!isAmityAudioPost(post) || !((_a = post.data) === null || _a === void 0 ? void 0 : _a.fileId))
13265
+ return undefined;
13266
+ return (_b = pullFromCache(['file', 'get', post.data.fileId])) === null || _b === void 0 ? void 0 : _b.data;
13174
13267
  },
13175
13268
  getRoomInfo() {
13176
13269
  var _a, _b;
13177
- if (!isAmityRoomPost(post))
13178
- return;
13179
- const room = (_b = pullFromCache(['room', 'get', (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.roomId])) === null || _b === void 0 ? void 0 : _b.data;
13270
+ if (!isAmityRoomPost(post) || !((_a = post.data) === null || _a === void 0 ? void 0 : _a.roomId))
13271
+ return undefined;
13272
+ const room = (_b = pullFromCache(['room', 'get', post.data.roomId])) === null || _b === void 0 ? void 0 : _b.data;
13180
13273
  return room ? roomLinkedObject(room) : undefined;
13181
13274
  },
13182
13275
  getEventInfo() {
@@ -14120,6 +14213,7 @@ const eventLinkedObject = (event) => {
14120
14213
  };
14121
14214
 
14122
14215
  const LinkedObject = {
14216
+ file: fileLinkedObject,
14123
14217
  ad: adLinkedObject,
14124
14218
  comment: commentLinkedObject,
14125
14219
  post: postLinkedObject,
@@ -15283,10 +15377,58 @@ class SearchUserLiveCollectionController extends LiveCollectionController {
15283
15377
  }
15284
15378
  }
15285
15379
 
15380
+ /* begin_public_function
15381
+ id: user.searchUsers
15382
+ */
15383
+ /**
15384
+ * ```js
15385
+ * import { UserRepository } from '@amityco/ts-sdk'
15386
+ *
15387
+ * let users = []
15388
+ * const unsub = UserRepository.searchUsers(
15389
+ * { displayName: 'jack', searchBy: [SearchUsersByEnum.DISPLAY_NAME] },
15390
+ * response => merge(users, response.data),
15391
+ * )
15392
+ * ```
15393
+ *
15394
+ * Observe all mutations on a list of {@link Amity.InternalUser}s.
15395
+ *
15396
+ * Pass `searchBy` in `params` to restrict which user fields are matched
15397
+ * (e.g. `[SearchUsersByEnum.DISPLAY_NAME]`). When omitted, the backend
15398
+ * default (both `displayName` and `userId`) applies.
15399
+ *
15400
+ * @param params for searching users
15401
+ * @param callback the function to call when new data are available
15402
+ * @param config the configuration for the live collection
15403
+ * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the users
15404
+ *
15405
+ * @category Category Live Collection
15406
+ */
15407
+ const searchUsers = (params, callback, config) => {
15408
+ const { log, cache } = getActiveClient();
15409
+ if (!cache) {
15410
+ // eslint-disable-next-line no-console
15411
+ console.log(ENABLE_CACHE_MESSAGE);
15412
+ }
15413
+ const timestamp = Date.now();
15414
+ log(`liveSearchUsers(tmpid: ${timestamp}) > listen`);
15415
+ const searchUsersLiveCollection = new SearchUserLiveCollectionController(params, callback);
15416
+ const disposers = searchUsersLiveCollection.startSubscription();
15417
+ const cacheKey = searchUsersLiveCollection.getCacheKey();
15418
+ disposers.push(() => dropFromCache(cacheKey));
15419
+ return () => {
15420
+ log(`liveSearchUsers(tmpid: ${timestamp}) > dispose`);
15421
+ disposers.forEach(fn => fn());
15422
+ };
15423
+ };
15424
+ /* end_public_function */
15425
+
15286
15426
  /* begin_public_function
15287
15427
  id: user.search
15288
15428
  */
15289
15429
  /**
15430
+ * @deprecated Use {@link searchUsers} instead. `searchUserByDisplayName` will be removed in a future major version.
15431
+ *
15290
15432
  * ```js
15291
15433
  * import { UserRepository } from '@amityco/ts-sdk-react-native'
15292
15434
  *
@@ -15435,6 +15577,7 @@ var index$q = /*#__PURE__*/Object.freeze({
15435
15577
  getUsers: getUsers,
15436
15578
  getBlockedUsers: getBlockedUsers,
15437
15579
  getBlockingUsers: getBlockingUsers,
15580
+ searchUsers: searchUsers,
15438
15581
  searchUserByDisplayName: searchUserByDisplayName,
15439
15582
  getReachedUsers: getReachedUsers,
15440
15583
  get AmityUserSearchMatchType () { return AmityUserSearchMatchType; }
@@ -15467,7 +15610,7 @@ const getFile = async (fileId) => {
15467
15610
  if (client.cache)
15468
15611
  ingestInCache({ files: [data] }, { cachedAt });
15469
15612
  return {
15470
- data,
15613
+ data: fileLinkedObject(data),
15471
15614
  cachedAt,
15472
15615
  };
15473
15616
  };
@@ -15494,7 +15637,7 @@ getFile.locally = (fileId) => {
15494
15637
  if (!cached)
15495
15638
  return;
15496
15639
  return {
15497
- data: cached.data,
15640
+ data: fileLinkedObject(cached.data),
15498
15641
  cachedAt: cached.cachedAt,
15499
15642
  };
15500
15643
  };
@@ -15631,7 +15774,7 @@ const uploadVideo = async (formData, feedType, onProgress) => {
15631
15774
  if (client.cache)
15632
15775
  ingestInCache({ files: data }, { cachedAt });
15633
15776
  return {
15634
- data,
15777
+ data: data.map(file => fileLinkedObject(file)),
15635
15778
  cachedAt,
15636
15779
  };
15637
15780
  };
@@ -15692,7 +15835,7 @@ const uploadImage = async (formData, onProgress, altText) => {
15692
15835
  if (client.cache)
15693
15836
  ingestInCache({ files: data }, { cachedAt });
15694
15837
  return {
15695
- data,
15838
+ data: data.map(file => fileLinkedObject(file)),
15696
15839
  cachedAt,
15697
15840
  };
15698
15841
  };
@@ -16655,39 +16798,6 @@ removeReaction.optimistically = (referenceType, referenceId, reactionName) => {
16655
16798
  return !((_d = reaction === null || reaction === void 0 ? void 0 : reaction.myReactions) === null || _d === void 0 ? void 0 : _d.includes(reactionName));
16656
16799
  };
16657
16800
 
16658
- /**
16659
- * Resolves the id of the parent post that a child-post payload belongs to.
16660
- *
16661
- * `parentId` and `parentPostId` name the same post, but a payload does not
16662
- * always carry both — and the delete/create child handlers decide *whether* a
16663
- * post is a child from `parentId` while reading the cache with `parentPostId`.
16664
- * When only the former is set that read builds `['post', 'get', undefined]`,
16665
- * which cannot match anything and, when the value is null, breaks key encoding
16666
- * outright. Reading whichever id is present keeps the decision and the lookup
16667
- * on the same post.
16668
- *
16669
- * @param post the child post payload
16670
- * @returns the parent post id, or undefined when the payload carries neither
16671
- *
16672
- * @category Post Events
16673
- * @hidden
16674
- */
16675
- const resolveParentPostId = (post) => {
16676
- if (post.parentPostId)
16677
- return post.parentPostId;
16678
- if (post.parentId) {
16679
- // Diagnostic: we do not know yet whether the server actually emits this
16680
- // shape. If this warning is never seen in practice the fallback can go.
16681
- console.warn('[AmitySDK] post payload carries `parentId` without `parentPostId` — falling back to `parentId`', {
16682
- postId: post.postId,
16683
- parentId: post.parentId,
16684
- parentPostId: post.parentPostId,
16685
- });
16686
- return post.parentId;
16687
- }
16688
- return undefined;
16689
- };
16690
-
16691
16801
  const processDeleteChildPost = (payload) => {
16692
16802
  var _a;
16693
16803
  const post = payload.posts[0];
@@ -16699,10 +16809,7 @@ const processDeleteChildPost = (payload) => {
16699
16809
  }
16700
16810
  else {
16701
16811
  // child post in a parent post
16702
- const parentPostId = resolveParentPostId(post);
16703
- if (!parentPostId)
16704
- return;
16705
- const parentPost = (_a = pullFromCache(['post', 'get', parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16812
+ const parentPost = (_a = pullFromCache(['post', 'get', post.parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16706
16813
  if (!parentPost)
16707
16814
  return;
16708
16815
  pushToCache(['post', 'get', parentPost.postId], Object.assign(Object.assign({}, parentPost), { children: parentPost.children.filter(childId => childId !== post.postId) }));
@@ -16713,10 +16820,7 @@ const processCreateChildPost = (payload) => {
16713
16820
  const post = payload.posts[0];
16714
16821
  if (!post.parentId)
16715
16822
  return;
16716
- const parentPostId = resolveParentPostId(post);
16717
- if (!parentPostId)
16718
- return;
16719
- const parentPost = (_a = pullFromCache(['post', 'get', parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16823
+ const parentPost = (_a = pullFromCache(['post', 'get', post.parentPostId])) === null || _a === void 0 ? void 0 : _a.data;
16720
16824
  if (!parentPost)
16721
16825
  return;
16722
16826
  pushToCache(['post', 'get', parentPost.postId], Object.assign(Object.assign({}, parentPost), { children: [...new Set([post.postId, ...parentPost.children])] }));
@@ -35681,4 +35785,4 @@ class AmityAttachmentProductTags {
35681
35785
  }
35682
35786
  }
35683
35787
 
35684
- export { API_REGIONS, index$5 as AdRepository, AmityAttachmentProductTags, AmityAutoSubscription, AmityChannelNotificationModeEnum, AmityCommunityType, AmityEventOrderOption, AmityEventOriginType, AmityEventResponseStatus, AmityEventSortOption, AmityEventStatus, AmityEventType, AmitySharableContentType, AnalyticsSourceTypeEnum, index$f as CategoryRepository, index$j as ChannelRepository, index$s as Client, index$e as CommentRepository, CommunityNotificationEventNameEnum, CommunityPostSettingMaps, CommunityPostSettings, index$g as CommunityRepository, ContentFeedType, ContentFlagReasonEnum, DefaultCommunityPostSetting, index$1 as EventRepository, FeedDataTypeEnum, index$d as FeedRepository, FeedSortByEnum, FeedSourceEnum, FeedTypeEnum, FileAccessTypeEnum, index$p as FileRepository, FileType, GET_WATCHER_URLS, index$3 as InvitationRepository, InvitationSortByEnum, InvitationStatusEnum, InvitationTargetTypeEnum, InvitationTypeEnum, JoinRequestStatusEnum, JoinResultStatusEnum, index$2 as LiveReactionRepository, index$7 as LiveStreamPlayer, MembershipAcceptanceTypeEnum, MessageContentType, index$n as MessageRepository, NotificationRolesFilterTypeEnum, NotificationSettingsLevelEnum, index$8 as PollRepository, PostContentType, index$b as PostRepository, PostStructureType, index as ProductRepository, index$o as ReactionRepository, index$9 as RoomPresenceRepository, index$c as RoomRepository, SearchUsersByEnum, index$6 as StoryRepository, index$a as StreamRepository, index$m as SubChannelRepository, SubscriptionLevels, UserNotificationModuleNameEnum, UserReportTypeEnum, index$q as UserRepository, UserTypeEnum, VERSION, VideoResolution, VideoSize, VideoTranscodingStatus, backupCache, createQuery, createReport, createUserToken, deleteReport, disableCache, dropFromCache, enableCache, exceedsUntilAtBoundary, filterByChannelMembership, filterByCommunityMembership, filterByFeedType, filterByPostDataTypes, filterByPropEquality, filterByPropInclusion, filterByPropIntersection, filterBySearchTerm, filterByStringComparePartially, filterByUntilAt, filterCommentsByBlockUsers, filterPostsByBlockUsers, getBlockUsersId, getChannelTopic, getCommentTopic, getCommunityStoriesTopic, getCommunityTopic, getLiveReactionTopic, getLiveStreamTopic, getMarkedMessageTopic, getMarkerUserFeedTopic, getMessageTopic, getMyFollowersTopic, getMyFollowingsTopic, getNetworkId, getNetworkTopic, getPostTopic, getRole, getRoomStreamerTopic, getRoomWatcherTopic, getSmartFeedChannelTopic, getSmartFeedMessageTopic, getSmartFeedSubChannelTopic, getStoryTopic, getSubChannelTopic, getUserTopic, isAfterBefore, isAfterBeforeRaw, isCachable, isFetcher, isFresh, isLocal, isMutator, isOffline, isPaged, isReportedByMe, isSkip, mergeInCache, index$4 as notificationTray, onChannelMarkerFetched, onFeedMarkerFetched, onFeedMarkerUpdated, onMessageMarked, onMessageMarkerFetched, onSubChannelMarkerFetched, onSubChannelMarkerUpdated, onUserMarkerFetched, onUserMarkerFetchedLegacy, pullFromCache, pushToCache, queryCache, queryOptions, queryRoles, restoreCache, runQuery, sortByChannelSegment, sortByDisplayName, sortByFirstCreated, sortByFirstUpdated, sortByLastActivity, sortByLastCreated, sortByLastUpdated, sortByLocalSortingDate, sortByName, sortBySegmentNumber, subscribeTopic, toPage, toPageRaw, toToken, upsertInCache, validateUntilAt, wipeCache };
35788
+ export { API_REGIONS, index$5 as AdRepository, AmityAttachmentProductTags, AmityAutoSubscription, AmityChannelNotificationModeEnum, AmityCommunityType, AmityEventOrderOption, AmityEventOriginType, AmityEventResponseStatus, AmityEventSortOption, AmityEventStatus, AmityEventType, AmityLiveViewerCountMode, AmitySharableContentType, AnalyticsSourceTypeEnum, index$f as CategoryRepository, index$j as ChannelRepository, index$s as Client, index$e as CommentRepository, CommunityNotificationEventNameEnum, CommunityPostSettingMaps, CommunityPostSettings, index$g as CommunityRepository, ContentFeedType, ContentFlagReasonEnum, DefaultCommunityPostSetting, index$1 as EventRepository, FeedDataTypeEnum, index$d as FeedRepository, FeedSortByEnum, FeedSourceEnum, FeedTypeEnum, FileAccessTypeEnum, index$p as FileRepository, FileType, GET_WATCHER_URLS, index$3 as InvitationRepository, InvitationSortByEnum, InvitationStatusEnum, InvitationTargetTypeEnum, InvitationTypeEnum, JoinRequestStatusEnum, JoinResultStatusEnum, index$2 as LiveReactionRepository, index$7 as LiveStreamPlayer, MembershipAcceptanceTypeEnum, MessageContentType, index$n as MessageRepository, NotificationRolesFilterTypeEnum, NotificationSettingsLevelEnum, index$8 as PollRepository, PostContentType, index$b as PostRepository, PostStructureType, index as ProductRepository, index$o as ReactionRepository, index$9 as RoomPresenceRepository, index$c as RoomRepository, SearchUsersByEnum, index$6 as StoryRepository, index$a as StreamRepository, index$m as SubChannelRepository, SubscriptionLevels, UserNotificationModuleNameEnum, UserReportTypeEnum, index$q as UserRepository, UserTypeEnum, VERSION, VideoResolution, VideoSize, VideoTranscodingStatus, backupCache, createQuery, createReport, createUserToken, deleteReport, disableCache, dropFromCache, enableCache, exceedsUntilAtBoundary, filterByChannelMembership, filterByCommunityMembership, filterByFeedType, filterByPostDataTypes, filterByPropEquality, filterByPropInclusion, filterByPropIntersection, filterBySearchTerm, filterByStringComparePartially, filterByUntilAt, filterCommentsByBlockUsers, filterPostsByBlockUsers, getBlockUsersId, getChannelTopic, getCommentTopic, getCommunityStoriesTopic, getCommunityTopic, getLiveReactionTopic, getLiveStreamTopic, getMarkedMessageTopic, getMarkerUserFeedTopic, getMessageTopic, getMyFollowersTopic, getMyFollowingsTopic, getNetworkId, getNetworkTopic, getPostTopic, getRole, getRoomStreamerTopic, getRoomWatcherTopic, getSmartFeedChannelTopic, getSmartFeedMessageTopic, getSmartFeedSubChannelTopic, getStoryTopic, getSubChannelTopic, getUserTopic, isAfterBefore, isAfterBeforeRaw, isCachable, isFetcher, isFresh, isLocal, isMutator, isOffline, isPaged, isReportedByMe, isSkip, mergeInCache, index$4 as notificationTray, onChannelMarkerFetched, onFeedMarkerFetched, onFeedMarkerUpdated, onMessageMarked, onMessageMarkerFetched, onSubChannelMarkerFetched, onSubChannelMarkerUpdated, onUserMarkerFetched, onUserMarkerFetchedLegacy, pullFromCache, pushToCache, queryCache, queryOptions, queryRoles, restoreCache, runQuery, sortByChannelSegment, sortByDisplayName, sortByFirstCreated, sortByFirstUpdated, sortByLastActivity, sortByLastCreated, sortByLastUpdated, sortByLocalSortingDate, sortByName, sortBySegmentNumber, subscribeTopic, toPage, toPageRaw, toToken, upsertInCache, validateUntilAt, wipeCache };