@amityco/ts-sdk-react-native 7.26.1-c29647b8.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 (57) 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/cache/utils/index.d.ts.map +1 -1
  14. package/dist/client/api/createClient.d.ts.map +1 -1
  15. package/dist/client/api/getLiveViewerCountConfig.d.ts +24 -0
  16. package/dist/client/api/getLiveViewerCountConfig.d.ts.map +1 -0
  17. package/dist/client/api/index.d.ts +1 -0
  18. package/dist/client/api/index.d.ts.map +1 -1
  19. package/dist/client/api/loginWithAccessToken.d.ts.map +1 -1
  20. package/dist/client/api/logout.d.ts.map +1 -1
  21. package/dist/client/api/renewTokenWithHandler.d.ts.map +1 -1
  22. package/dist/client/api/renewWithAccessToken.d.ts.map +1 -1
  23. package/dist/client/api/resumeSession.d.ts.map +1 -1
  24. package/dist/client/api/tests/renewTokenWithHandler.test.d.ts +2 -0
  25. package/dist/client/api/tests/renewTokenWithHandler.test.d.ts.map +1 -0
  26. package/dist/client/api/tests/renewWithAccessToken.test.d.ts +2 -0
  27. package/dist/client/api/tests/renewWithAccessToken.test.d.ts.map +1 -0
  28. package/dist/client/api/tests/validateAccessToken.test.d.ts +2 -0
  29. package/dist/client/api/tests/validateAccessToken.test.d.ts.map +1 -0
  30. package/dist/client/api/validateAccessToken.d.ts +1 -1
  31. package/dist/client/api/validateAccessToken.d.ts.map +1 -1
  32. package/dist/client/utils/endpoints.d.ts +1 -1
  33. package/dist/client/utils/endpoints.d.ts.map +1 -1
  34. package/dist/core/transports/mqtt.d.ts.map +1 -1
  35. package/dist/fileRepository/api/getFile.d.ts.map +1 -1
  36. package/dist/fileRepository/api/uploadImage.d.ts.map +1 -1
  37. package/dist/fileRepository/api/uploadVideo.d.ts.map +1 -1
  38. package/dist/index.cjs.js +227 -79
  39. package/dist/index.esm.js +228 -80
  40. package/dist/index.umd.js +1 -1
  41. package/dist/userRepository/observers/index.d.ts +1 -0
  42. package/dist/userRepository/observers/index.d.ts.map +1 -1
  43. package/dist/userRepository/observers/searchUserByDisplayName.d.ts +2 -0
  44. package/dist/userRepository/observers/searchUserByDisplayName.d.ts.map +1 -1
  45. package/dist/userRepository/observers/searchUsers.d.ts +26 -0
  46. package/dist/userRepository/observers/searchUsers.d.ts.map +1 -0
  47. package/dist/userRepository/observers/tests/integrations/searchUsers.integration.test.d.ts +2 -0
  48. package/dist/userRepository/observers/tests/integrations/searchUsers.integration.test.d.ts.map +1 -0
  49. package/dist/userRepository/observers/tests/searchUsers.test.d.ts +2 -0
  50. package/dist/userRepository/observers/tests/searchUsers.test.d.ts.map +1 -0
  51. package/dist/utils/linkedObject/fileLinkedObject.d.ts +2 -0
  52. package/dist/utils/linkedObject/fileLinkedObject.d.ts.map +1 -0
  53. package/dist/utils/linkedObject/index.d.ts +1 -0
  54. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  55. package/dist/utils/linkedObject/postLinkedObject.d.ts.map +1 -1
  56. package/dist/utils/tests/dummy/file.d.ts.map +1 -1
  57. package/package.json +1 -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__';
@@ -364,7 +371,13 @@ const normalize = (source) => Object.keys(source)
364
371
  * @category Cache
365
372
  * @hidden
366
373
  */
367
- const encodeKey = (key) => JSON.stringify(key, (_, val) => (typeof val === 'object' ? normalize(val) : val));
374
+ const encodeKey = (key) => JSON.stringify(key, (_, val) =>
375
+ // `typeof null` is `'object'`, so a nullish segment would reach normalize()
376
+ // and throw on Object.keys(null) — taking down whichever cache read built
377
+ // the key. Amity.Serializable does not admit null in the first place, so a
378
+ // null here is a payload that broke its own contract: encode it as null and
379
+ // let the miss be a miss.
380
+ val !== null && typeof val === 'object' ? normalize(val) : val);
368
381
  /**
369
382
  * Decodes a string back into a {@link Amity.CacheKey}
370
383
 
@@ -1931,8 +1944,7 @@ const API_REGIONS = {
1931
1944
  };
1932
1945
  const URLS = {
1933
1946
  http: 'https://apix.{region}.amity.co',
1934
- // upload: 'https://upload.{region}.amity.co',
1935
- upload: 'https://apix.{region}.amity.co',
1947
+ upload: 'https://upload.{region}.amity.co',
1936
1948
  mqtt: 'wss://sse.{region}.amity.co:443/mqtt',
1937
1949
  };
1938
1950
  function computeUrl(type, region) {
@@ -2456,10 +2468,11 @@ var MqttError;
2456
2468
  MqttError[MqttError["BAD_USERNAME_OR_PASSWORD"] = 134] = "BAD_USERNAME_OR_PASSWORD";
2457
2469
  MqttError[MqttError["NOT_AUTHORIZED"] = 135] = "NOT_AUTHORIZED";
2458
2470
  })(MqttError || (MqttError = {}));
2459
- // MQTT 5 session expiry, in seconds. 0xFFFFFFFF keeps the session alive
2460
- // indefinitely, matching the previous 3.1.1 `clean: false` behaviour where the
2461
- // broker retained the session (and its subscriptions) across disconnects.
2462
- 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;
2463
2476
  function getMqttOptions(params) {
2464
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,
2465
2478
  // The broker/LB drops idle sockets at ~60s. mqtt.js v5 sends its first
@@ -2576,8 +2589,16 @@ const createMqttTransport = (endpoint) => {
2576
2589
  }
2577
2590
  return {
2578
2591
  connect,
2579
- async disconnect() {
2592
+ async disconnect(options) {
2580
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
+ }
2581
2602
  return new Promise(resolve => mqttClient === null || mqttClient === void 0 ? void 0 : mqttClient.end(true, undefined, () => resolve()));
2582
2603
  }
2583
2604
  },
@@ -5073,6 +5094,51 @@ const getCoreUserSettings = async () => {
5073
5094
  return data;
5074
5095
  };
5075
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
+
5076
5142
  /* begin_public_function
5077
5143
  id: client.getProductCatalogueSetting
5078
5144
  */
@@ -5439,7 +5505,7 @@ const logout = async () => {
5439
5505
  const client = getActiveClient();
5440
5506
  client.log('client/api/disconnectClient');
5441
5507
  if (client.mqtt && client.mqtt.connected) {
5442
- client.mqtt.disconnect();
5508
+ await client.mqtt.disconnect({ endSession: true });
5443
5509
  }
5444
5510
  /*
5445
5511
  * for cases when session state is terminated (example on ban) or token expired,
@@ -5460,6 +5526,7 @@ const logout = async () => {
5460
5526
  client.userId = undefined;
5461
5527
  client.token = undefined;
5462
5528
  client.loginType = undefined;
5529
+ client.isGloballyBanned = false;
5463
5530
  client.http.defaults.headers.common.Authorization = '';
5464
5531
  client.http.defaults.metadata = {
5465
5532
  tokenExpiry: '',
@@ -7755,19 +7822,21 @@ const renewal = () => {
7755
7822
 
7756
7823
  const validateAccessToken = async ({ token, userId }) => {
7757
7824
  const client = getActiveClient();
7758
- // Validate token using sessions API
7759
- await client.http.get('/api/v3/sessions', {
7760
- headers: {
7761
- Authorization: `Bearer ${token.accessToken}`,
7762
- },
7763
- });
7764
- // Get user details
7765
- const { data: { users }, } = await client.http.get(`/api/v3/users/${userId}`, {
7825
+ // Verify the token and hydrate the caller in a single call.
7826
+ const { data } = await client.http.get('/api/v4/sessions', {
7766
7827
  headers: {
7767
7828
  Authorization: `Bearer ${token.accessToken}`,
7768
7829
  },
7769
7830
  });
7770
- 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
+ }
7771
7840
  client.http.defaults.headers.common.Authorization = `Bearer ${token.accessToken}`;
7772
7841
  client.http.defaults.metadata = {
7773
7842
  tokenExpiry: token.expiresAt,
@@ -7781,6 +7850,8 @@ const validateAccessToken = async ({ token, userId }) => {
7781
7850
  isUserDeleted: false,
7782
7851
  };
7783
7852
  client.token = token;
7853
+ ingestInCache(prepareUserPayload({ users, files }));
7854
+ setCurrentUserType(userType);
7784
7855
  return user;
7785
7856
  };
7786
7857
 
@@ -7863,14 +7934,6 @@ const loginWithAccessToken = async (accessToken) => {
7863
7934
  setSessionState("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
7864
7935
  throw new ASCError(`User ${userId} has not been found`, 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
7865
7936
  }
7866
- if (user.isDeleted) {
7867
- setSessionState("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
7868
- throw new ASCError(`User ${userId} has been deleted`, 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
7869
- }
7870
- if (user.isGlobalBanned) {
7871
- setSessionState("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
7872
- throw new ASCError(`User ${userId} is globally banned`, 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
7873
- }
7874
7937
  // Set userId and login method flag
7875
7938
  client.userId = user.userId;
7876
7939
  // Set login method flag to 'accessToken' in platform-specific login session
@@ -7884,8 +7947,10 @@ const loginWithAccessToken = async (accessToken) => {
7884
7947
  catch (error) {
7885
7948
  // If error occurs, revert session state to not logged in
7886
7949
  setSessionState("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
7887
- // Re-throw if it's already an ASCError
7888
7950
  if (error instanceof ASCError) {
7951
+ if (error.code === 400312 /* Amity.ServerError.GLOBAL_BAN */) {
7952
+ client.isGloballyBanned = true;
7953
+ }
7889
7954
  throw error;
7890
7955
  }
7891
7956
  // Wrap other errors
@@ -7953,11 +8018,18 @@ const renewWithAccessToken = async (accessToken) => {
7953
8018
  await loginWithAccessToken(accessToken);
7954
8019
  }
7955
8020
  else {
7956
- // about to expire
7957
- await validateAccessToken({
7958
- token: tokenObject,
7959
- userId,
7960
- });
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
+ }
7961
8033
  }
7962
8034
  };
7963
8035
  /* end_public_function */
@@ -7974,6 +8046,9 @@ const renewTokenWithHandler = async ({ useScheduledTask = false, }) => {
7974
8046
  if (!client.userId || !client.accessTokenHandler) {
7975
8047
  return;
7976
8048
  }
8049
+ if (client.isGloballyBanned) {
8050
+ return;
8051
+ }
7977
8052
  try {
7978
8053
  const newToken = await client.accessTokenHandler.onTokenRenew(client.userId);
7979
8054
  if (useScheduledTask) {
@@ -8572,6 +8647,7 @@ const createClient = (apiKey, apiRegion = API_REGIONS.SG, { debugSession = DEFAU
8572
8647
  getCoreUserSettings,
8573
8648
  getSocialSettings,
8574
8649
  getChatSettings,
8650
+ getLiveViewerCountConfig,
8575
8651
  getVisitorDeviceId: getDeviceId,
8576
8652
  getMessagePreviewSetting: getMessagePreviewSetting$1,
8577
8653
  onRTEConnectionStateChange,
@@ -8711,21 +8787,13 @@ const resumeSession = async (params, sessionHandler, config) => {
8711
8787
  if (user == null) {
8712
8788
  throw new ASCError(`${params.userId} has not been found`, 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
8713
8789
  }
8714
- if (user.isDeleted) {
8715
- terminateClient("userDeleted" /* Amity.TokenTerminationReason.USER_DELETED */);
8716
- return false;
8717
- }
8718
- if (user.isGlobalBanned) {
8719
- terminateClient("globalBan" /* Amity.TokenTerminationReason.GLOBAL_BAN */);
8720
- return false;
8721
- }
8722
8790
  client.userId = user.userId;
8723
8791
  client.sessionHandler = sessionHandler;
8724
8792
  /*
8725
8793
  * Cannot push to subscriptions as watcher needs to continue working even if
8726
8794
  * token expires
8727
8795
  */
8728
- unsubWatcher = client.accessTokenExpiryWatcher(sessionHandler);
8796
+ unsubWatcher = client.accessTokenExpiryWatcher();
8729
8797
  setActiveUser(user);
8730
8798
  }
8731
8799
  catch (error) {
@@ -9711,6 +9779,7 @@ var index$s = /*#__PURE__*/Object.freeze({
9711
9779
  setCurrentUserType: setCurrentUserType,
9712
9780
  setAccessTokenHandler: setAccessTokenHandler,
9713
9781
  getChatSettings: getChatSettings,
9782
+ getLiveViewerCountConfig: getLiveViewerCountConfig,
9714
9783
  getCoreUserSettings: getCoreUserSettings,
9715
9784
  notifications: notifications,
9716
9785
  enableAutoSubscriptions: enableAutoSubscriptions,
@@ -12627,7 +12696,7 @@ const getWatchSessionStorage = () => {
12627
12696
  return storageInstance;
12628
12697
  };
12629
12698
 
12630
- 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-----";
12631
12700
  /*
12632
12701
  * The crypto algorithm used for importing key and signing string
12633
12702
  */
@@ -13055,6 +13124,21 @@ const productTagLinkedObject = (productTag) => {
13055
13124
  return Object.assign(Object.assign({}, productTag), { product: internalProduct ? productLinkedObject(internalProduct) : undefined });
13056
13125
  };
13057
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
+
13058
13142
  const postLinkedObject = (post) => {
13059
13143
  return shallowClone(post, {
13060
13144
  childrenPosts: post.children
@@ -13093,85 +13177,99 @@ const postLinkedObject = (post) => {
13093
13177
  .filter(Boolean) || []);
13094
13178
  },
13095
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;
13096
13185
  const cacheData = pullFromCache(['user', 'get', post.postedUserId]);
13097
13186
  if (!(cacheData === null || cacheData === void 0 ? void 0 : cacheData.data))
13098
- return;
13187
+ return undefined;
13099
13188
  return userLinkedObject(cacheData.data);
13100
13189
  },
13101
13190
  get targetCommunity() {
13102
13191
  var _a;
13192
+ if (!post.targetId)
13193
+ return undefined;
13103
13194
  const communityCache = (_a = pullFromCache([
13104
13195
  'community',
13105
13196
  'get',
13106
13197
  post.targetId,
13107
13198
  ])) === null || _a === void 0 ? void 0 : _a.data;
13108
13199
  if (!communityCache)
13109
- return;
13200
+ return undefined;
13110
13201
  return communityLinkedObject(communityCache);
13111
13202
  },
13112
13203
  getImageInfo() {
13113
13204
  var _a, _b;
13114
- return isAmityImagePost(post)
13115
- ? (_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
13116
- : 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);
13117
13208
  },
13118
13209
  getVideoInfo() {
13119
13210
  var _a, _b, _c;
13120
- return isAmityVideoPost(post)
13121
- ? (_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
13122
- : 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);
13123
13215
  },
13124
13216
  getVideoThumbnailInfo() {
13125
13217
  var _a, _b;
13126
- return isAmityVideoPost(post)
13127
- ? (_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
13128
- : 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);
13129
13227
  },
13130
13228
  getFileInfo() {
13131
13229
  var _a, _b;
13132
- return isAmityFilePost(post)
13133
- ? (_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
13134
- : 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;
13135
13233
  },
13136
13234
  getLivestreamInfo() {
13137
13235
  var _a, _b;
13138
- if (!isAmityLivestreamPost(post))
13139
- return;
13236
+ if (!isAmityLivestreamPost(post) || !((_a = post.data) === null || _a === void 0 ? void 0 : _a.streamId))
13237
+ return undefined;
13140
13238
  const cache = (_b = pullFromCache([
13141
13239
  'stream',
13142
13240
  'get',
13143
- (_a = post === null || post === void 0 ? void 0 : post.data) === null || _a === void 0 ? void 0 : _a.streamId,
13241
+ post.data.streamId,
13144
13242
  ])) === null || _b === void 0 ? void 0 : _b.data;
13145
13243
  if (!cache)
13146
- return;
13244
+ return undefined;
13147
13245
  return streamLinkedObject(cache);
13148
13246
  },
13149
13247
  getPollInfo() {
13150
13248
  var _a, _b;
13151
- if (!isAmityPollPost(post))
13152
- return;
13153
- 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;
13154
13252
  if (!cache)
13155
- return;
13253
+ return undefined;
13156
13254
  return pollLinkedObject(cache);
13157
13255
  },
13158
13256
  getClipInfo() {
13159
13257
  var _a, _b;
13160
- return isAmityClipPost(post)
13161
- ? (_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
13162
- : 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;
13163
13261
  },
13164
13262
  getAudioInfo() {
13165
13263
  var _a, _b;
13166
- return isAmityAudioPost(post)
13167
- ? (_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
13168
- : 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;
13169
13267
  },
13170
13268
  getRoomInfo() {
13171
13269
  var _a, _b;
13172
- if (!isAmityRoomPost(post))
13173
- return;
13174
- 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;
13175
13273
  return room ? roomLinkedObject(room) : undefined;
13176
13274
  },
13177
13275
  getEventInfo() {
@@ -14115,6 +14213,7 @@ const eventLinkedObject = (event) => {
14115
14213
  };
14116
14214
 
14117
14215
  const LinkedObject = {
14216
+ file: fileLinkedObject,
14118
14217
  ad: adLinkedObject,
14119
14218
  comment: commentLinkedObject,
14120
14219
  post: postLinkedObject,
@@ -15278,10 +15377,58 @@ class SearchUserLiveCollectionController extends LiveCollectionController {
15278
15377
  }
15279
15378
  }
15280
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
+
15281
15426
  /* begin_public_function
15282
15427
  id: user.search
15283
15428
  */
15284
15429
  /**
15430
+ * @deprecated Use {@link searchUsers} instead. `searchUserByDisplayName` will be removed in a future major version.
15431
+ *
15285
15432
  * ```js
15286
15433
  * import { UserRepository } from '@amityco/ts-sdk-react-native'
15287
15434
  *
@@ -15430,6 +15577,7 @@ var index$q = /*#__PURE__*/Object.freeze({
15430
15577
  getUsers: getUsers,
15431
15578
  getBlockedUsers: getBlockedUsers,
15432
15579
  getBlockingUsers: getBlockingUsers,
15580
+ searchUsers: searchUsers,
15433
15581
  searchUserByDisplayName: searchUserByDisplayName,
15434
15582
  getReachedUsers: getReachedUsers,
15435
15583
  get AmityUserSearchMatchType () { return AmityUserSearchMatchType; }
@@ -15462,7 +15610,7 @@ const getFile = async (fileId) => {
15462
15610
  if (client.cache)
15463
15611
  ingestInCache({ files: [data] }, { cachedAt });
15464
15612
  return {
15465
- data,
15613
+ data: fileLinkedObject(data),
15466
15614
  cachedAt,
15467
15615
  };
15468
15616
  };
@@ -15489,7 +15637,7 @@ getFile.locally = (fileId) => {
15489
15637
  if (!cached)
15490
15638
  return;
15491
15639
  return {
15492
- data: cached.data,
15640
+ data: fileLinkedObject(cached.data),
15493
15641
  cachedAt: cached.cachedAt,
15494
15642
  };
15495
15643
  };
@@ -15626,7 +15774,7 @@ const uploadVideo = async (formData, feedType, onProgress) => {
15626
15774
  if (client.cache)
15627
15775
  ingestInCache({ files: data }, { cachedAt });
15628
15776
  return {
15629
- data,
15777
+ data: data.map(file => fileLinkedObject(file)),
15630
15778
  cachedAt,
15631
15779
  };
15632
15780
  };
@@ -15687,7 +15835,7 @@ const uploadImage = async (formData, onProgress, altText) => {
15687
15835
  if (client.cache)
15688
15836
  ingestInCache({ files: data }, { cachedAt });
15689
15837
  return {
15690
- data,
15838
+ data: data.map(file => fileLinkedObject(file)),
15691
15839
  cachedAt,
15692
15840
  };
15693
15841
  };
@@ -35637,4 +35785,4 @@ class AmityAttachmentProductTags {
35637
35785
  }
35638
35786
  }
35639
35787
 
35640
- 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 };