@amityco/ts-sdk 7.19.1-0d42b83a.0 → 7.19.1-0e4fcc82.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.
@@ -1 +1 @@
1
- {"version":3,"file":"prepareChannelPayload.d.ts","sourceRoot":"","sources":["../../../src/channelRepository/utils/prepareChannelPayload.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,4BAA4B,UAA6C,CAAC;AACvF,eAAO,MAAM,oBAAoB,aAAc,KAAK,MAAM,UAAU,EAAE,MAAM,CAAC,YAChC,CAAC;AAE9C,wBAAgB,cAAc,CAC5B,OAAO,EAAE,KAAK,CAAC,UAAU,EACzB,OAAO,GAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAsC,GACjF,KAAK,CAAC,qBAAqB,CAmB7B;AAED,eAAO,MAAM,qBAAqB,eACpB,MAAM,cAAc,YACvB;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAE,SAO/C,CAAC;AAkDF,eAAO,MAAM,qBAAqB,eACpB,MAAM,cAAc,YACvB;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAE,KAC7C,QAAQ,MAAM,uBAAuB,CA2DvC,CAAC"}
1
+ {"version":3,"file":"prepareChannelPayload.d.ts","sourceRoot":"","sources":["../../../src/channelRepository/utils/prepareChannelPayload.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,4BAA4B,UAA6C,CAAC;AACvF,eAAO,MAAM,oBAAoB,aAAc,KAAK,MAAM,UAAU,EAAE,MAAM,CAAC,YAChC,CAAC;AAE9C,wBAAgB,cAAc,CAC5B,OAAO,EAAE,KAAK,CAAC,UAAU,EACzB,OAAO,GAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAsC,GACjF,KAAK,CAAC,qBAAqB,CAmB7B;AAED,eAAO,MAAM,qBAAqB,eACpB,MAAM,cAAc,YACvB;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAE,SAO/C,CAAC;AA2EF,eAAO,MAAM,qBAAqB,eACpB,MAAM,cAAc,YACvB;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAE,KAC7C,QAAQ,MAAM,uBAAuB,CA2DvC,CAAC"}
package/dist/index.cjs.js CHANGED
@@ -5994,24 +5994,43 @@ const preUpdateChannelCache = (rawPayload, options = { isMessagePreviewUpdated:
5994
5994
  });
5995
5995
  };
5996
5996
  const updateChannelUnread = ({ currentUserId, channels, channelUsers, }) => {
5997
+ var _a, _b;
5997
5998
  const channelsUnread = [];
5998
5999
  for (let i = 0; i < channels.length; i += 1) {
5999
6000
  if (isUnreadCountSupport(channels[i])) {
6000
6001
  const cacheKey = ['channelUnread', 'get', channels[i].channelId];
6001
6002
  const channelUser = channelUsers.find(channelUser => channelUser.channelId === channels[i].channelId && channelUser.userId === currentUserId);
6002
- let unreadCount = 0;
6003
+ // readToSegment, lastMentionedSegment and lastSegment are monotonically non-decreasing;
6004
+ // prefer cached values when ahead of the server so a refetch returning stale data cannot
6005
+ // revert updates already written by MessageReadReceiptSyncEngine.markRead (readToSegment)
6006
+ // or onMessageCreatedMqtt (lastSegment).
6007
+ const cached = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
6008
+ const lastSegment = Math.max((_b = cached === null || cached === void 0 ? void 0 : cached.lastSegment) !== null && _b !== void 0 ? _b : 0, channels[i].messageCount);
6003
6009
  let readToSegment = null;
6004
6010
  let lastMentionedSegment = null;
6011
+ let unreadCount = 0;
6005
6012
  let isMentioned = false;
6006
6013
  if (channelUser) {
6007
- readToSegment = channelUser.readToSegment;
6008
- lastMentionedSegment = channelUser.lastMentionedSegment;
6009
- unreadCount = Math.max(channels[i].messageCount - readToSegment, 0);
6010
- isMentioned = lastMentionedSegment > readToSegment;
6014
+ const serverRead = channelUser.readToSegment;
6015
+ const serverMention = channelUser.lastMentionedSegment;
6016
+ readToSegment =
6017
+ typeof (cached === null || cached === void 0 ? void 0 : cached.readToSegment) === 'number' &&
6018
+ (typeof serverRead !== 'number' || cached.readToSegment > serverRead)
6019
+ ? cached.readToSegment
6020
+ : serverRead !== null && serverRead !== void 0 ? serverRead : null;
6021
+ lastMentionedSegment =
6022
+ typeof (cached === null || cached === void 0 ? void 0 : cached.lastMentionedSegment) === 'number' &&
6023
+ (typeof serverMention !== 'number' || cached.lastMentionedSegment > serverMention)
6024
+ ? cached.lastMentionedSegment
6025
+ : serverMention !== null && serverMention !== void 0 ? serverMention : null;
6026
+ const readForCalc = readToSegment !== null && readToSegment !== void 0 ? readToSegment : 0;
6027
+ unreadCount = Math.max(lastSegment - readForCalc, 0);
6028
+ isMentioned =
6029
+ typeof lastMentionedSegment === 'number' && readForCalc < lastMentionedSegment;
6011
6030
  }
6012
6031
  const cacheChannelUnread = {
6013
6032
  channelId: channels[i].channelId,
6014
- lastSegment: channels[i].messageCount,
6033
+ lastSegment,
6015
6034
  readToSegment,
6016
6035
  lastMentionedSegment,
6017
6036
  unreadCount,
@@ -6021,6 +6040,8 @@ const updateChannelUnread = ({ currentUserId, channels, channelUsers, }) => {
6021
6040
  pushToCache(cacheKey, cacheChannelUnread);
6022
6041
  channelsUnread.push(cacheChannelUnread);
6023
6042
  }
6043
+ }
6044
+ if (channelsUnread.length > 0) {
6024
6045
  fireEvent('local.channelUnread.updated', channelsUnread);
6025
6046
  }
6026
6047
  };
@@ -10006,16 +10027,13 @@ const onMessageCreatedMqtt = (callback) => {
10006
10027
  }
10007
10028
  if (client.useLegacyUnreadCount) {
10008
10029
  rawPayload.messages.forEach(message => {
10009
- var _a, _b;
10030
+ var _a, _b, _c;
10010
10031
  const channelUnread = (_a = pullFromCache([
10011
10032
  'channelUnread',
10012
10033
  'get',
10013
10034
  message.channelId,
10014
10035
  ])) === null || _a === void 0 ? void 0 : _a.data;
10015
- if (!channelUnread ||
10016
- channelUnread.lastSegment >= message.segment ||
10017
- typeof channelUnread.readToSegment !== 'number' ||
10018
- typeof channelUnread.lastMentionedSegment !== 'number')
10036
+ if (!channelUnread || channelUnread.lastSegment >= message.segment)
10019
10037
  return;
10020
10038
  const lastSegment = message.segment;
10021
10039
  const isMentionedInMessage = (_b = message.mentionedUsers) === null || _b === void 0 ? void 0 : _b.some(mention => {
@@ -10027,7 +10045,8 @@ const onMessageCreatedMqtt = (callback) => {
10027
10045
  const lastMentionedSegment = isMentionedInMessage
10028
10046
  ? message.segment
10029
10047
  : channelUnread.lastMentionedSegment;
10030
- const updatedChannelUnread = Object.assign(Object.assign({}, channelUnread), { lastSegment, unreadCount: Math.max(lastSegment - channelUnread.readToSegment, 0), lastMentionedSegment, isMentioned: !(channelUnread.readToSegment >= lastMentionedSegment) });
10048
+ const readToSegment = (_c = channelUnread.readToSegment) !== null && _c !== void 0 ? _c : 0;
10049
+ const updatedChannelUnread = Object.assign(Object.assign({}, channelUnread), { lastSegment, unreadCount: Math.max(lastSegment - readToSegment, 0), lastMentionedSegment, isMentioned: typeof lastMentionedSegment === 'number' && readToSegment < lastMentionedSegment });
10031
10050
  pushToCache(['channelUnread', 'get', message.channelId], updatedChannelUnread);
10032
10051
  fireEvent('local.channelUnread.updated', [updatedChannelUnread]);
10033
10052
  });
package/dist/index.esm.js CHANGED
@@ -22086,24 +22086,43 @@ const preUpdateChannelCache = (rawPayload, options = { isMessagePreviewUpdated:
22086
22086
  });
22087
22087
  };
22088
22088
  const updateChannelUnread = ({ currentUserId, channels, channelUsers, }) => {
22089
+ var _a, _b;
22089
22090
  const channelsUnread = [];
22090
22091
  for (let i = 0; i < channels.length; i += 1) {
22091
22092
  if (isUnreadCountSupport(channels[i])) {
22092
22093
  const cacheKey = ['channelUnread', 'get', channels[i].channelId];
22093
22094
  const channelUser = channelUsers.find(channelUser => channelUser.channelId === channels[i].channelId && channelUser.userId === currentUserId);
22094
- let unreadCount = 0;
22095
+ // readToSegment, lastMentionedSegment and lastSegment are monotonically non-decreasing;
22096
+ // prefer cached values when ahead of the server so a refetch returning stale data cannot
22097
+ // revert updates already written by MessageReadReceiptSyncEngine.markRead (readToSegment)
22098
+ // or onMessageCreatedMqtt (lastSegment).
22099
+ const cached = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
22100
+ const lastSegment = Math.max((_b = cached === null || cached === void 0 ? void 0 : cached.lastSegment) !== null && _b !== void 0 ? _b : 0, channels[i].messageCount);
22095
22101
  let readToSegment = null;
22096
22102
  let lastMentionedSegment = null;
22103
+ let unreadCount = 0;
22097
22104
  let isMentioned = false;
22098
22105
  if (channelUser) {
22099
- readToSegment = channelUser.readToSegment;
22100
- lastMentionedSegment = channelUser.lastMentionedSegment;
22101
- unreadCount = Math.max(channels[i].messageCount - readToSegment, 0);
22102
- isMentioned = lastMentionedSegment > readToSegment;
22106
+ const serverRead = channelUser.readToSegment;
22107
+ const serverMention = channelUser.lastMentionedSegment;
22108
+ readToSegment =
22109
+ typeof (cached === null || cached === void 0 ? void 0 : cached.readToSegment) === 'number' &&
22110
+ (typeof serverRead !== 'number' || cached.readToSegment > serverRead)
22111
+ ? cached.readToSegment
22112
+ : serverRead !== null && serverRead !== void 0 ? serverRead : null;
22113
+ lastMentionedSegment =
22114
+ typeof (cached === null || cached === void 0 ? void 0 : cached.lastMentionedSegment) === 'number' &&
22115
+ (typeof serverMention !== 'number' || cached.lastMentionedSegment > serverMention)
22116
+ ? cached.lastMentionedSegment
22117
+ : serverMention !== null && serverMention !== void 0 ? serverMention : null;
22118
+ const readForCalc = readToSegment !== null && readToSegment !== void 0 ? readToSegment : 0;
22119
+ unreadCount = Math.max(lastSegment - readForCalc, 0);
22120
+ isMentioned =
22121
+ typeof lastMentionedSegment === 'number' && readForCalc < lastMentionedSegment;
22103
22122
  }
22104
22123
  const cacheChannelUnread = {
22105
22124
  channelId: channels[i].channelId,
22106
- lastSegment: channels[i].messageCount,
22125
+ lastSegment,
22107
22126
  readToSegment,
22108
22127
  lastMentionedSegment,
22109
22128
  unreadCount,
@@ -22113,6 +22132,8 @@ const updateChannelUnread = ({ currentUserId, channels, channelUsers, }) => {
22113
22132
  pushToCache(cacheKey, cacheChannelUnread);
22114
22133
  channelsUnread.push(cacheChannelUnread);
22115
22134
  }
22135
+ }
22136
+ if (channelsUnread.length > 0) {
22116
22137
  fireEvent('local.channelUnread.updated', channelsUnread);
22117
22138
  }
22118
22139
  };
@@ -26098,16 +26119,13 @@ const onMessageCreatedMqtt = (callback) => {
26098
26119
  }
26099
26120
  if (client.useLegacyUnreadCount) {
26100
26121
  rawPayload.messages.forEach(message => {
26101
- var _a, _b;
26122
+ var _a, _b, _c;
26102
26123
  const channelUnread = (_a = pullFromCache([
26103
26124
  'channelUnread',
26104
26125
  'get',
26105
26126
  message.channelId,
26106
26127
  ])) === null || _a === void 0 ? void 0 : _a.data;
26107
- if (!channelUnread ||
26108
- channelUnread.lastSegment >= message.segment ||
26109
- typeof channelUnread.readToSegment !== 'number' ||
26110
- typeof channelUnread.lastMentionedSegment !== 'number')
26128
+ if (!channelUnread || channelUnread.lastSegment >= message.segment)
26111
26129
  return;
26112
26130
  const lastSegment = message.segment;
26113
26131
  const isMentionedInMessage = (_b = message.mentionedUsers) === null || _b === void 0 ? void 0 : _b.some(mention => {
@@ -26119,7 +26137,8 @@ const onMessageCreatedMqtt = (callback) => {
26119
26137
  const lastMentionedSegment = isMentionedInMessage
26120
26138
  ? message.segment
26121
26139
  : channelUnread.lastMentionedSegment;
26122
- const updatedChannelUnread = Object.assign(Object.assign({}, channelUnread), { lastSegment, unreadCount: Math.max(lastSegment - channelUnread.readToSegment, 0), lastMentionedSegment, isMentioned: !(channelUnread.readToSegment >= lastMentionedSegment) });
26140
+ const readToSegment = (_c = channelUnread.readToSegment) !== null && _c !== void 0 ? _c : 0;
26141
+ const updatedChannelUnread = Object.assign(Object.assign({}, channelUnread), { lastSegment, unreadCount: Math.max(lastSegment - readToSegment, 0), lastMentionedSegment, isMentioned: typeof lastMentionedSegment === 'number' && readToSegment < lastMentionedSegment });
26123
26142
  pushToCache(['channelUnread', 'get', message.channelId], updatedChannelUnread);
26124
26143
  fireEvent('local.channelUnread.updated', [updatedChannelUnread]);
26125
26144
  });