@amityco/ts-sdk 0.0.1-beta.12 → 0.0.1-beta.15

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 (107) hide show
  1. package/README.md +3 -3
  2. package/dist/@types/core/cache.d.ts +2 -2
  3. package/dist/@types/core/cache.d.ts.map +1 -1
  4. package/dist/@types/core/events.d.ts +2 -2
  5. package/dist/@types/core/events.d.ts.map +1 -1
  6. package/dist/@types/core/paging.d.ts +19 -38
  7. package/dist/@types/core/paging.d.ts.map +1 -1
  8. package/dist/@types/core/query.d.ts +12 -4
  9. package/dist/@types/core/query.d.ts.map +1 -1
  10. package/dist/@types/domains/client.d.ts +1 -1
  11. package/dist/@types/domains/client.d.ts.map +1 -1
  12. package/dist/@types/domains/comment.d.ts +1 -1
  13. package/dist/@types/domains/comment.d.ts.map +1 -1
  14. package/dist/@types/domains/file.d.ts +2 -2
  15. package/dist/@types/domains/file.d.ts.map +1 -1
  16. package/dist/@types/domains/mention.d.ts +23 -0
  17. package/dist/@types/domains/mention.d.ts.map +1 -0
  18. package/dist/@types/domains/message.d.ts +1 -1
  19. package/dist/@types/domains/message.d.ts.map +1 -1
  20. package/dist/@types/domains/post.d.ts +2 -2
  21. package/dist/@types/domains/post.d.ts.map +1 -1
  22. package/dist/@types/index.d.ts +1 -0
  23. package/dist/@types/index.d.ts.map +1 -1
  24. package/dist/category/api/queryCategories.d.ts +3 -3
  25. package/dist/channel/api/queryChannelMembers.d.ts.map +1 -1
  26. package/dist/channel/api/queryChannels.d.ts +1 -1
  27. package/dist/client/api/createClient.d.ts +3 -3
  28. package/dist/client/api/createClient.d.ts.map +1 -1
  29. package/dist/client/api/disconnectClient.d.ts.map +1 -1
  30. package/dist/client/utils/endpoints.d.ts +12 -0
  31. package/dist/client/utils/endpoints.d.ts.map +1 -0
  32. package/dist/comment/api/createComment.d.ts +1 -1
  33. package/dist/comment/api/createComment.d.ts.map +1 -1
  34. package/dist/comment/api/updateComment.d.ts +1 -1
  35. package/dist/comment/api/updateComment.d.ts.map +1 -1
  36. package/dist/community/api/queryCommunities.d.ts +1 -1
  37. package/dist/core/debug.d.ts.map +1 -1
  38. package/dist/core/device.d.ts.map +1 -1
  39. package/dist/core/events.d.ts.map +1 -1
  40. package/dist/core/microtasks.d.ts +13 -0
  41. package/dist/core/microtasks.d.ts.map +1 -0
  42. package/dist/core/query/paging.d.ts +2 -13
  43. package/dist/core/query/paging.d.ts.map +1 -1
  44. package/dist/core/query/query.d.ts +1 -1
  45. package/dist/core/query/query.d.ts.map +1 -1
  46. package/dist/feed/api/queryGlobalFeed.d.ts +22 -4
  47. package/dist/feed/api/queryGlobalFeed.d.ts.map +1 -1
  48. package/dist/index.cjs.js +101 -74
  49. package/dist/index.d.ts +1 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.esm.js +101 -74
  52. package/dist/index.umd.js +5 -5
  53. package/dist/message/api/createMessage.d.ts +2 -2
  54. package/dist/message/api/createMessage.d.ts.map +1 -1
  55. package/dist/message/api/updateMessage.d.ts +2 -2
  56. package/dist/message/api/updateMessage.d.ts.map +1 -1
  57. package/dist/post/api/createPost.d.ts +7 -3
  58. package/dist/post/api/createPost.d.ts.map +1 -1
  59. package/dist/post/api/queryPosts.d.ts +3 -3
  60. package/dist/post/api/queryPosts.d.ts.map +1 -1
  61. package/dist/post/api/updatePost.d.ts +1 -1
  62. package/dist/post/api/updatePost.d.ts.map +1 -1
  63. package/dist/role/api/queryRoles.d.ts +1 -1
  64. package/dist/stream/api/queryStreams.d.ts +1 -1
  65. package/dist/utils/env.d.ts +5 -0
  66. package/dist/utils/env.d.ts.map +1 -0
  67. package/dist/version.d.ts.map +1 -1
  68. package/package.json +1 -1
  69. package/rollup.config.js +3 -0
  70. package/src/@types/core/cache.ts +2 -2
  71. package/src/@types/core/events.ts +1 -1
  72. package/src/@types/core/paging.ts +29 -44
  73. package/src/@types/core/query.ts +7 -3
  74. package/src/@types/domains/client.ts +1 -1
  75. package/src/@types/domains/comment.ts +1 -0
  76. package/src/@types/domains/file.ts +2 -1
  77. package/src/@types/domains/mention.ts +26 -0
  78. package/src/@types/domains/message.ts +1 -0
  79. package/src/@types/domains/post.ts +2 -1
  80. package/src/@types/index.ts +2 -0
  81. package/src/channel/api/queryChannelMembers.ts +2 -1
  82. package/src/client/api/connectClient.ts +1 -1
  83. package/src/client/api/createClient.ts +7 -7
  84. package/src/client/api/disconnectClient.ts +0 -1
  85. package/src/client/utils/endpoints.ts +14 -0
  86. package/src/comment/api/createComment.ts +1 -2
  87. package/src/comment/api/updateComment.ts +1 -1
  88. package/src/community/api/queryCommunityMembers.ts +1 -1
  89. package/src/core/debug.ts +3 -1
  90. package/src/core/device.ts +3 -2
  91. package/src/core/events.ts +3 -1
  92. package/src/core/microtasks.ts +27 -0
  93. package/src/core/query/paging.ts +6 -41
  94. package/src/core/query/query.ts +5 -5
  95. package/src/core/subscription.ts +4 -4
  96. package/src/feed/api/queryGlobalFeed.ts +58 -5
  97. package/src/index.ts +1 -0
  98. package/src/message/api/createMessage.ts +2 -2
  99. package/src/message/api/updateMessage.ts +2 -2
  100. package/src/post/api/createPost.ts +6 -4
  101. package/src/post/api/queryPosts.ts +5 -5
  102. package/src/post/api/updatePost.ts +2 -2
  103. package/src/utils/env.ts +7 -0
  104. package/src/version.ts +3 -1
  105. package/dist/core/network.d.ts +0 -11
  106. package/dist/core/network.d.ts.map +0 -1
  107. package/src/core/network.ts +0 -14
package/dist/index.esm.js CHANGED
@@ -6,11 +6,14 @@ import io from 'socket.io-client';
6
6
  import mitt from 'mitt';
7
7
  import AsyncStorage from '@react-native-async-storage/async-storage';
8
8
 
9
- var _a;
10
- // used in createClient
11
- const VERSION$1 = (_a = 'v0.0.1-beta.12-esm') !== null && _a !== void 0 ? _a : '__dev__';
9
+ var _a$1;
10
+ const theGlobal = globalThis || global || window;
11
+ const { process: safeProcess = {} } = theGlobal;
12
+ const isProduction = ((_a$1 = safeProcess.env) === null || _a$1 === void 0 ? void 0 : _a$1.NODE_ENV) === 'production';
13
+
14
+ var _a, _b;
15
+ const VERSION$1 = (_b = (_a = safeProcess.env) === null || _a === void 0 ? void 0 : _a.VERSION) !== null && _b !== void 0 ? _b : '__dev__';
12
16
 
13
- // @ts-ignore
14
17
  /**
15
18
  * Type guard to find if the a given decoded backend token uses "skip/limit" pagination style
16
19
  *
@@ -28,7 +31,7 @@ const isSkipLimit = (json) => (['skip', 'limit'].some(prop => prop in json));
28
31
  *
29
32
  * @hidden
30
33
  */
31
- const isAfterBefore = (json) => (['after', 'before', 'first', 'last'].some(prop => prop in json));
34
+ const isAfterBefore = (json) => (['after', 'before', 'first', 'last', 'limit'].some(prop => prop in json));
32
35
  /**
33
36
  * Type guard to find if the a given decoded backend token uses v4 or newer "after/before" pagination style
34
37
  *
@@ -37,7 +40,7 @@ const isAfterBefore = (json) => (['after', 'before', 'first', 'last'].some(prop
37
40
  *
38
41
  * @hidden
39
42
  */
40
- const isAfterBeforeRaw = (json) => (['after', 'before'].some(prop => prop in json));
43
+ const isAfterBeforeRaw = (json) => ('limit' in json);
41
44
  /**
42
45
  * Type guard to find if the a given object is wrapped around Amity.Paged<>
43
46
  *
@@ -72,7 +75,7 @@ const toToken = (paging, style) => {
72
75
  limit: paging.limit,
73
76
  };
74
77
  }
75
- else if (style === 'afterbefore') {
78
+ else if (style === 'afterbefore' && isAfterBefore(paging)) {
76
79
  /*
77
80
  Caution: this testing style is only valid because
78
81
  our backend expects nothing else than a number as
@@ -158,35 +161,6 @@ const toPageRaw = (token) => {
158
161
  return json;
159
162
  }
160
163
  return null;
161
- };
162
- /**
163
- * Slices a collection according to its paging
164
- *
165
- * @param type the type of collection (for unique id identification with after/before)
166
- * @param collection the collection to slice
167
- * @param paging the paging object
168
- * @returns the sliced collection according to the paging definition
169
- *
170
- * @hidden
171
- */
172
- const sliceByPaging = (type, collection, page) => {
173
- console.log('slice by paging', page);
174
- if (!page)
175
- return collection.slice();
176
- let start = 0;
177
- let end = undefined;
178
- // next page behavior
179
- if (page.after) {
180
- start = page.after;
181
- end = start + page.limit;
182
- // prev page behavior
183
- }
184
- else if (page.before) {
185
- end = page.before + 1;
186
- start = end > page.limit ? end - page.limit : 0;
187
- }
188
- const paged = collection.slice(start, end);
189
- return paged.length === page.limit ? paged : undefined;
190
164
  };
191
165
 
192
166
  /**
@@ -500,7 +474,7 @@ const setActiveClient = (client) => {
500
474
  */
501
475
  const createLogger = (session) => {
502
476
  const active = (`${session === null || session === void 0 ? void 0 : session.trim()}`.length > 0
503
- && process.env.NODE_ENV !== 'production');
477
+ && !isProduction);
504
478
  const logger = debug(session);
505
479
  const print = (topic, ...args) => {
506
480
  active && logger(topic, args);
@@ -509,19 +483,18 @@ const createLogger = (session) => {
509
483
  return print;
510
484
  };
511
485
 
512
- const API_ENDPOINT = {
486
+ const API_REGIONS = {
513
487
  EU: 'eu',
514
488
  SG: 'sg',
515
489
  US: 'us',
516
490
  };
517
- var UrlTemplate;
518
- (function (UrlTemplate) {
519
- UrlTemplate["HTTP"] = "https://api.{region}.amity.co";
520
- UrlTemplate["MQTT"] = "wss://sse.{region}.amity.co:443/mqtt";
521
- })(UrlTemplate || (UrlTemplate = {}));
522
- const getUrlFromTemplate = (template, region) => {
523
- return template.replace('{region}', region);
524
- };
491
+ const URLS = {
492
+ http: 'https://api.{region}.amity.co',
493
+ mqtt: 'wss://sse.{region}.amity.co:443/mqtt',
494
+ };
495
+ function computeUrl(type, region) {
496
+ return URLS[type].replace('{region}', region);
497
+ }
525
498
 
526
499
  /**
527
500
  * Unwraps v3 server payload (for error handling and type extraction)
@@ -14727,6 +14700,22 @@ const createMqttTransport = (endpoint) => {
14727
14700
  };
14728
14701
  };
14729
14702
 
14703
+ let tasks = [];
14704
+ let timer;
14705
+ /**
14706
+ * Add a function to run just before the next tick
14707
+ *
14708
+ * @param task function to schedule for later execution
14709
+ */
14710
+ const scheduleTask = (task) => {
14711
+ clearTimeout(timer);
14712
+ tasks.push(task);
14713
+ timer = setTimeout(() => {
14714
+ tasks.forEach(fn => fn());
14715
+ tasks = [];
14716
+ }, 0);
14717
+ };
14718
+
14730
14719
  // need to sync up the list
14731
14720
  const WS_EVENTS = [
14732
14721
  'disconnected',
@@ -14817,7 +14806,7 @@ const createEventSubscriber = (client, namespace, event, fn) => {
14817
14806
  */
14818
14807
  const fireEvent = (event, payload) => {
14819
14808
  const { emitter } = getActiveClient();
14820
- setTimeout(() => { emitter.emit(event, payload); }, 0);
14809
+ scheduleTask(() => { emitter.emit(event, payload); });
14821
14810
  };
14822
14811
 
14823
14812
  /**
@@ -14829,21 +14818,21 @@ const fireEvent = (event, payload) => {
14829
14818
  * Creates a new {@link Amity.Client} instance
14830
14819
  *
14831
14820
  * @param apiKey for the {@link Amity.Client} instance
14832
- * @param apiEndpoint endpoint to connect to
14821
+ * @param apiRegion endpoint to connect to
14833
14822
  * @param debugSession session's identifier for the client's logger instance
14834
14823
  * @returns A {@link Amity.Client} instance
14835
14824
  *
14836
14825
  * @category Client API
14837
14826
  **/
14838
- const createClient = (apiKey, apiEndpoint = API_ENDPOINT.SG, debugSession = 'amity') => {
14827
+ const createClient = (apiKey, apiRegion = API_REGIONS.SG, debugSession = 'amity') => {
14839
14828
  const log = createLogger(debugSession);
14840
14829
  log('client/api/createClient', {
14841
14830
  apiKey: apiKey.replace(/.{5}$/g, 'xxxxx'),
14842
- apiEndpoint,
14831
+ apiRegion,
14843
14832
  });
14844
- const http = createHttpTransport(getUrlFromTemplate(UrlTemplate.HTTP, apiEndpoint));
14845
- const ws = createWebsocketTransport(getUrlFromTemplate(UrlTemplate.HTTP, apiEndpoint));
14846
- const mqtt = createMqttTransport(getUrlFromTemplate(UrlTemplate.MQTT, apiEndpoint));
14833
+ const http = createHttpTransport(computeUrl('http', apiRegion));
14834
+ const ws = createWebsocketTransport(computeUrl('http', apiRegion));
14835
+ const mqtt = createMqttTransport(computeUrl('mqtt', apiRegion));
14847
14836
  const emitter = createEventEmitter();
14848
14837
  const client = {
14849
14838
  version: `${VERSION$1}`,
@@ -14891,13 +14880,11 @@ const disconnectClient = async () => {
14891
14880
  client.ws.removeAllListeners();
14892
14881
  client.mqtt.removeAllListeners();
14893
14882
  client.userId = undefined;
14894
- client.user = undefined;
14895
14883
  client.accessToken = undefined;
14896
14884
  return !client.ws.connected;
14897
14885
  };
14898
14886
 
14899
14887
  // TODO: find a way to uniquely identify the device
14900
- // import { getStorage } from './storage'
14901
14888
  /** @hidden */
14902
14889
  const VERSION = '11.0.0';
14903
14890
  /** @hidden */
@@ -14912,8 +14899,8 @@ const getDeviceId = () => {
14912
14899
  /** @hidden */
14913
14900
  const getDeviceModel = () => {
14914
14901
  var _a, _b;
14915
- if ((_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node)
14916
- return process.versions.node;
14902
+ if ((_a = safeProcess.versions) === null || _a === void 0 ? void 0 : _a.node)
14903
+ return safeProcess.versions.node;
14917
14904
  if (navigator)
14918
14905
  return `${navigator.product.toLowerCase()}#${(_b = navigator.userAgent) !== null && _b !== void 0 ? _b : 'unknown_agent'}`;
14919
14906
  return 'unknown_model';
@@ -15076,7 +15063,7 @@ const connectClient = async (params) => {
15076
15063
  unsubscribe();
15077
15064
  });
15078
15065
  client.userId = params.userId;
15079
- client.user = users[0];
15066
+ client._internalUserId = users[0]._id;
15080
15067
  client.accessToken = accessToken;
15081
15068
  return client.ws.connected;
15082
15069
  };
@@ -15138,11 +15125,11 @@ const getCommentTopic = ({ path }) => {
15138
15125
  let mqttAccessToken;
15139
15126
  let mqttUserId;
15140
15127
  function subscribeTopic(topic, callback) {
15141
- const { mqtt, emitter, accessToken, user } = getActiveClient();
15142
- if (mqttAccessToken !== accessToken || mqttUserId !== user._id) {
15128
+ const { mqtt, emitter, accessToken, _internalUserId } = getActiveClient();
15129
+ if (mqttAccessToken !== accessToken || mqttUserId !== _internalUserId) {
15143
15130
  mqttAccessToken = accessToken;
15144
- mqttUserId = user._id;
15145
- mqtt.connect({ accessToken: accessToken, userId: user._id });
15131
+ mqttUserId = _internalUserId;
15132
+ mqtt.connect({ accessToken: mqttAccessToken, userId: mqttUserId });
15146
15133
  proxyMqttEvents(mqtt, emitter);
15147
15134
  }
15148
15135
  return mqtt.subscribe(topic, callback);
@@ -16636,11 +16623,11 @@ const queryPosts = async (query) => {
16636
16623
  const { page = { limit: 10 } } = query, params = __rest(query
16637
16624
  // API-FIX: parameters should be querystring. (1)
16638
16625
  // API-FIX: backend should answer Amity.Response (2)
16639
- // const { data } = await client.http.get<Amity.Response<Amity.PagedRawResponse<Amity.PostPayload>>>(
16626
+ // const { data } = await client.http.get<Amity.Response<Amity.PagedResponse<Amity.PostPayload>>>(
16640
16627
  , ["page"]);
16641
16628
  // API-FIX: parameters should be querystring. (1)
16642
16629
  // API-FIX: backend should answer Amity.Response (2)
16643
- // const { data } = await client.http.get<Amity.Response<Amity.PagedRawResponse<Amity.PostPayload>>>(
16630
+ // const { data } = await client.http.get<Amity.Response<Amity.PagedResponse<Amity.PostPayload>>>(
16644
16631
  const { data } = await client.http.get(`/api/v4/posts`, { params: Object.assign(Object.assign({}, params), { options: {
16645
16632
  token: toToken(page, 'afterbeforeraw'),
16646
16633
  } }), });
@@ -16842,9 +16829,9 @@ const createPost = async (bundle) => {
16842
16829
  const client = getActiveClient();
16843
16830
  client.log('post/createPost', bundle);
16844
16831
  // API-FIX: backend rejects that we pass the dataType manually T_T
16845
- if (!bundle.dataType || ['text', 'image', 'file'].includes(bundle.dataType))
16832
+ if (!bundle.dataType || ['text', 'image', 'file', 'video'].includes(bundle.dataType))
16846
16833
  delete bundle.dataType;
16847
- const { data } = await client.http.post('/api/v3/posts', bundle);
16834
+ const { data } = await client.http.post('/api/v4/posts', bundle);
16848
16835
  const cachedAt = client.cache && Date.now();
16849
16836
  if (client.cache)
16850
16837
  ingestInCache(data, { cachedAt });
@@ -16876,7 +16863,7 @@ const createPost = async (bundle) => {
16876
16863
  const updatePost = async (postId, patch) => {
16877
16864
  const client = getActiveClient();
16878
16865
  client.log('user/updatePost', patch);
16879
- const { data } = await client.http.put(`/api/v3/posts/${encodeURIComponent(postId)}`, patch);
16866
+ const { data } = await client.http.put(`/api/v4/posts/${encodeURIComponent(postId)}`, patch);
16880
16867
  const cachedAt = client.cache && Date.now();
16881
16868
  if (client.cache)
16882
16869
  ingestInCache(data, { cachedAt });
@@ -17227,7 +17214,7 @@ const queryCommunityMembers = async (query) => {
17227
17214
  }
17228
17215
  const nextPage = toPage(paging.next);
17229
17216
  const prevPage = toPage(paging.previous);
17230
- return { data: communityUsers, nextPage, prevPage };
17217
+ return { data: communityUsers, cachedAt, nextPage, prevPage };
17231
17218
  };
17232
17219
  /**
17233
17220
  * ```js
@@ -18745,12 +18732,13 @@ const queryChannelMembers = async (query) => {
18745
18732
  });
18746
18733
  const { paging } = data, payload = __rest(data, ["paging"]);
18747
18734
  const { channelUsers } = payload;
18735
+ const cachedAt = client.cache && Date.now();
18748
18736
  if (client.cache) {
18749
18737
  ingestInCache(payload);
18750
18738
  }
18751
18739
  const nextPage = toPage(paging.next);
18752
18740
  const prevPage = toPage(paging.previous);
18753
- return { data: channelUsers, nextPage, prevPage };
18741
+ return { data: channelUsers, cachedAt, nextPage, prevPage };
18754
18742
  };
18755
18743
  /**
18756
18744
  * ```js
@@ -19495,17 +19483,56 @@ const observeCommunity = (communityId, callback) => {
19495
19483
  const queryGlobalFeed = async (query) => {
19496
19484
  const client = getActiveClient();
19497
19485
  client.log('feed/queryGlobalFeed', query);
19498
- const _a = query !== null && query !== void 0 ? query : {}, { page } = _a, params = __rest(_a, ["page"]);
19499
- const { data } = await client.http.get(`/api/v4/me/global-feeds`, { params: Object.assign(Object.assign({}, params), { options: {
19486
+ const _a = query !== null && query !== void 0 ? query : {}, { useCustomRanking, page } = _a, params = __rest(_a, ["useCustomRanking", "page"]);
19487
+ const { data } = await client.http.get(useCustomRanking ? `/api/v5/me/global-feeds` : `/api/v4/me/global-feeds`, { params: Object.assign(Object.assign({}, params), { options: {
19500
19488
  token: toToken(page, 'skiplimit')
19501
19489
  } }) });
19502
19490
  const { paging } = data, payload = __rest(data, ["paging"]);
19503
19491
  const { posts } = payload;
19504
- if (client.cache)
19492
+ const cachedAt = client.cache && Date.now();
19493
+ if (client.cache) {
19505
19494
  ingestInCache(payload);
19495
+ const cacheKey = ['globalFeed', 'query', Object.assign(Object.assign({}, params), { useCustomRanking, options: Object.assign({}, page) })];
19496
+ pushToCache(cacheKey, { posts: posts.map(getResolver('post')), paging });
19497
+ }
19506
19498
  const nextPage = toPage(paging.next);
19507
19499
  const prevPage = toPage(paging.previous);
19508
- return { data: posts, prevPage, nextPage };
19500
+ return { data: posts, cachedAt, prevPage, nextPage };
19501
+ };
19502
+ /**
19503
+ * ```js
19504
+ * import { queryGlobalFeed } from '@amityco/ts-sdk'
19505
+ * const posts = await queryGlobalFeed.locally()
19506
+ * ```
19507
+ *
19508
+ * Queries a paginable list of {@link Amity.Post} objects from cache
19509
+ *
19510
+ * @param query The query parameters
19511
+ * @returns A page of {@link Amity.Post} objects
19512
+ *
19513
+ * @category Feed API
19514
+ * @async
19515
+ **/
19516
+ queryGlobalFeed.locally = (query) => {
19517
+ var _a, _b;
19518
+ const client = getActiveClient();
19519
+ client.log('post/queryGlobalFeed.locally', query);
19520
+ if (!client.cache)
19521
+ return;
19522
+ const _c = query !== null && query !== void 0 ? query : {}, { useCustomRanking, page } = _c, params = __rest(_c, ["useCustomRanking", "page"]);
19523
+ const queryKey = ['globalFeed', 'query', Object.assign(Object.assign({}, params), { useCustomRanking, options: Object.assign({}, page) })];
19524
+ const { data, cachedAt } = (_a = pullFromCache(queryKey)) !== null && _a !== void 0 ? _a : {};
19525
+ if (!(data === null || data === void 0 ? void 0 : data.posts.length))
19526
+ return;
19527
+ const posts = data.posts
19528
+ .map(postId => pullFromCache(['post', 'get', postId]))
19529
+ .filter(Boolean)
19530
+ .map(({ data }) => data);
19531
+ const prevPage = toPage(data === null || data === void 0 ? void 0 : data.paging.previous);
19532
+ const nextPage = toPage(data === null || data === void 0 ? void 0 : data.paging.next);
19533
+ return posts.length === ((_b = data === null || data === void 0 ? void 0 : data.posts) === null || _b === void 0 ? void 0 : _b.length)
19534
+ ? { data: posts, cachedAt, prevPage, nextPage }
19535
+ : undefined;
19509
19536
  };
19510
19537
 
19511
19538
  /**
@@ -19966,4 +19993,4 @@ const onStreamRecorded = (callback) => {
19966
19993
  return createEventSubscriber(client, 'stream/onStreamRecorded', 'video-streaming.didRecord', filter);
19967
19994
  };
19968
19995
 
19969
- export { SubscriptionLevels, VERSION$1 as VERSION, addChannelMembers, addChannelMembersRole, addCommunityMembers, addCommunityMembersRole, addReaction, backupCache, connectClient, createChannel, createClient, createComment, createCommunity, createFile, createMessage, createPost, createQuery, createReport, createStream, deleteChannel, deleteComment, deleteCommunity, deleteFile, deleteMessage, deletePost, deleteReport, deleteStream, disableCache, disconnectClient, disposeStream, dropFromCache, enableCache, fileUrlWithSize, filterByPropEquality, getActiveClient, getChannel, getChannels, getComment, getCommentTopic, getComments, getCommunities, getCommunity, getCommunityTopic, getFile, getMessage, getMessages, getPost, getPostTopic, getPosts, getRole, getStream, getUser, getUserTopic, getUsers, isAfterBefore, isAfterBeforeRaw, isCachable, isConnected, isFetcher, isFresh, isLocal, isMutator, isOffline, isPaged, isReportedByMe, isSkipLimit, joinChannel, joinCommunity, leaveChannel, leaveCommunity, mergeInCache, observeChannel, observeComment, observeComments, observeCommunity, observeFile, observeMessage, observeMessages, observePost, observePosts, observeUser, onChannelDeleted, onChannelJoined, onChannelLeft, onChannelUpdated, onClientBanned, onClientDisconnected, onCommentCreated, onCommentDeleted, onCommentFlagged, onCommentReactionAdded, onCommentReactionRemoved, onCommentUnflagged, onCommentUpdated, onCommunityCreated, onCommunityDeleted, onCommunityJoined, onCommunityLeft, onCommunityUpdated, onCommunityUserAdded, onCommunityUserBanned, onCommunityUserRemoved, onCommunityUserUnbanned, onConnectionError, onMemberAdded, onMemberRemoved, onMessageCreated, onMessageDeleted, onMessageUpdated, onPostApproved, onPostCreated, onPostDeclined, onPostDeleted, onPostFlagged, onPostReactionAdded, onPostReactionRemoved, onPostUnflagged, onPostUpdated, onReactionRemoved, onStreamRecorded, onStreamStarted, onStreamStopped, onUserFlagCleared, onUserFlagged, onUserUnflagged, onUserUpdated, pullFromCache, pushToCache, queryCache, queryChannelMembers, queryChannels, queryComments, queryCommunities, queryCommunityMembers, queryGlobalFeed, queryMessages, queryOptions, queryPosts, queryRoles, queryStreams, queryUsers, removeChannelMembers, removeChannelMembersRole, removeCommunityMembers, removeCommunityMembersRole, removeReaction, restoreCache, runQuery, sliceByPaging, sortByChannelSegment, sortByDisplayName, sortByFirstCreated, sortByLastActivity, sortByLastCreated, sortBySegmentNumber, subscribeTopic, toPage, toPageRaw, toToken, updateChannel, updateComment, updateCommunity, updateMessage, updatePost, updateStream, updateUser, upsertInCache, wipeCache };
19996
+ export { API_REGIONS, SubscriptionLevels, VERSION$1 as VERSION, addChannelMembers, addChannelMembersRole, addCommunityMembers, addCommunityMembersRole, addReaction, backupCache, connectClient, createChannel, createClient, createComment, createCommunity, createFile, createMessage, createPost, createQuery, createReport, createStream, deleteChannel, deleteComment, deleteCommunity, deleteFile, deleteMessage, deletePost, deleteReport, deleteStream, disableCache, disconnectClient, disposeStream, dropFromCache, enableCache, fileUrlWithSize, filterByPropEquality, getActiveClient, getChannel, getChannels, getComment, getCommentTopic, getComments, getCommunities, getCommunity, getCommunityTopic, getFile, getMessage, getMessages, getPost, getPostTopic, getPosts, getRole, getStream, getUser, getUserTopic, getUsers, isAfterBefore, isAfterBeforeRaw, isCachable, isConnected, isFetcher, isFresh, isLocal, isMutator, isOffline, isPaged, isReportedByMe, isSkipLimit, joinChannel, joinCommunity, leaveChannel, leaveCommunity, mergeInCache, observeChannel, observeComment, observeComments, observeCommunity, observeFile, observeMessage, observeMessages, observePost, observePosts, observeUser, onChannelDeleted, onChannelJoined, onChannelLeft, onChannelUpdated, onClientBanned, onClientDisconnected, onCommentCreated, onCommentDeleted, onCommentFlagged, onCommentReactionAdded, onCommentReactionRemoved, onCommentUnflagged, onCommentUpdated, onCommunityCreated, onCommunityDeleted, onCommunityJoined, onCommunityLeft, onCommunityUpdated, onCommunityUserAdded, onCommunityUserBanned, onCommunityUserRemoved, onCommunityUserUnbanned, onConnectionError, onMemberAdded, onMemberRemoved, onMessageCreated, onMessageDeleted, onMessageUpdated, onPostApproved, onPostCreated, onPostDeclined, onPostDeleted, onPostFlagged, onPostReactionAdded, onPostReactionRemoved, onPostUnflagged, onPostUpdated, onReactionRemoved, onStreamRecorded, onStreamStarted, onStreamStopped, onUserFlagCleared, onUserFlagged, onUserUnflagged, onUserUpdated, pullFromCache, pushToCache, queryCache, queryChannelMembers, queryChannels, queryComments, queryCommunities, queryCommunityMembers, queryGlobalFeed, queryMessages, queryOptions, queryPosts, queryRoles, queryStreams, queryUsers, removeChannelMembers, removeChannelMembersRole, removeCommunityMembers, removeCommunityMembersRole, removeReaction, restoreCache, runQuery, sortByChannelSegment, sortByDisplayName, sortByFirstCreated, sortByLastActivity, sortByLastCreated, sortBySegmentNumber, subscribeTopic, toPage, toPageRaw, toToken, updateChannel, updateComment, updateCommunity, updateMessage, updatePost, updateStream, updateUser, upsertInCache, wipeCache };