@amityco/ts-sdk 7.8.1-fbfc876d.0 → 7.8.1

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 (115) hide show
  1. package/.env +26 -26
  2. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/client.d.ts +4 -0
  3. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/client.d.ts.map +1 -1
  4. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/client.js.map +1 -1
  5. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/community.d.ts +2 -1
  6. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/community.d.ts.map +1 -1
  7. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/community.js.map +1 -1
  8. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.d.ts +32 -0
  9. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.d.ts.map +1 -1
  10. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.js +22 -1
  11. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/feed.js.map +1 -1
  12. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/pinnedPost.d.ts +1 -4
  13. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/pinnedPost.d.ts.map +1 -1
  14. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/pinnedPost.js.map +1 -1
  15. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/poll.d.ts +2 -1
  16. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/poll.d.ts.map +1 -1
  17. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/domains/poll.js.map +1 -1
  18. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.d.ts +1 -0
  19. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.d.ts.map +1 -1
  20. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.js +1 -0
  21. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/@types/index.js.map +1 -1
  22. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getShareableLinkConfiguration.d.ts +16 -0
  23. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getShareableLinkConfiguration.d.ts.map +1 -0
  24. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getShareableLinkConfiguration.js +21 -0
  25. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/getShareableLinkConfiguration.js.map +1 -0
  26. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.d.ts +2 -0
  27. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.d.ts.map +1 -1
  28. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.js +2 -0
  29. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/client/api/index.js.map +1 -1
  30. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/communityRepository/observers/getCommunities/CommunitiesLiveCollectionController.d.ts.map +1 -1
  31. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/communityRepository/observers/getCommunities/CommunitiesLiveCollectionController.js +3 -2
  32. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/communityRepository/observers/getCommunities/CommunitiesLiveCollectionController.js.map +1 -1
  33. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.d.ts +1 -1
  34. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.d.ts.map +1 -1
  35. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.js +1 -1
  36. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/index.js.map +1 -1
  37. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts +13 -0
  38. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts.map +1 -0
  39. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.js +108 -0
  40. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/LiveCollectionController.js.map +1 -0
  41. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts +5 -0
  42. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts.map +1 -0
  43. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.js +15 -0
  44. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/PaginationController.js.map +1 -0
  45. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts +15 -0
  46. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts.map +1 -0
  47. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.js +78 -0
  48. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed/QueryStreamController.js.map +1 -0
  49. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.d.ts +23 -0
  50. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.d.ts.map +1 -0
  51. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.js +46 -0
  52. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/getUserFeed.js.map +1 -0
  53. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.d.ts +1 -0
  54. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.d.ts.map +1 -1
  55. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.js +1 -0
  56. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/feedRepository/observers/index.js.map +1 -1
  57. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/liveReactionRepository/api/createReaction.d.ts.map +1 -1
  58. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/liveReactionRepository/api/createReaction.js.map +1 -1
  59. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/pollRepository/api/createPoll.d.ts +2 -2
  60. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/pollRepository/api/createPoll.js +2 -2
  61. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/dist/pollRepository/api/createPoll.js.map +1 -1
  62. package/.rollup.cache/home/runner/work/AmityTypescriptSDK/AmityTypescriptSDK/packages/sdk/tsconfig.tsbuildinfo +1 -1
  63. package/dist/@types/domains/client.d.ts +4 -0
  64. package/dist/@types/domains/client.d.ts.map +1 -1
  65. package/dist/@types/domains/community.d.ts +2 -1
  66. package/dist/@types/domains/community.d.ts.map +1 -1
  67. package/dist/@types/domains/feed.d.ts +32 -0
  68. package/dist/@types/domains/feed.d.ts.map +1 -1
  69. package/dist/@types/domains/pinnedPost.d.ts +1 -4
  70. package/dist/@types/domains/pinnedPost.d.ts.map +1 -1
  71. package/dist/@types/domains/poll.d.ts +2 -1
  72. package/dist/@types/domains/poll.d.ts.map +1 -1
  73. package/dist/@types/index.d.ts +1 -0
  74. package/dist/@types/index.d.ts.map +1 -1
  75. package/dist/client/api/getShareableLinkConfiguration.d.ts +16 -0
  76. package/dist/client/api/getShareableLinkConfiguration.d.ts.map +1 -0
  77. package/dist/client/api/index.d.ts +2 -0
  78. package/dist/client/api/index.d.ts.map +1 -1
  79. package/dist/communityRepository/observers/getCommunities/CommunitiesLiveCollectionController.d.ts.map +1 -1
  80. package/dist/feedRepository/index.d.ts +1 -1
  81. package/dist/feedRepository/index.d.ts.map +1 -1
  82. package/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts +13 -0
  83. package/dist/feedRepository/observers/getUserFeed/LiveCollectionController.d.ts.map +1 -0
  84. package/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts +5 -0
  85. package/dist/feedRepository/observers/getUserFeed/PaginationController.d.ts.map +1 -0
  86. package/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts +15 -0
  87. package/dist/feedRepository/observers/getUserFeed/QueryStreamController.d.ts.map +1 -0
  88. package/dist/feedRepository/observers/getUserFeed.d.ts +23 -0
  89. package/dist/feedRepository/observers/getUserFeed.d.ts.map +1 -0
  90. package/dist/feedRepository/observers/index.d.ts +1 -0
  91. package/dist/feedRepository/observers/index.d.ts.map +1 -1
  92. package/dist/index.cjs.js +270 -8
  93. package/dist/index.esm.js +271 -9
  94. package/dist/index.umd.js +4 -4
  95. package/dist/liveReactionRepository/api/createReaction.d.ts.map +1 -1
  96. package/dist/pollRepository/api/createPoll.d.ts +2 -2
  97. package/package.json +1 -1
  98. package/src/@types/domains/client.ts +5 -0
  99. package/src/@types/domains/community.ts +1 -0
  100. package/src/@types/domains/feed.ts +44 -0
  101. package/src/@types/domains/pinnedPost.ts +1 -4
  102. package/src/@types/domains/poll.ts +2 -1
  103. package/src/@types/index.ts +1 -0
  104. package/src/client/api/getShareableLinkConfiguration.ts +26 -0
  105. package/src/client/api/index.ts +4 -0
  106. package/src/communityRepository/observers/getCommunities/CommunitiesLiveCollectionController.ts +3 -3
  107. package/src/feedRepository/index.ts +1 -1
  108. package/src/feedRepository/observers/getUserFeed/LiveCollectionController.ts +162 -0
  109. package/src/feedRepository/observers/getUserFeed/PaginationController.ts +37 -0
  110. package/src/feedRepository/observers/getUserFeed/QueryStreamController.ts +119 -0
  111. package/src/feedRepository/observers/getUserFeed.ts +56 -0
  112. package/src/feedRepository/observers/index.ts +1 -0
  113. package/src/liveReactionRepository/api/createReaction.ts +0 -1
  114. package/src/pollRepository/api/createPoll.ts +2 -2
  115. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"createReaction.d.ts","sourceRoot":"","sources":["../../../src/liveReactionRepository/api/createReaction.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc;iBAMZ,MAAM;cACT,MAAM;MACd,QAAQ,OAAO,CAyBlB,CAAC"}
1
+ {"version":3,"file":"createReaction.d.ts","sourceRoot":"","sources":["../../../src/liveReactionRepository/api/createReaction.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc;iBAMZ,MAAM;cACT,MAAM;MACd,QAAQ,OAAO,CAwBlB,CAAC"}
@@ -4,8 +4,8 @@
4
4
  * const created = await createPoll({
5
5
  * question: 'question',
6
6
  * answers: [
7
- * { dataType: 'text', data: 'answer1' },
8
- * { dataType: 'text', data: 'answer2' },
7
+ * { dataType: 'text', data: 'answer1', fileId: 'fileId1' },
8
+ * { dataType: 'text', data: 'answer2', fileId: 'fileId2' },
9
9
  * ],
10
10
  * closedIn: 1649136484
11
11
  * }))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amityco/ts-sdk",
3
- "version": "7.8.1-fbfc876d.0",
3
+ "version": "7.8.1",
4
4
  "license": "CC-BY-ND-4.0",
5
5
  "author": "amity.co <developers@amity.co> (https://amity.co)",
6
6
  "description": "Amity Social Cloud Typescript SDK",
@@ -116,6 +116,11 @@ declare global {
116
116
  };
117
117
  };
118
118
 
119
+ type ShareableLinkConfiguration = {
120
+ domain: string;
121
+ patterns: Record<string, string>;
122
+ };
123
+
119
124
  type FeedSettings = {
120
125
  [name in Amity.ContentFeedType]?: Amity.ContentSetting[];
121
126
  };
@@ -28,6 +28,7 @@ declare global {
28
28
  const enum CommunitySortByEnum {
29
29
  FirstCreated = 'firstCreated',
30
30
  LastCreated = 'lastCreated',
31
+ DisplayName = 'displayName',
31
32
  }
32
33
 
33
34
  type CommunitySortBy = `${Amity.CommunitySortByEnum}`;
@@ -1,7 +1,35 @@
1
1
  export {};
2
2
 
3
+ export const enum FeedDataTypeEnum {
4
+ Text = 'text',
5
+ Video = 'video',
6
+ Image = 'image',
7
+ File = 'file',
8
+ LiveStream = 'liveStream',
9
+ Clip = 'clip',
10
+ Poll = 'poll',
11
+ }
12
+
13
+ export const enum FeedSortByEnum {
14
+ LastCreated = 'lastCreated',
15
+ FirstCreated = 'firstCreated',
16
+ LastUpdated = 'lastUpdated',
17
+ FirstUpdated = 'firstUpdated',
18
+ }
19
+
20
+ export const enum FeedSourceEnum {
21
+ Community = 'community',
22
+ User = 'user',
23
+ }
24
+
3
25
  declare global {
4
26
  namespace Amity {
27
+ type FeedDataType = FeedDataTypeEnum;
28
+
29
+ type FeedSortBy = FeedSortByEnum;
30
+
31
+ type FeedSource = FeedSourceEnum;
32
+
5
33
  type Feed = {
6
34
  feedId: string;
7
35
  feedType: 'reviewing' | 'published';
@@ -31,5 +59,21 @@ declare global {
31
59
  Amity.InternalPost['postId'],
32
60
  QueryGlobalFeed
33
61
  >;
62
+
63
+ type QueryUserFeed = {
64
+ userId: string;
65
+ includeDeleted?: boolean;
66
+ sortBy?: Amity.FeedSortBy;
67
+ dataTypes?: Amity.FeedDataType[];
68
+ matchingOnlyParentPost?: boolean;
69
+ feedSources?: Amity.FeedSource[];
70
+ };
71
+
72
+ type UserFeedLiveCollection = Amity.LiveCollectionParams<QueryUserFeed>;
73
+
74
+ type UserFeedLiveCollectionCache = Amity.LiveCollectionCache<
75
+ Amity.InternalPost['postId'],
76
+ QueryUserFeed
77
+ >;
34
78
  }
35
79
  }
@@ -24,12 +24,9 @@ declare global {
24
24
  'params'
25
25
  >;
26
26
 
27
- type PinnedPost = {
27
+ type PinnedPost = Amity.RawPin & {
28
28
  post: Amity.Post | undefined;
29
- placement: Amity.Pin['placement'];
30
29
  target: Amity.PinTarget | undefined;
31
- pinnedBy: Amity.User;
32
- pinnedAt: Date;
33
30
  };
34
31
 
35
32
  type GlobalPinnedPostLiveCollection = Amity.LiveCollectionParams<{}>;
@@ -2,7 +2,7 @@ export {};
2
2
 
3
3
  declare global {
4
4
  namespace Amity {
5
- type PollDataType = 'text';
5
+ type PollDataType = 'text' | 'image';
6
6
 
7
7
  type PollAnswerType = 'single' | 'multiple';
8
8
 
@@ -12,6 +12,7 @@ declare global {
12
12
  data: string;
13
13
  voteCount: number;
14
14
  isVotedByUser: boolean;
15
+ fileId?: string;
15
16
  };
16
17
 
17
18
  type PollStatus = 'closed' | 'open';
@@ -44,4 +44,5 @@ export * from './domains/joinRequest';
44
44
  export * from './domains/pin';
45
45
  export * from './domains/pinnedPost';
46
46
  export * from './domains/liveReaction';
47
+ export * from './domains/feed';
47
48
  export * from './domains/hashtag';
@@ -0,0 +1,26 @@
1
+ import { getActiveClient } from './activeClient';
2
+
3
+ /**
4
+ * ```js
5
+ * import Client from '@amityco/ts-sdk'
6
+ * const shareableLinkConfiguration = await Client.getShareableLinkConfiguration()
7
+ * const postLinkPattern = shareableLinkConfiguration.post
8
+ * ```
9
+ *
10
+ * Fetches a {@link Amity.ShareableLinkConfiguration} object
11
+ *
12
+ * @returns A Promise of {@link Amity.ShareableLinkConfiguration} object
13
+ *
14
+ * @category Client API
15
+ * @async
16
+ */
17
+ export const getShareableLinkConfiguration =
18
+ async (): Promise<Amity.ShareableLinkConfiguration> => {
19
+ const client = getActiveClient();
20
+
21
+ const { data } = await client.http.get<Amity.ShareableLinkConfiguration>(
22
+ `/api/v3/network-settings/shareable-deep-links`,
23
+ );
24
+
25
+ return data;
26
+ };
@@ -21,3 +21,7 @@ export * from './enableUnreadCount';
21
21
  export * from './setUploadedFileAccessType';
22
22
 
23
23
  export * from './fetchLinkPreview';
24
+
25
+ export * from './getSocialSettings';
26
+
27
+ export * from './getShareableLinkConfiguration';
@@ -29,6 +29,7 @@ import {
29
29
  } from '~/communityRepository/communityMembership';
30
30
  import { isNonNullable } from '~/utils';
31
31
  import { convertEventPayload } from '~/utils/event';
32
+ import { communityLinkedObject } from '~/utils/linkedObject/communityLinkedObject';
32
33
 
33
34
  export class CommunityLiveCollectionController extends LiveCollectionController<
34
35
  'community',
@@ -105,12 +106,11 @@ export class CommunityLiveCollectionController extends LiveCollectionController<
105
106
  const collection = pullFromCache<Amity.CommunityLiveCollectionCache>(this.cacheKey)?.data;
106
107
  if (!collection) return;
107
108
 
108
- const data = this.applyFilter(
109
+ const data =
109
110
  collection.data
110
111
  .map(id => pullFromCache<Amity.Community>(['community', 'get', id]))
111
112
  .filter(isNonNullable)
112
- .map(({ data }) => data) ?? [],
113
- );
113
+ .map(({ data }) => communityLinkedObject(data)) ?? [];
114
114
 
115
115
  if (!this.shouldNotify(data) && origin === 'event') return;
116
116
 
@@ -1,2 +1,2 @@
1
1
  export { queryGlobalFeed } from './api';
2
- export { getCustomRankingGlobalFeed, getGlobalFeed } from './observers';
2
+ export { getCustomRankingGlobalFeed, getGlobalFeed, getUserFeed } from './observers';
@@ -0,0 +1,162 @@
1
+ import hash from 'object-hash';
2
+ import { pullFromCache, pushToCache } from '~/cache/api';
3
+ import { UserFeedPaginationController } from './PaginationController';
4
+ import { UserFeedQueryStreamController } from './QueryStreamController';
5
+ import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
6
+ import {
7
+ onPostCreated,
8
+ onPostUpdated,
9
+ onPostDeleted,
10
+ onPostFlagged,
11
+ onPostUnflagged,
12
+ onPostReactionAdded,
13
+ onPostReactionRemoved,
14
+ onPostApproved,
15
+ onPostDeclined,
16
+ } from '~/postRepository/events';
17
+ import { isNonNullable } from '~/utils';
18
+ import { EnumPostActions } from '~/postRepository/observers/enums';
19
+ import { LinkedObject } from '~/utils/linkedObject';
20
+ import { preparePostPayload } from '~/postRepository/utils/payload';
21
+ import { convertEventPayload } from '~/utils/event';
22
+ import { onCommentCreated, onCommentDeleted } from '~/commentRepository';
23
+ import { getPost } from '~/postRepository/internalApi/getPost';
24
+ import { onPostUpdatedLocal } from '~/postRepository/events/onPostUpdatedLocal';
25
+ import { onLocalPostReactionAdded } from '~/postRepository/events/onLocalPostReactionAdded';
26
+ import { onLocalPostReactionRemoved } from '~/postRepository/events/onLocalPostReactionRemoved';
27
+ import { onLocalPostDeleted } from '~/postRepository/events/onLocalPostDeleted';
28
+
29
+ export class UserFeedLiveCollectionController extends LiveCollectionController<
30
+ 'post',
31
+ Amity.UserFeedLiveCollection,
32
+ Amity.Post,
33
+ UserFeedPaginationController
34
+ > {
35
+ private queryStreamController: UserFeedQueryStreamController;
36
+
37
+ private query: Amity.UserFeedLiveCollection;
38
+
39
+ constructor(
40
+ query: Amity.UserFeedLiveCollection,
41
+ callback: Amity.LiveCollectionCallback<Amity.Post>,
42
+ ) {
43
+ const queryStreamId = hash(query);
44
+ const cacheKey = ['userFeed', 'collection', queryStreamId];
45
+ const paginationController = new UserFeedPaginationController(query);
46
+
47
+ super(paginationController, queryStreamId, cacheKey, callback);
48
+
49
+ this.query = query;
50
+ this.queryStreamController = new UserFeedQueryStreamController(
51
+ this.query,
52
+ this.cacheKey,
53
+ this.notifyChange.bind(this),
54
+ preparePostPayload,
55
+ );
56
+
57
+ this.callback = callback.bind(this);
58
+ this.loadPage({ initial: true });
59
+ }
60
+
61
+ protected setup() {
62
+ const collection = pullFromCache<Amity.UserFeedLiveCollectionCache>(this.cacheKey)?.data;
63
+ if (!collection) {
64
+ pushToCache(this.cacheKey, {
65
+ data: [],
66
+ params: {},
67
+ });
68
+ }
69
+ }
70
+
71
+ protected async persistModel(queryPayload: Amity.PostPayload & Amity.Pagination) {
72
+ await this.queryStreamController.saveToMainDB(queryPayload);
73
+ }
74
+
75
+ protected persistQueryStream({
76
+ response,
77
+ direction,
78
+ refresh,
79
+ }: Amity.LiveCollectionPersistQueryStreamParams<'post'>) {
80
+ this.queryStreamController.appendToQueryStream(response, direction, refresh);
81
+ }
82
+
83
+ startSubscription() {
84
+ return this.queryStreamController.subscribeRTE([
85
+ { fn: onPostCreated, action: EnumPostActions.OnPostCreated },
86
+ { fn: onPostUpdated, action: EnumPostActions.OnPostUpdated },
87
+ { fn: onPostUpdatedLocal, action: EnumPostActions.OnPostUpdated },
88
+ { fn: onPostDeleted, action: EnumPostActions.OnPostDeleted },
89
+ { fn: onPostFlagged, action: EnumPostActions.OnPostFlagged },
90
+ { fn: onPostUnflagged, action: EnumPostActions.OnPostUnflagged },
91
+ { fn: onPostApproved, action: EnumPostActions.OnPostApproved },
92
+ { fn: onPostDeclined, action: EnumPostActions.OnPostDeclined },
93
+ { fn: onPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
94
+ { fn: onPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
95
+ { fn: onLocalPostReactionAdded, action: EnumPostActions.OnPostReactionAdded },
96
+ { fn: onLocalPostReactionRemoved, action: EnumPostActions.OnPostReactionRemoved },
97
+ { fn: onLocalPostDeleted, action: EnumPostActions.OnPostDeleted },
98
+ {
99
+ fn: convertEventPayload(
100
+ (callback: Amity.Listener<Amity.InternalComment>) => {
101
+ return onCommentCreated(async (comment: Amity.InternalComment) => {
102
+ const currentCollection = pullFromCache<Amity.UserFeedLiveCollectionCache>(
103
+ this.cacheKey,
104
+ )?.data;
105
+
106
+ if (!currentCollection || currentCollection.data.includes(comment.referenceId))
107
+ return;
108
+
109
+ await getPost(comment.referenceId);
110
+ callback(comment);
111
+ });
112
+ },
113
+ 'referenceId',
114
+ 'post',
115
+ ),
116
+ action: EnumPostActions.OnPostUpdated,
117
+ },
118
+ {
119
+ fn: convertEventPayload(
120
+ (callback: Amity.Listener<Amity.InternalComment>) => {
121
+ return onCommentDeleted(async (comment: Amity.InternalComment) => {
122
+ const currentCollection = pullFromCache<Amity.UserFeedLiveCollectionCache>(
123
+ this.cacheKey,
124
+ )?.data;
125
+
126
+ if (!currentCollection || currentCollection.data.includes(comment.referenceId))
127
+ return;
128
+
129
+ await getPost(comment.referenceId);
130
+ callback(comment);
131
+ });
132
+ },
133
+ 'referenceId',
134
+ 'post',
135
+ ),
136
+ action: EnumPostActions.OnPostUpdated,
137
+ },
138
+ ]);
139
+ }
140
+
141
+ notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {
142
+ const collection = pullFromCache<Amity.UserFeedLiveCollectionCache>(this.cacheKey)?.data;
143
+ if (!collection) return;
144
+
145
+ const data = (
146
+ collection.data
147
+ .map(id => pullFromCache<Amity.InternalPost>(['post', 'get', id])!)
148
+ .filter(isNonNullable)
149
+ .map(({ data }) => data) ?? []
150
+ ).map(LinkedObject.post);
151
+
152
+ if (!this.shouldNotify(data) && origin === 'event') return;
153
+
154
+ this.callback({
155
+ onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),
156
+ data,
157
+ hasNextPage: !!this.paginationController.getNextToken(),
158
+ loading,
159
+ error,
160
+ });
161
+ }
162
+ }
@@ -0,0 +1,37 @@
1
+ import { PaginationController } from '~/core/liveCollection/PaginationController';
2
+ import { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';
3
+ import { inferIsDeleted } from '~/utils/inferIsDeleted';
4
+
5
+ export class UserFeedPaginationController extends PaginationController<
6
+ 'post',
7
+ Amity.UserFeedLiveCollection
8
+ > {
9
+ async getRequest(queryParams: Amity.UserFeedLiveCollection, token: string | undefined) {
10
+ const {
11
+ userId,
12
+ feedSources,
13
+ dataTypes,
14
+ includeDeleted,
15
+ matchingOnlyParentPost,
16
+ limit = COLLECTION_DEFAULT_PAGINATION_LIMIT,
17
+ ...params
18
+ } = queryParams;
19
+
20
+ const options = token ? { token } : { limit };
21
+
22
+ const { data: queryResponse } = await this.http.get<Amity.PostPayload & Amity.Pagination>(
23
+ `/api/v4/user-feeds/${userId}`,
24
+ {
25
+ params: {
26
+ ...params,
27
+ options,
28
+ dataTypes: dataTypes?.length ? dataTypes : undefined,
29
+ includePostedFeed: feedSources,
30
+ isDeleted: inferIsDeleted(includeDeleted),
31
+ matchingOnlyParentPost: matchingOnlyParentPost ?? !dataTypes?.length,
32
+ },
33
+ },
34
+ );
35
+ return queryResponse;
36
+ }
37
+ }
@@ -0,0 +1,119 @@
1
+ import { getResolver } from '~/core/model';
2
+ import { getActiveClient } from '~/client';
3
+ import { pullFromCache, pushToCache } from '~/cache/api';
4
+ import { ingestInCache } from '~/cache/api/ingestInCache';
5
+ import { EnumPostActions } from '~/postRepository/observers/enums';
6
+ import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
7
+
8
+ export class UserFeedQueryStreamController extends QueryStreamController<
9
+ Amity.PostPayload,
10
+ Amity.UserFeedLiveCollection
11
+ > {
12
+ private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
13
+
14
+ private preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload;
15
+
16
+ constructor(
17
+ query: Amity.UserFeedLiveCollection,
18
+ cacheKey: string[],
19
+ notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
20
+ preparePayload: (response: Amity.PostPayload) => Amity.ProcessedPostPayload,
21
+ ) {
22
+ super(query, cacheKey);
23
+ this.notifyChange = notifyChange;
24
+ this.preparePayload = preparePayload;
25
+ }
26
+
27
+ async saveToMainDB(response: Amity.PostPayload) {
28
+ const processedPayload = await this.preparePayload(response);
29
+
30
+ const client = getActiveClient();
31
+ const cachedAt = client.cache && Date.now();
32
+
33
+ if (client.cache) {
34
+ ingestInCache(processedPayload, { cachedAt });
35
+ }
36
+ }
37
+
38
+ appendToQueryStream(
39
+ response: Amity.PostPayload & Partial<Amity.Pagination>,
40
+ direction: Amity.LiveCollectionPageDirection,
41
+ refresh = false,
42
+ ) {
43
+ if (refresh) {
44
+ pushToCache(this.cacheKey, {
45
+ data: response.posts.map(getResolver('post')),
46
+ });
47
+ } else {
48
+ const collection = pullFromCache<Amity.UserFeedLiveCollectionCache>(this.cacheKey)?.data;
49
+
50
+ const posts = collection?.data ?? [];
51
+
52
+ pushToCache(this.cacheKey, {
53
+ ...collection,
54
+ data: [...new Set([...posts, ...response.posts.map(getResolver('post'))])],
55
+ });
56
+ }
57
+ }
58
+
59
+ reactor(action: EnumPostActions) {
60
+ return (post: Amity.InternalPost) => {
61
+ const collection = pullFromCache<Amity.UserFeedLiveCollectionCache>(this.cacheKey)?.data;
62
+
63
+ if (!collection) return;
64
+
65
+ // if the collection is parent post collection and
66
+ // post is not included in the collection or post is child post
67
+ if (
68
+ (!this.query.dataTypes || this.query.dataTypes.length === 0) &&
69
+ !collection.data.includes(post.parentPostId ? post.parentPostId : post.postId)
70
+ )
71
+ return;
72
+
73
+ if (action === EnumPostActions.OnPostDeleted) {
74
+ collection.data = collection.data.filter(postId => postId !== post.postId);
75
+ }
76
+
77
+ if (post.parentPostId && post.isDeleted) {
78
+ const parentPost = pullFromCache<Amity.InternalPost>([
79
+ 'post',
80
+ 'get',
81
+ post.parentPostId,
82
+ ])?.data;
83
+
84
+ if (!parentPost) return;
85
+
86
+ parentPost.children = parentPost.children.filter(childId => childId !== post.postId);
87
+ pushToCache(['post', 'get', parentPost.postId], parentPost);
88
+ }
89
+
90
+ if (action === EnumPostActions.OnPostDeclined) {
91
+ collection.data = collection.data.filter(postId => postId !== post.postId);
92
+ }
93
+
94
+ if (action === EnumPostActions.OnPostCreated || action === EnumPostActions.OnPostApproved) {
95
+ if (
96
+ this.query.dataTypes &&
97
+ this.query.dataTypes.length > 0 &&
98
+ !this.query.dataTypes.includes(post.dataType)
99
+ ) {
100
+ return;
101
+ }
102
+
103
+ collection.data = [...new Set([post.postId, ...collection.data])];
104
+ }
105
+
106
+ pushToCache(this.cacheKey, collection);
107
+ this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
108
+ };
109
+ }
110
+
111
+ subscribeRTE(
112
+ createSubscriber: {
113
+ fn: (reactor: (post: Amity.InternalPost) => void) => Amity.Unsubscriber;
114
+ action: EnumPostActions;
115
+ }[],
116
+ ) {
117
+ return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
118
+ }
119
+ }
@@ -0,0 +1,56 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { dropFromCache } from '~/cache/api/dropFromCache';
3
+ import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
4
+ import { UserFeedLiveCollectionController } from './getUserFeed/LiveCollectionController';
5
+
6
+ /* begin_public_function
7
+ id: feed.query.user_feed
8
+ */
9
+ /**
10
+ * ```js
11
+ * import { FeedRepository } from '@amityco/ts-sdk'
12
+ *
13
+ * let posts = []
14
+ * const unsubscribe = FeedRepository.getUserFeed({
15
+ * userId: string,
16
+ * feedSources: ['user', 'community'],
17
+ * }, response => response => processResponse(response))
18
+ * ```
19
+ *
20
+ * Observe all mutations on a list of {@link Amity.Post} for a given user and feedSources
21
+ *
22
+ * @param params.userId the ID of the user
23
+ * @param params.feedSources the sources of the feed
24
+ * @param callback the function to call when new data are available
25
+ * @param config
26
+ * @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
27
+ *
28
+ * @category Posts Live Collection
29
+ */
30
+ export const getUserFeed = (
31
+ params: Amity.UserFeedLiveCollection,
32
+ callback: Amity.LiveCollectionCallback<Amity.Post>,
33
+ config?: Amity.LiveCollectionConfig,
34
+ ): Amity.Unsubscriber => {
35
+ const { log, cache } = getActiveClient();
36
+
37
+ if (!cache) {
38
+ console.log(ENABLE_CACHE_MESSAGE);
39
+ }
40
+
41
+ const timestamp = Date.now();
42
+ log(`getUserFeed(tmpid: ${timestamp}) > listen`);
43
+
44
+ const userFeedLiveCollection = new UserFeedLiveCollectionController(params, callback);
45
+ const disposers = userFeedLiveCollection.startSubscription();
46
+
47
+ const cacheKey = userFeedLiveCollection.getCacheKey();
48
+
49
+ disposers.push(() => dropFromCache(cacheKey));
50
+
51
+ return () => {
52
+ log(`getUserFeed(tmpid: ${timestamp}) > dispose`);
53
+ disposers.forEach(fn => fn());
54
+ };
55
+ };
56
+ /* end_public_function */
@@ -1,2 +1,3 @@
1
1
  export { getCustomRankingGlobalFeed } from './getCustomRankingGlobalFeed';
2
2
  export { getGlobalFeed } from './getGlobalFeed';
3
+ export { getUserFeed } from './getUserFeed';
@@ -48,7 +48,6 @@ export const createReaction = async ({
48
48
  occurredAt: new Date().toISOString(),
49
49
  };
50
50
 
51
-
52
51
  reactionSynceEngine.createLiveReaction(reaction);
53
52
 
54
53
  fireEvent('local.liveReaction.created', [{ ...reaction, userId: client.userId!, referenceId }]);
@@ -11,8 +11,8 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
11
11
  * const created = await createPoll({
12
12
  * question: 'question',
13
13
  * answers: [
14
- * { dataType: 'text', data: 'answer1' },
15
- * { dataType: 'text', data: 'answer2' },
14
+ * { dataType: 'text', data: 'answer1', fileId: 'fileId1' },
15
+ * { dataType: 'text', data: 'answer2', fileId: 'fileId2' },
16
16
  * ],
17
17
  * closedIn: 1649136484
18
18
  * }))