@amityco/ts-sdk 6.34.0 → 6.34.1-cb91336.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.
package/.env CHANGED
@@ -1,28 +1,28 @@
1
1
  LIVE_STREAM_KEY='-----BEGIN PRIVATE KEY-----
2
- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHo80SecH7FuF2
3
- hFYnb+l26/VN8UMLXAQFLnxciNTEwkGVFMpdezlH8rU2HtUJL4RETogbAOLVY0XM
4
- js6sPn8G1nALmh9qeDpUtVqFOVtBHxEZ910TLOtQiunjqJKO5nWdqZ71EC3OFluR
5
- iGQkO84BiIFbv37ub7xl3S8XarbtKoLcyVpkDHi+1wx1pgCAn6gtBUgckPL5NR8j
6
- Lseabl3HAXQfhTCKo4tmOFM2Dxwl1IUMmIJrJg/aIU/U0tj/1Eoo7mG0JcNWX19l
7
- W3EecCbi0ncCJOrkUdwlBrcjaMayaX/ubEwyUeTGiLdyc4L3GRLHjyK8xgVNXRMH
8
- bZWJ2a5NAgMBAAECggEASxuE+35zTFO/XydKgmvIGcWL9FbgMlXb7Vcf0nBoG945
9
- biz0NVc2paraIhJXc608xbYF3qLmtAE1MVBI0ORyRdBHNxY024l/6H6SH60Ed+uI
10
- M4ysp5ourY6Vj+DLwpdRiI9YDjqYAQDIUmhNxJP7XPhOMoZI6st+xZQBM34ic/bv
11
- AMSJm9OZphSp3+qXVkFZztr2mxD2EZSJJLYxi8BCdgM2qhazalbcJ6zDKHCZWVWm
12
- 8RRxDGldyMb/237JxETzP40tAlzOZDmBAbUgEnurDJ93RVDIE3rbZUshwgeQd18a
13
- em096mWgvB1AIKYgsTAR3pw+V19YWAjq/glP6fz8wQKBgQD/oQq+ukKF0PRgBeM5
14
- geTjSwsdGppQLmf5ndujvoiz/TpdjDEPu6R8kigQr1rG2t4K/yfdZoI8RdmJD1al
15
- 3Q7N9hofooSy4rj6E3txzWZCHJjHad2cnCp/O26HiReGAl7wTcfTmNdiFHhZQzm5
16
- JBkvWAiwuvQMNfEbnXxw6/vIDwKBgQDH7fX8gsc77JLvAWgp1MaQN/sbqVb6JeT1
17
- FQfR8E/WFCSmzQBtNzd5KgYuCeelwr/8DyYytvN2BzCYZXp73gI1jF3YlW5jVn74
18
- OY6TwQ095digwo6Z0yuxopdIOApKgAkL9PRKgNrqAf3NAyMua6lOGifzjDojC3KU
19
- fylQmxMn4wKBgHp2B9O/H0dEBw5JQ8W0+JX6yWQz7mEjGiR2/1W+XXb8hQ1zr709
20
- w1r6Gb+EghRpnZ3fBpYGGbYOMFx8wKHM+N6qW3F0ReX8v2juFGE8aRSa5oYBrWzt
21
- U16Idjbv8hj84cZ1PJmdyvDtpYn9rpWHOZl4rxEbPvbqkIsOMyNVqdT5AoGAOSge
22
- mwIIU2le2FVeohbibXiToWTYKMuMmURZ5/r72AgKMmWJKbAPe+Q3wBG01/7FRBpQ
23
- oU8Ma0HC8s6QJbliiEyIx9JwrJWd1vkdecBHONrtA4ibm/5zD2WcOllLF+FitLhi
24
- 3qnX6+6F0IaFGFBPJrTzlv0P4dTz/OAdv52V7GECgYEA2TttOKBAqWllgOaZOkql
25
- LVMJVmgR7s6tLi1+cEP8ZcapV9aRbRzTAKXm4f8AEhtlG9F9kCOvHYCYGi6JaiWJ
26
- ZkHjeex3T+eE6Di6y5Bm/Ift5jtVhJ4jCVwHOKTMej79NPUFTJfv8hCo29haBDv6
27
- RXFrv+T21KCcw8k3sJeJWWQ=
2
+ MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDAARz+hmBgi8pJ
3
+ Qb8LeY41gtHhk+ACMwRfhsn7GqpqRQNG2qU0755mzZuVDUqjQMGSo8THJB7O+OJs
4
+ flbZRkFXlFoFOVNw1UpNOgwEQZ6wB9oRwzepTJAfF1sVhm/o/ixvXh1zDFNDy6yZ
5
+ pXyiiJHUVxqyjllZhxnwdvjoVtDs6hW6awG09bB9nh/TTejlUKXoAgzqVwu/1QMu
6
+ UVViET495elEe19aUarEy+oL2iKeXCEvqda/pWNBdbieFyJvvZ08HN8dPuT88wq2
7
+ jZLEAth1vrwQ2IAa4ktaLcBQdLJgIkrbDvAiVZ8lQAjS/bq5vXQikTGvoPlC5bbn
8
+ vuOM/3eLAgMBAAECggEAVZ+peHAghq2QVj71nX5lxsNCKaCyYwixSJBpfouTt7Rz
9
+ E6PpzMOXFi1W1o+I22jDakuSM2SOQKqI/u0QefB0r0O/KVk5NrZHXk0mkrdYtxOp
10
+ UgaGyf8UvmjB+8VqHrNKyZdk9qtmbnNj01kTTcAtmE4H39zPR7eR/8Rul94vaZbs
11
+ wCnKJS3mLT3JxyGug6lxanveKkjG+CKC1nJQYWaxCJxaFSzbwXQPvDhB+TvrIbee
12
+ pd5v4EAyEJohpr+T9oDGGJkb/KARBZCtwLyB976PKJwwBA8MRVL1i5QwawuMiMq5
13
+ UtnOnbGKtCeFzaLbNU0Qi8bqyims84EQxC6DOu1fkQKBgQDdvsoBsEhsOXV7hlIJ
14
+ aEd0eSJZVkdqimxH8uGoMM2FeNaOrcB6yBXqTSP0R3OIyf8eaY6yjRvP30ZNXcll
15
+ /gD3O1Mu6YmWQdt1W2WA6pKOsUuPXasf0pdOF7IiFZKlSabz5YHXFqwVuqm8loaj
16
+ sXel3YWqPVdHiankE7tz+3ssnQKBgQDdqi4TNdD1MdEpihx19jr0QjUiXW3939FK
17
+ qp30HESPEGDGQzXdmJgif9HhZb+cJSuWaHEbjgBrYahvgCF+y6LbEpOD+D/dmT+s
18
+ DEAQaR84sah6dokwPjV8fjBSrcVFjCS+doxv0d3p/9OUEeyUhFrY03nxtIEYkLIE
19
+ /Zvn37b4RwKBgQCLENVFe9XfsaVhQ5r9dV2iyTlmh7qgMZG5CbTFs12hQGhm8McO
20
+ +Z7s41YSJCFr/yq1WwP4LJDtrBw99vyQr1zRsG35tNLp3gGRNzGQSQyC2uQFVHw2
21
+ p+7mNewsfhUK/gbrXNsyFnDz6635rPlhfbII3sWuP2wWXFqkxE9CbMwR7QKBgQC6
22
+ awDMzxmo2/iYArrkyevSuEuPVxvFwpF1RgAI6C0QVCnPE38dmdN4UB7mfHekje4W
23
+ VEercMURidPp0cxZolCYBQtilUjAyL0vqC3In1/Ogjq6oy3FEMxSop1pKxMY5j+Q
24
+ noqFD+6deLUrddeNH7J3X4LSr4dSbX4JjG+tlgt+yQKBgQCuwTL4hA6KqeInQ0Ta
25
+ 9VQX5Qr8hFlqJz1gpymi/k63tW/Ob8yedbg3WWNWyShwRMFYyY9S81ITFWM95uL6
26
+ vF3x9rmRjwElJw9PMwVu6dmf/CO0Z1wzXSp2VVD12gbrUD/0/d7MUoJ9LgC8X8f/
27
+ n0txLHYGHbx+nf95+JUg6lV3hg==
28
28
  -----END PRIVATE KEY-----'
package/dist/index.cjs.js CHANGED
@@ -5239,8 +5239,8 @@ class StoryComputedValue {
5239
5239
  return;
5240
5240
  }
5241
5241
  const groupByType = stories.reduce((acc, story) => {
5242
- const { data: { targetId, syncState }, } = story;
5243
- if (targetId === this._targetId) {
5242
+ const { data: { targetId, syncState, isDeleted }, } = story;
5243
+ if (targetId === this._targetId && !isDeleted) {
5244
5244
  acc[syncState] += 1;
5245
5245
  }
5246
5246
  return acc;
@@ -25327,7 +25327,7 @@ var index$3 = /*#__PURE__*/Object.freeze({
25327
25327
  getPoll: getPoll
25328
25328
  });
25329
25329
 
25330
- 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-----";
25330
+ 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-----";
25331
25331
  /*
25332
25332
  * The crypto algorithm used for importing key and signing string
25333
25333
  */
@@ -25764,6 +25764,30 @@ const createStory = async (payload) => {
25764
25764
  };
25765
25765
  };
25766
25766
 
25767
+ const createOptimisticTarget = async ({ targetId, targetType, }) => {
25768
+ var _a, _b;
25769
+ const targetCache = pullFromCache([
25770
+ "storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */,
25771
+ 'get',
25772
+ targetId,
25773
+ ]);
25774
+ if (!targetCache) {
25775
+ let optimisticTarget = {
25776
+ targetId,
25777
+ targetType,
25778
+ };
25779
+ if (targetType === 'community') {
25780
+ const community = await getCommunity$1(targetId);
25781
+ optimisticTarget = Object.assign(Object.assign({}, optimisticTarget), { targetPublicId: community.data.communityId, targetUpdatedAt: (_a = community.data.updatedAt) !== null && _a !== void 0 ? _a : new Date().toISOString() });
25782
+ }
25783
+ if (targetType === 'user') {
25784
+ const user = await getUser$2(targetId);
25785
+ optimisticTarget = Object.assign(Object.assign({}, optimisticTarget), { targetPublicId: user.data.userPublicId, targetUpdatedAt: (_b = user.data.updatedAt) !== null && _b !== void 0 ? _b : new Date().toISOString() });
25786
+ }
25787
+ pushToCache(["storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */, 'get', targetId], optimisticTarget);
25788
+ }
25789
+ };
25790
+
25767
25791
  /**
25768
25792
  * ```js
25769
25793
  * import { StoryRepository } from '@amityco/ts-sdk'
@@ -25813,6 +25837,7 @@ const createImageStory = async (targetType, targetId, formData, metadata = {}, i
25813
25837
  throw new Error('Failed to upload image');
25814
25838
  const { fileId } = data[0];
25815
25839
  payload = Object.assign(Object.assign({}, payload), { data: Object.assign(Object.assign({}, payload.data), { fileId }) });
25840
+ createOptimisticTarget({ targetId, targetType });
25816
25841
  // Fire optimistic event - update fileId
25817
25842
  createOptimisticEvent({ payload, formData }, optimisticData => {
25818
25843
  fireEvent('local.story.created', optimisticData);
@@ -25866,6 +25891,7 @@ const createVideoStory = async (targetType, targetId, formData, metadata = {}, i
25866
25891
  pushToCache(["story-sync-state" /* STORY_KEY_CACHE.SYNC_STATE */, targetId], "syncing" /* Amity.SyncState.Syncing */);
25867
25892
  // Update local story expires time
25868
25893
  pushToCache(["story-expire" /* STORY_KEY_CACHE.EXPIRE */, targetId], new Date(date.setFullYear(date.getFullYear() + 1)));
25894
+ createOptimisticTarget({ targetId, targetType });
25869
25895
  // Fire optimistic event
25870
25896
  createOptimisticEvent({ payload, formData, isVideo: true }, optimisticData => {
25871
25897
  fireEvent('local.story.created', optimisticData);
@@ -25903,6 +25929,7 @@ const getStoryCache = (storyId) => {
25903
25929
  };
25904
25930
 
25905
25931
  const deleteStory = async (storyId, permanent = false) => {
25932
+ var _a, _b, _c;
25906
25933
  const client = getActiveClient();
25907
25934
  client.log('story/deleteStory', storyId);
25908
25935
  let cached;
@@ -25919,6 +25946,57 @@ const deleteStory = async (storyId, permanent = false) => {
25919
25946
  users: [],
25920
25947
  stories: [Object.assign(Object.assign({}, data), { isDeleted: true })],
25921
25948
  });
25949
+ /* ------ Unsynced story case ------ */
25950
+ if (data.syncState !== "synced" /* Amity.SyncState.Synced */) {
25951
+ if (permanent) {
25952
+ dropFromCache(["story" /* STORY_KEY_CACHE.STORY */, 'get', storyId]);
25953
+ }
25954
+ else {
25955
+ pushToCache(["story" /* STORY_KEY_CACHE.STORY */, 'get', storyId], Object.assign(Object.assign({}, cached.data), { isDeleted: true }));
25956
+ }
25957
+ const unsyncedStoriesCache = (_a = queryCache([
25958
+ "story" /* STORY_KEY_CACHE.STORY */,
25959
+ 'get',
25960
+ ])) === null || _a === void 0 ? void 0 : _a.filter(story => story.data.syncState !== "synced" /* Amity.SyncState.Synced */ &&
25961
+ story.data.targetId === data.targetId &&
25962
+ story.data.isDeleted !== true);
25963
+ // update localLastStoryExpiresAt to be the last story expires
25964
+ if (unsyncedStoriesCache && unsyncedStoriesCache.length > 0) {
25965
+ const lastStoryExpires = unsyncedStoriesCache.reduce((acc, story) => {
25966
+ const expireAt = new Date(story.data.expiresAt || 0);
25967
+ return expireAt > acc ? expireAt : acc;
25968
+ }, new Date(0));
25969
+ pushToCache(["story-expire" /* STORY_KEY_CACHE.EXPIRE */, cached.data.targetId], lastStoryExpires.toISOString());
25970
+ }
25971
+ else {
25972
+ // if no unsynced stories, remove last story expires since there is no more story
25973
+ dropFromCache(["story-expire" /* STORY_KEY_CACHE.EXPIRE */, cached.data.targetId]);
25974
+ }
25975
+ return true;
25976
+ }
25977
+ /* ------ Synced story case ------ */
25978
+ const targetCache = (_b = pullFromCache([
25979
+ "storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */,
25980
+ 'get',
25981
+ data.targetId,
25982
+ ])) === null || _b === void 0 ? void 0 : _b.data;
25983
+ const syncedStoriesCache = (_c = queryCache([
25984
+ "story" /* STORY_KEY_CACHE.STORY */,
25985
+ 'get',
25986
+ ])) === null || _c === void 0 ? void 0 : _c.filter(story => story.data.syncState === "synced" /* Amity.SyncState.Synced */ &&
25987
+ story.data.targetId === data.targetId &&
25988
+ story.data.isDeleted !== true);
25989
+ let lastStoryExpiresAt;
25990
+ if (syncedStoriesCache && syncedStoriesCache.length > 0) {
25991
+ lastStoryExpiresAt = syncedStoriesCache === null || syncedStoriesCache === void 0 ? void 0 : syncedStoriesCache.reduce((acc, story) => {
25992
+ const expireAt = new Date(story.data.expiresAt || 0);
25993
+ return expireAt > acc ? expireAt : acc;
25994
+ }, new Date(0));
25995
+ }
25996
+ // update lastStoryExpiresAt from lastest synced story
25997
+ if (targetCache) {
25998
+ pushToCache(["storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */, 'get', data.targetId], Object.assign(Object.assign({}, targetCache), { lastStoryExpiresAt }));
25999
+ }
25922
26000
  }
25923
26001
  }
25924
26002
  const response = await client.http.delete(`/api/v4/stories/${storyId}`, {
@@ -26231,6 +26309,7 @@ const getActiveStoriesByTarget = (params, callback) => {
26231
26309
  });
26232
26310
  };
26233
26311
  const processNewData = (result, event, initial = false, loading = false, error = false) => {
26312
+ var _a;
26234
26313
  const cached = pullFromCache(cacheKey);
26235
26314
  const data = {
26236
26315
  loading,
@@ -26249,6 +26328,14 @@ const getActiveStoriesByTarget = (params, callback) => {
26249
26328
  : [...new Set([...data.data, ...result.map(getResolver('story'))])];
26250
26329
  }
26251
26330
  }
26331
+ const unSyncedStories = (_a = queryCache(["story" /* STORY_KEY_CACHE.STORY */, 'get'])) === null || _a === void 0 ? void 0 : _a.filter(story => story.data.targetId === params.targetId &&
26332
+ story.data.syncState !== "synced" /* Amity.SyncState.Synced */).map(story => getResolver('story')(story.data));
26333
+ if (unSyncedStories && (unSyncedStories === null || unSyncedStories === void 0 ? void 0 : unSyncedStories.length) > 0) {
26334
+ unSyncedStories.forEach(referenceId => {
26335
+ if (!data.data.includes(referenceId))
26336
+ data.data.push(referenceId);
26337
+ });
26338
+ }
26252
26339
  pushToCache(cacheKey, data.data);
26253
26340
  responder(data);
26254
26341
  };
@@ -26680,13 +26767,23 @@ class GlobalStoryLiveCollectionController extends LiveCollectionController {
26680
26767
  const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
26681
26768
  if (!collection)
26682
26769
  return;
26683
- let data = collection.data
26770
+ const targetIds = collection.data;
26771
+ const cachedTargets = queryCache(["storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */]);
26772
+ if (cachedTargets && (cachedTargets === null || cachedTargets === void 0 ? void 0 : cachedTargets.length) > 0) {
26773
+ cachedTargets === null || cachedTargets === void 0 ? void 0 : cachedTargets.forEach(({ key }) => {
26774
+ if (!collection.data.includes(key[2]))
26775
+ targetIds.push(key[2]);
26776
+ });
26777
+ }
26778
+ let data = targetIds
26684
26779
  .map(targetId => pullFromCache(["storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */, 'get', targetId]))
26685
26780
  .filter(Boolean)
26686
26781
  .map(storyTarget => LinkedObject.storyTarget(storyTarget.data));
26687
26782
  if (!this.shouldNotify(data) && origin === 'event')
26688
26783
  return;
26689
26784
  data = this.applyFilter(data)
26785
+ // exclude story targets with invalid stories
26786
+ .filter(({ localSortingDate }) => !!localSortingDate)
26690
26787
  // Remove internal fields
26691
26788
  .map((_a) => {
26692
26789
  var rest = __rest(_a, ["localFilter", "localLastExpires", "localLastSeen", "localSortingDate"]);
package/dist/index.esm.js CHANGED
@@ -21331,8 +21331,8 @@ class StoryComputedValue {
21331
21331
  return;
21332
21332
  }
21333
21333
  const groupByType = stories.reduce((acc, story) => {
21334
- const { data: { targetId, syncState }, } = story;
21335
- if (targetId === this._targetId) {
21334
+ const { data: { targetId, syncState, isDeleted }, } = story;
21335
+ if (targetId === this._targetId && !isDeleted) {
21336
21336
  acc[syncState] += 1;
21337
21337
  }
21338
21338
  return acc;
@@ -41419,7 +41419,7 @@ var index$3 = /*#__PURE__*/Object.freeze({
41419
41419
  getPoll: getPoll
41420
41420
  });
41421
41421
 
41422
- 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-----";
41422
+ 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-----";
41423
41423
  /*
41424
41424
  * The crypto algorithm used for importing key and signing string
41425
41425
  */
@@ -41856,6 +41856,30 @@ const createStory = async (payload) => {
41856
41856
  };
41857
41857
  };
41858
41858
 
41859
+ const createOptimisticTarget = async ({ targetId, targetType, }) => {
41860
+ var _a, _b;
41861
+ const targetCache = pullFromCache([
41862
+ "storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */,
41863
+ 'get',
41864
+ targetId,
41865
+ ]);
41866
+ if (!targetCache) {
41867
+ let optimisticTarget = {
41868
+ targetId,
41869
+ targetType,
41870
+ };
41871
+ if (targetType === 'community') {
41872
+ const community = await getCommunity$1(targetId);
41873
+ optimisticTarget = Object.assign(Object.assign({}, optimisticTarget), { targetPublicId: community.data.communityId, targetUpdatedAt: (_a = community.data.updatedAt) !== null && _a !== void 0 ? _a : new Date().toISOString() });
41874
+ }
41875
+ if (targetType === 'user') {
41876
+ const user = await getUser$2(targetId);
41877
+ optimisticTarget = Object.assign(Object.assign({}, optimisticTarget), { targetPublicId: user.data.userPublicId, targetUpdatedAt: (_b = user.data.updatedAt) !== null && _b !== void 0 ? _b : new Date().toISOString() });
41878
+ }
41879
+ pushToCache(["storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */, 'get', targetId], optimisticTarget);
41880
+ }
41881
+ };
41882
+
41859
41883
  /**
41860
41884
  * ```js
41861
41885
  * import { StoryRepository } from '@amityco/ts-sdk'
@@ -41905,6 +41929,7 @@ const createImageStory = async (targetType, targetId, formData, metadata = {}, i
41905
41929
  throw new Error('Failed to upload image');
41906
41930
  const { fileId } = data[0];
41907
41931
  payload = Object.assign(Object.assign({}, payload), { data: Object.assign(Object.assign({}, payload.data), { fileId }) });
41932
+ createOptimisticTarget({ targetId, targetType });
41908
41933
  // Fire optimistic event - update fileId
41909
41934
  createOptimisticEvent({ payload, formData }, optimisticData => {
41910
41935
  fireEvent('local.story.created', optimisticData);
@@ -41958,6 +41983,7 @@ const createVideoStory = async (targetType, targetId, formData, metadata = {}, i
41958
41983
  pushToCache(["story-sync-state" /* STORY_KEY_CACHE.SYNC_STATE */, targetId], "syncing" /* Amity.SyncState.Syncing */);
41959
41984
  // Update local story expires time
41960
41985
  pushToCache(["story-expire" /* STORY_KEY_CACHE.EXPIRE */, targetId], new Date(date.setFullYear(date.getFullYear() + 1)));
41986
+ createOptimisticTarget({ targetId, targetType });
41961
41987
  // Fire optimistic event
41962
41988
  createOptimisticEvent({ payload, formData, isVideo: true }, optimisticData => {
41963
41989
  fireEvent('local.story.created', optimisticData);
@@ -41995,6 +42021,7 @@ const getStoryCache = (storyId) => {
41995
42021
  };
41996
42022
 
41997
42023
  const deleteStory = async (storyId, permanent = false) => {
42024
+ var _a, _b, _c;
41998
42025
  const client = getActiveClient();
41999
42026
  client.log('story/deleteStory', storyId);
42000
42027
  let cached;
@@ -42011,6 +42038,57 @@ const deleteStory = async (storyId, permanent = false) => {
42011
42038
  users: [],
42012
42039
  stories: [Object.assign(Object.assign({}, data), { isDeleted: true })],
42013
42040
  });
42041
+ /* ------ Unsynced story case ------ */
42042
+ if (data.syncState !== "synced" /* Amity.SyncState.Synced */) {
42043
+ if (permanent) {
42044
+ dropFromCache(["story" /* STORY_KEY_CACHE.STORY */, 'get', storyId]);
42045
+ }
42046
+ else {
42047
+ pushToCache(["story" /* STORY_KEY_CACHE.STORY */, 'get', storyId], Object.assign(Object.assign({}, cached.data), { isDeleted: true }));
42048
+ }
42049
+ const unsyncedStoriesCache = (_a = queryCache([
42050
+ "story" /* STORY_KEY_CACHE.STORY */,
42051
+ 'get',
42052
+ ])) === null || _a === void 0 ? void 0 : _a.filter(story => story.data.syncState !== "synced" /* Amity.SyncState.Synced */ &&
42053
+ story.data.targetId === data.targetId &&
42054
+ story.data.isDeleted !== true);
42055
+ // update localLastStoryExpiresAt to be the last story expires
42056
+ if (unsyncedStoriesCache && unsyncedStoriesCache.length > 0) {
42057
+ const lastStoryExpires = unsyncedStoriesCache.reduce((acc, story) => {
42058
+ const expireAt = new Date(story.data.expiresAt || 0);
42059
+ return expireAt > acc ? expireAt : acc;
42060
+ }, new Date(0));
42061
+ pushToCache(["story-expire" /* STORY_KEY_CACHE.EXPIRE */, cached.data.targetId], lastStoryExpires.toISOString());
42062
+ }
42063
+ else {
42064
+ // if no unsynced stories, remove last story expires since there is no more story
42065
+ dropFromCache(["story-expire" /* STORY_KEY_CACHE.EXPIRE */, cached.data.targetId]);
42066
+ }
42067
+ return true;
42068
+ }
42069
+ /* ------ Synced story case ------ */
42070
+ const targetCache = (_b = pullFromCache([
42071
+ "storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */,
42072
+ 'get',
42073
+ data.targetId,
42074
+ ])) === null || _b === void 0 ? void 0 : _b.data;
42075
+ const syncedStoriesCache = (_c = queryCache([
42076
+ "story" /* STORY_KEY_CACHE.STORY */,
42077
+ 'get',
42078
+ ])) === null || _c === void 0 ? void 0 : _c.filter(story => story.data.syncState === "synced" /* Amity.SyncState.Synced */ &&
42079
+ story.data.targetId === data.targetId &&
42080
+ story.data.isDeleted !== true);
42081
+ let lastStoryExpiresAt;
42082
+ if (syncedStoriesCache && syncedStoriesCache.length > 0) {
42083
+ lastStoryExpiresAt = syncedStoriesCache === null || syncedStoriesCache === void 0 ? void 0 : syncedStoriesCache.reduce((acc, story) => {
42084
+ const expireAt = new Date(story.data.expiresAt || 0);
42085
+ return expireAt > acc ? expireAt : acc;
42086
+ }, new Date(0));
42087
+ }
42088
+ // update lastStoryExpiresAt from lastest synced story
42089
+ if (targetCache) {
42090
+ pushToCache(["storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */, 'get', data.targetId], Object.assign(Object.assign({}, targetCache), { lastStoryExpiresAt }));
42091
+ }
42014
42092
  }
42015
42093
  }
42016
42094
  const response = await client.http.delete(`/api/v4/stories/${storyId}`, {
@@ -42323,6 +42401,7 @@ const getActiveStoriesByTarget = (params, callback) => {
42323
42401
  });
42324
42402
  };
42325
42403
  const processNewData = (result, event, initial = false, loading = false, error = false) => {
42404
+ var _a;
42326
42405
  const cached = pullFromCache(cacheKey);
42327
42406
  const data = {
42328
42407
  loading,
@@ -42341,6 +42420,14 @@ const getActiveStoriesByTarget = (params, callback) => {
42341
42420
  : [...new Set([...data.data, ...result.map(getResolver('story'))])];
42342
42421
  }
42343
42422
  }
42423
+ const unSyncedStories = (_a = queryCache(["story" /* STORY_KEY_CACHE.STORY */, 'get'])) === null || _a === void 0 ? void 0 : _a.filter(story => story.data.targetId === params.targetId &&
42424
+ story.data.syncState !== "synced" /* Amity.SyncState.Synced */).map(story => getResolver('story')(story.data));
42425
+ if (unSyncedStories && (unSyncedStories === null || unSyncedStories === void 0 ? void 0 : unSyncedStories.length) > 0) {
42426
+ unSyncedStories.forEach(referenceId => {
42427
+ if (!data.data.includes(referenceId))
42428
+ data.data.push(referenceId);
42429
+ });
42430
+ }
42344
42431
  pushToCache(cacheKey, data.data);
42345
42432
  responder(data);
42346
42433
  };
@@ -42772,13 +42859,23 @@ class GlobalStoryLiveCollectionController extends LiveCollectionController {
42772
42859
  const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
42773
42860
  if (!collection)
42774
42861
  return;
42775
- let data = collection.data
42862
+ const targetIds = collection.data;
42863
+ const cachedTargets = queryCache(["storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */]);
42864
+ if (cachedTargets && (cachedTargets === null || cachedTargets === void 0 ? void 0 : cachedTargets.length) > 0) {
42865
+ cachedTargets === null || cachedTargets === void 0 ? void 0 : cachedTargets.forEach(({ key }) => {
42866
+ if (!collection.data.includes(key[2]))
42867
+ targetIds.push(key[2]);
42868
+ });
42869
+ }
42870
+ let data = targetIds
42776
42871
  .map(targetId => pullFromCache(["storyTarget" /* STORY_KEY_CACHE.STORY_TARGET */, 'get', targetId]))
42777
42872
  .filter(Boolean)
42778
42873
  .map(storyTarget => LinkedObject.storyTarget(storyTarget.data));
42779
42874
  if (!this.shouldNotify(data) && origin === 'event')
42780
42875
  return;
42781
42876
  data = this.applyFilter(data)
42877
+ // exclude story targets with invalid stories
42878
+ .filter(({ localSortingDate }) => !!localSortingDate)
42782
42879
  // Remove internal fields
42783
42880
  .map((_a) => {
42784
42881
  var rest = __rest(_a, ["localFilter", "localLastExpires", "localLastSeen", "localSortingDate"]);