@amityco/ts-sdk 7.4.1-b7aa4210.0 → 7.4.1-c116567e.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/dist/@types/core/events.d.ts +3 -0
  2. package/dist/@types/core/events.d.ts.map +1 -1
  3. package/dist/@types/core/model.d.ts +3 -1
  4. package/dist/@types/core/model.d.ts.map +1 -1
  5. package/dist/@types/core/payload.d.ts +11 -4
  6. package/dist/@types/core/payload.d.ts.map +1 -1
  7. package/dist/@types/domains/client.d.ts +10 -0
  8. package/dist/@types/domains/client.d.ts.map +1 -1
  9. package/dist/@types/domains/community.d.ts +10 -1
  10. package/dist/@types/domains/community.d.ts.map +1 -1
  11. package/dist/@types/domains/invitation.d.ts +72 -0
  12. package/dist/@types/domains/invitation.d.ts.map +1 -0
  13. package/dist/@types/index.d.ts +2 -0
  14. package/dist/@types/index.d.ts.map +1 -1
  15. package/dist/communityRepository/api/createCommunity.d.ts +2 -2
  16. package/dist/communityRepository/api/createCommunity.d.ts.map +1 -1
  17. package/dist/communityRepository/api/getCommunities.d.ts +1 -1
  18. package/dist/communityRepository/api/getCommunities.d.ts.map +1 -1
  19. package/dist/communityRepository/api/getCommunity.d.ts.map +1 -1
  20. package/dist/communityRepository/api/getRecommendedCommunities.d.ts +3 -1
  21. package/dist/communityRepository/api/getRecommendedCommunities.d.ts.map +1 -1
  22. package/dist/communityRepository/api/getTrendingCommunities.d.ts +3 -1
  23. package/dist/communityRepository/api/getTrendingCommunities.d.ts.map +1 -1
  24. package/dist/communityRepository/api/queryCommunities.d.ts.map +1 -1
  25. package/dist/communityRepository/api/updateCommunity.d.ts +2 -2
  26. package/dist/communityRepository/api/updateCommunity.d.ts.map +1 -1
  27. package/dist/communityRepository/communityMembership/events/onCommunityJoined.d.ts +1 -1
  28. package/dist/communityRepository/communityMembership/events/onCommunityJoined.d.ts.map +1 -1
  29. package/dist/communityRepository/communityMembership/events/onCommunityLeft.d.ts +1 -1
  30. package/dist/communityRepository/communityMembership/events/onCommunityLeft.d.ts.map +1 -1
  31. package/dist/communityRepository/communityMembership/events/onCommunityUserAdded.d.ts +1 -1
  32. package/dist/communityRepository/communityMembership/events/onCommunityUserAdded.d.ts.map +1 -1
  33. package/dist/communityRepository/communityMembership/events/onCommunityUserBanned.d.ts +1 -1
  34. package/dist/communityRepository/communityMembership/events/onCommunityUserBanned.d.ts.map +1 -1
  35. package/dist/communityRepository/communityMembership/events/onCommunityUserChanged.d.ts +1 -1
  36. package/dist/communityRepository/communityMembership/events/onCommunityUserChanged.d.ts.map +1 -1
  37. package/dist/communityRepository/communityMembership/events/onCommunityUserRemoved.d.ts +1 -1
  38. package/dist/communityRepository/communityMembership/events/onCommunityUserRemoved.d.ts.map +1 -1
  39. package/dist/communityRepository/communityMembership/events/onCommunityUserRoleAdded.d.ts +1 -1
  40. package/dist/communityRepository/communityMembership/events/onCommunityUserRoleAdded.d.ts.map +1 -1
  41. package/dist/communityRepository/communityMembership/events/onCommunityUserRoleRemoved.d.ts +1 -1
  42. package/dist/communityRepository/communityMembership/events/onCommunityUserRoleRemoved.d.ts.map +1 -1
  43. package/dist/communityRepository/communityMembership/events/onCommunityUserUnbanned.d.ts +1 -1
  44. package/dist/communityRepository/communityMembership/events/onCommunityUserUnbanned.d.ts.map +1 -1
  45. package/dist/communityRepository/communityMembership/events/onLocalCommunityJoined.d.ts +1 -1
  46. package/dist/communityRepository/communityMembership/events/onLocalCommunityJoined.d.ts.map +1 -1
  47. package/dist/communityRepository/communityMembership/events/onLocalCommunityLeft.d.ts +1 -1
  48. package/dist/communityRepository/communityMembership/events/onLocalCommunityLeft.d.ts.map +1 -1
  49. package/dist/communityRepository/communityMembership/events/onLocalCommunityUserAdded.d.ts +1 -1
  50. package/dist/communityRepository/communityMembership/events/onLocalCommunityUserAdded.d.ts.map +1 -1
  51. package/dist/communityRepository/communityMembership/events/onLocalCommunityUserRemoved.d.ts +1 -1
  52. package/dist/communityRepository/communityMembership/events/onLocalCommunityUserRemoved.d.ts.map +1 -1
  53. package/dist/communityRepository/communityMembership/events/onUserDeleted.d.ts +1 -1
  54. package/dist/communityRepository/communityMembership/events/onUserDeleted.d.ts.map +1 -1
  55. package/dist/communityRepository/communityMembership/events/utils.d.ts +2 -2
  56. package/dist/communityRepository/communityMembership/events/utils.d.ts.map +1 -1
  57. package/dist/communityRepository/communityMembership/observers/getMembers/CommunityMembersQueryStreamController.d.ts +2 -2
  58. package/dist/communityRepository/communityMembership/observers/getMembers/CommunityMembersQueryStreamController.d.ts.map +1 -1
  59. package/dist/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersQueryStreamController.d.ts +2 -2
  60. package/dist/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersQueryStreamController.d.ts.map +1 -1
  61. package/dist/communityRepository/communityModeration/events/onLocalCommunityRoleAdded.d.ts +1 -1
  62. package/dist/communityRepository/communityModeration/events/onLocalCommunityRoleAdded.d.ts.map +1 -1
  63. package/dist/communityRepository/communityModeration/events/onLocalCommunityRoleRemoved.d.ts +1 -1
  64. package/dist/communityRepository/communityModeration/events/onLocalCommunityRoleRemoved.d.ts.map +1 -1
  65. package/dist/communityRepository/events/onCommunityCreated.d.ts +1 -1
  66. package/dist/communityRepository/events/onCommunityCreated.d.ts.map +1 -1
  67. package/dist/communityRepository/events/onCommunityDeleted.d.ts +1 -1
  68. package/dist/communityRepository/events/onCommunityDeleted.d.ts.map +1 -1
  69. package/dist/communityRepository/events/onCommunityUpdated.d.ts +1 -1
  70. package/dist/communityRepository/events/onCommunityUpdated.d.ts.map +1 -1
  71. package/dist/communityRepository/events/utils.d.ts +1 -1
  72. package/dist/communityRepository/events/utils.d.ts.map +1 -1
  73. package/dist/communityRepository/observers/getCommunities/CommunitiesQueryStreamController.d.ts +2 -2
  74. package/dist/communityRepository/observers/getCommunities/CommunitiesQueryStreamController.d.ts.map +1 -1
  75. package/dist/communityRepository/observers/getRecommendedCommunities/RecommendedCommunitiesQueryStreamController.d.ts +2 -2
  76. package/dist/communityRepository/observers/getRecommendedCommunities/RecommendedCommunitiesQueryStreamController.d.ts.map +1 -1
  77. package/dist/communityRepository/observers/getTrendingCommunities/TrendingCommunitiesQueryStreamController.d.ts +2 -2
  78. package/dist/communityRepository/observers/getTrendingCommunities/TrendingCommunitiesQueryStreamController.d.ts.map +1 -1
  79. package/dist/communityRepository/observers/searchCommunities/SearchCommunitiesQueryStreamController.d.ts +2 -2
  80. package/dist/communityRepository/observers/searchCommunities/SearchCommunitiesQueryStreamController.d.ts.map +1 -1
  81. package/dist/communityRepository/observers/semanticSearch/SemanticSearchCommunityQueryStreamController.d.ts +2 -2
  82. package/dist/communityRepository/observers/semanticSearch/SemanticSearchCommunityQueryStreamController.d.ts.map +1 -1
  83. package/dist/communityRepository/utils/communityWithMembership.d.ts +1 -1
  84. package/dist/communityRepository/utils/communityWithMembership.d.ts.map +1 -1
  85. package/dist/communityRepository/utils/payload.d.ts +1 -1
  86. package/dist/communityRepository/utils/payload.d.ts.map +1 -1
  87. package/dist/core/events.d.ts +3 -3
  88. package/dist/core/events.d.ts.map +1 -1
  89. package/dist/core/model/idResolvers.d.ts.map +1 -1
  90. package/dist/core/model/index.d.ts.map +1 -1
  91. package/dist/index.cjs.js +2935 -2421
  92. package/dist/index.d.ts +1 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.esm.js +2283 -1770
  95. package/dist/index.umd.js +4 -4
  96. package/dist/invitationRepository/events/index.d.ts +4 -0
  97. package/dist/invitationRepository/events/index.d.ts.map +1 -0
  98. package/dist/invitationRepository/events/onLocalInvitationCreated.d.ts +17 -0
  99. package/dist/invitationRepository/events/onLocalInvitationCreated.d.ts.map +1 -0
  100. package/dist/invitationRepository/events/onLocalInvitationDeleted.d.ts +17 -0
  101. package/dist/invitationRepository/events/onLocalInvitationDeleted.d.ts.map +1 -0
  102. package/dist/invitationRepository/events/onLocalInvitationUpdated.d.ts +17 -0
  103. package/dist/invitationRepository/events/onLocalInvitationUpdated.d.ts.map +1 -0
  104. package/dist/invitationRepository/index.d.ts +2 -0
  105. package/dist/invitationRepository/index.d.ts.map +1 -0
  106. package/dist/invitationRepository/internalApi/acceptInvitation.d.ts +16 -0
  107. package/dist/invitationRepository/internalApi/acceptInvitation.d.ts.map +1 -0
  108. package/dist/invitationRepository/internalApi/cancelInvitation.d.ts +16 -0
  109. package/dist/invitationRepository/internalApi/cancelInvitation.d.ts.map +1 -0
  110. package/dist/invitationRepository/internalApi/createInvitations.d.ts +21 -0
  111. package/dist/invitationRepository/internalApi/createInvitations.d.ts.map +1 -0
  112. package/dist/invitationRepository/internalApi/index.d.ts +5 -0
  113. package/dist/invitationRepository/internalApi/index.d.ts.map +1 -0
  114. package/dist/invitationRepository/internalApi/rejectInvitation.d.ts +16 -0
  115. package/dist/invitationRepository/internalApi/rejectInvitation.d.ts.map +1 -0
  116. package/dist/invitationRepository/observers/getInvitations/InvitationsLiveCollectionController.d.ts +14 -0
  117. package/dist/invitationRepository/observers/getInvitations/InvitationsLiveCollectionController.d.ts.map +1 -0
  118. package/dist/invitationRepository/observers/getInvitations/InvitationsPaginationController.d.ts +5 -0
  119. package/dist/invitationRepository/observers/getInvitations/InvitationsPaginationController.d.ts.map +1 -0
  120. package/dist/invitationRepository/observers/getInvitations/InvitationsQueryStreamController.d.ts +15 -0
  121. package/dist/invitationRepository/observers/getInvitations/InvitationsQueryStreamController.d.ts.map +1 -0
  122. package/dist/invitationRepository/observers/getInvitations/enums.d.ts +6 -0
  123. package/dist/invitationRepository/observers/getInvitations/enums.d.ts.map +1 -0
  124. package/dist/invitationRepository/observers/getInvitations.d.ts +12 -0
  125. package/dist/invitationRepository/observers/getInvitations.d.ts.map +1 -0
  126. package/dist/invitationRepository/utils/index.d.ts +2 -0
  127. package/dist/invitationRepository/utils/index.d.ts.map +1 -0
  128. package/dist/invitationRepository/utils/prepareInvitationPayload.d.ts +2 -0
  129. package/dist/invitationRepository/utils/prepareInvitationPayload.d.ts.map +1 -0
  130. package/dist/utils/linkedObject/communityLinkedObject.d.ts +2 -0
  131. package/dist/utils/linkedObject/communityLinkedObject.d.ts.map +1 -0
  132. package/dist/utils/linkedObject/index.d.ts +2 -0
  133. package/dist/utils/linkedObject/index.d.ts.map +1 -1
  134. package/dist/utils/linkedObject/invitationLinkedObject.d.ts +2 -0
  135. package/dist/utils/linkedObject/invitationLinkedObject.d.ts.map +1 -0
  136. package/dist/utils/tests/dummy/post.d.ts +3 -3
  137. package/package.json +1 -1
  138. package/src/@types/core/events.ts +4 -0
  139. package/src/@types/core/model.ts +5 -1
  140. package/src/@types/core/payload.ts +13 -4
  141. package/src/@types/domains/client.ts +12 -0
  142. package/src/@types/domains/community.ts +18 -1
  143. package/src/@types/domains/invitation.ts +92 -0
  144. package/src/@types/index.ts +2 -0
  145. package/src/communityRepository/api/createCommunity.ts +5 -2
  146. package/src/communityRepository/api/getCommunities.ts +7 -2
  147. package/src/communityRepository/api/getCommunity.ts +4 -1
  148. package/src/communityRepository/api/getRecommendedCommunities.ts +11 -4
  149. package/src/communityRepository/api/getTrendingCommunities.ts +11 -4
  150. package/src/communityRepository/api/queryCommunities.ts +6 -1
  151. package/src/communityRepository/api/updateCommunity.ts +13 -3
  152. package/src/communityRepository/communityMembership/events/onCommunityJoined.ts +1 -1
  153. package/src/communityRepository/communityMembership/events/onCommunityLeft.ts +1 -1
  154. package/src/communityRepository/communityMembership/events/onCommunityUserAdded.ts +1 -1
  155. package/src/communityRepository/communityMembership/events/onCommunityUserBanned.ts +1 -1
  156. package/src/communityRepository/communityMembership/events/onCommunityUserChanged.ts +1 -1
  157. package/src/communityRepository/communityMembership/events/onCommunityUserRemoved.ts +1 -1
  158. package/src/communityRepository/communityMembership/events/onCommunityUserRoleAdded.ts +1 -1
  159. package/src/communityRepository/communityMembership/events/onCommunityUserRoleRemoved.ts +1 -1
  160. package/src/communityRepository/communityMembership/events/onCommunityUserUnbanned.ts +1 -1
  161. package/src/communityRepository/communityMembership/events/onLocalCommunityJoined.ts +1 -1
  162. package/src/communityRepository/communityMembership/events/onLocalCommunityLeft.ts +1 -1
  163. package/src/communityRepository/communityMembership/events/onLocalCommunityUserAdded.ts +1 -1
  164. package/src/communityRepository/communityMembership/events/onLocalCommunityUserRemoved.ts +1 -1
  165. package/src/communityRepository/communityMembership/events/onUserDeleted.ts +3 -1
  166. package/src/communityRepository/communityMembership/events/utils.ts +2 -2
  167. package/src/communityRepository/communityMembership/observers/getMembers/CommunityMembersQueryStreamController.ts +8 -2
  168. package/src/communityRepository/communityMembership/observers/searchMembers/SearchCommunityMembersQueryStreamController.ts +8 -2
  169. package/src/communityRepository/communityModeration/events/onLocalCommunityRoleAdded.ts +1 -1
  170. package/src/communityRepository/communityModeration/events/onLocalCommunityRoleRemoved.ts +1 -1
  171. package/src/communityRepository/events/onCommunityCreated.ts +1 -1
  172. package/src/communityRepository/events/onCommunityDeleted.ts +1 -1
  173. package/src/communityRepository/events/onCommunityUpdated.ts +1 -1
  174. package/src/communityRepository/events/utils.ts +1 -1
  175. package/src/communityRepository/observers/getCommunities/CommunitiesQueryStreamController.ts +2 -2
  176. package/src/communityRepository/observers/getRecommendedCommunities/RecommendedCommunitiesQueryStreamController.ts +2 -2
  177. package/src/communityRepository/observers/getTrendingCommunities/TrendingCommunitiesQueryStreamController.ts +2 -2
  178. package/src/communityRepository/observers/searchCommunities/SearchCommunitiesQueryStreamController.ts +2 -2
  179. package/src/communityRepository/observers/semanticSearch/SemanticSearchCommunityQueryStreamController.ts +2 -2
  180. package/src/communityRepository/utils/communityWithMembership.ts +8 -4
  181. package/src/communityRepository/utils/payload.ts +1 -1
  182. package/src/core/liveCollection/PaginationController.ts +1 -1
  183. package/src/core/liveCollection/PaginationNoPageController.ts +1 -1
  184. package/src/core/model/idResolvers.ts +2 -0
  185. package/src/core/model/index.ts +2 -0
  186. package/src/index.ts +2 -0
  187. package/src/invitationRepository/events/index.ts +3 -0
  188. package/src/invitationRepository/events/onLocalInvitationCreated.ts +33 -0
  189. package/src/invitationRepository/events/onLocalInvitationDeleted.ts +33 -0
  190. package/src/invitationRepository/events/onLocalInvitationUpdated.ts +33 -0
  191. package/src/invitationRepository/index.ts +1 -0
  192. package/src/invitationRepository/internalApi/acceptInvitation.ts +45 -0
  193. package/src/invitationRepository/internalApi/cancelInvitation.ts +44 -0
  194. package/src/invitationRepository/internalApi/createInvitations.ts +52 -0
  195. package/src/invitationRepository/internalApi/index.ts +4 -0
  196. package/src/invitationRepository/internalApi/rejectInvitation.ts +45 -0
  197. package/src/invitationRepository/observers/getInvitations/InvitationsLiveCollectionController.ts +148 -0
  198. package/src/invitationRepository/observers/getInvitations/InvitationsPaginationController.ts +19 -0
  199. package/src/invitationRepository/observers/getInvitations/InvitationsQueryStreamController.ts +97 -0
  200. package/src/invitationRepository/observers/getInvitations/enums.ts +5 -0
  201. package/src/invitationRepository/observers/getInvitations.ts +44 -0
  202. package/src/invitationRepository/utils/index.ts +1 -0
  203. package/src/invitationRepository/utils/prepareInvitationPayload.ts +11 -0
  204. package/src/messagePreview/utils/getChannelMessagePreviewWithUser.ts +3 -3
  205. package/src/utils/linkedObject/communityLinkedObject.ts +29 -0
  206. package/src/utils/linkedObject/index.ts +4 -0
  207. package/src/utils/linkedObject/invitationLinkedObject.ts +44 -0
@@ -54,6 +54,8 @@ export const PAYLOAD2MODEL: Record<string, Amity.Domain> = {
54
54
  pins: 'pin',
55
55
 
56
56
  notificationTrayItems: 'notificationTrayItem',
57
+
58
+ invitations: 'invitation',
57
59
  };
58
60
 
59
61
  /** hidden */
package/src/index.ts CHANGED
@@ -51,3 +51,5 @@ export * as AdRepository from './adRepository';
51
51
  export * from './external/api';
52
52
 
53
53
  export * as notificationTray from './notificationTray';
54
+
55
+ export * as InvitationRepository from './invitationRepository';
@@ -0,0 +1,3 @@
1
+ export * from './onLocalInvitationCreated';
2
+ export * from './onLocalInvitationUpdated';
3
+ export * from './onLocalInvitationDeleted';
@@ -0,0 +1,33 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { createEventSubscriber } from '~/core/events';
3
+
4
+ /**
5
+ * ```js
6
+ * import { onLocalInvitationCreated } from '@amityco/ts-sdk'
7
+ * const dispose = onLocalInvitationCreated(data => {
8
+ * // ...
9
+ * })
10
+ * ```
11
+ *
12
+ * Fired when an {@link Amity.InvitationPayload} has been created
13
+ *
14
+ * @param callback The function to call when the event was fired
15
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
16
+ *
17
+ * @category Invitation Events
18
+ */
19
+ export const onLocalInvitationCreated = (
20
+ callback: Amity.Listener<Amity.InternalInvitation[]>,
21
+ ): Amity.Unsubscriber => {
22
+ const client = getActiveClient();
23
+
24
+ const disposers = [
25
+ createEventSubscriber(client, 'onLocalInvitationCreated', 'local.invitation.created', payload =>
26
+ callback(payload),
27
+ ),
28
+ ];
29
+
30
+ return () => {
31
+ disposers.forEach(fn => fn());
32
+ };
33
+ };
@@ -0,0 +1,33 @@
1
+ import { createEventSubscriber } from '~/core/events';
2
+ import { getActiveClient } from '~/client/api/activeClient';
3
+
4
+ /**
5
+ * ```js
6
+ * import { onLocalInvitationDeleted } from '@amityco/ts-sdk'
7
+ * const dispose = onLocalInvitationDeleted(data => {
8
+ * // ...
9
+ * })
10
+ * ```
11
+ *
12
+ * Fired when an {@link Amity.InvitationPayload} has been deleted
13
+ *
14
+ * @param callback The function to call when the event was fired
15
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
16
+ *
17
+ * @category Invitation Events
18
+ */
19
+ export const onLocalInvitationDeleted = (
20
+ callback: Amity.Listener<Amity.InternalInvitation[]>,
21
+ ): Amity.Unsubscriber => {
22
+ const client = getActiveClient();
23
+
24
+ const disposers = [
25
+ createEventSubscriber(client, 'onLocalInvitationDeleted', 'local.invitation.deleted', payload =>
26
+ callback(payload),
27
+ ),
28
+ ];
29
+
30
+ return () => {
31
+ disposers.forEach(fn => fn());
32
+ };
33
+ };
@@ -0,0 +1,33 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { createEventSubscriber } from '~/core/events';
3
+
4
+ /**
5
+ * ```js
6
+ * import { onLocalInvitationUpdated } from '@amityco/ts-sdk'
7
+ * const dispose = onLocalInvitationUpdated(data => {
8
+ * // ...
9
+ * })
10
+ * ```
11
+ *
12
+ * Fired when an {@link Amity.InvitationPayload} has been updated
13
+ *
14
+ * @param callback The function to call when the event was fired
15
+ * @returns an {@link Amity.Unsubscriber} function to stop listening
16
+ *
17
+ * @category Invitation Events
18
+ */
19
+ export const onLocalInvitationUpdated = (
20
+ callback: Amity.Listener<Amity.InternalInvitation[]>,
21
+ ): Amity.Unsubscriber => {
22
+ const client = getActiveClient();
23
+
24
+ const disposers = [
25
+ createEventSubscriber(client, 'onLocalInvitationUpdated', 'local.invitation.updated', payload =>
26
+ callback(payload),
27
+ ),
28
+ ];
29
+
30
+ return () => {
31
+ disposers.forEach(fn => fn());
32
+ };
33
+ };
@@ -0,0 +1 @@
1
+ export * from './events';
@@ -0,0 +1,45 @@
1
+ import { fireEvent } from '~/core/events';
2
+ import { getActiveClient } from '~/client/api/activeClient';
3
+ import { pullFromCache, upsertInCache } from '~/cache/api';
4
+ import { InvitationStatusEnum } from '~/@types';
5
+
6
+ /* begin_public_function
7
+ id: invitation.accept
8
+ */
9
+ /**
10
+ * ```js
11
+ * import { acceptInvitation } from '@amityco/ts-sdk'
12
+ * const isAccepted = await acceptInvitation(invitationId)
13
+ * ```
14
+ *
15
+ * Accepts a {@link Amity.Invitation} object
16
+ *
17
+ * @param invitationId the {@link Amity.Invitation} to accept
18
+ * @returns A success boolean if the {@link Amity.Invitation} was accepted
19
+ *
20
+ * @category Invitation API
21
+ * @async
22
+ */
23
+ export const acceptInvitation = async (invitationId: Amity.Invitation['_id']): Promise<boolean> => {
24
+ const client = getActiveClient();
25
+ client.log('invitation/acceptInvitation', invitationId);
26
+
27
+ const { data } = await client.http.post<{ success: boolean }>(
28
+ `/api/v1/invitations/${invitationId}/accept`,
29
+ );
30
+
31
+ const invitation = pullFromCache<Amity.InternalInvitation>([
32
+ 'invitation',
33
+ 'get',
34
+ invitationId,
35
+ ])?.data;
36
+
37
+ if (invitation) {
38
+ upsertInCache(['invitation', 'get', invitationId], { status: InvitationStatusEnum.Approved });
39
+
40
+ fireEvent('local.invitation.updated', [invitation]);
41
+ }
42
+
43
+ return data.success;
44
+ };
45
+ /* end_public_function */
@@ -0,0 +1,44 @@
1
+ import { fireEvent } from '~/core/events';
2
+ import { dropFromCache, pullFromCache } from '~/cache/api';
3
+ import { getActiveClient } from '~/client/api/activeClient';
4
+
5
+ /* begin_public_function
6
+ id: invitation.cancel
7
+ */
8
+ /**
9
+ * ```js
10
+ * import { cancelInvitation } from '@amityco/ts-sdk'
11
+ * const isCanceled = await cancelInvitation(invitationId)
12
+ * ```
13
+ *
14
+ * Cancels a {@link Amity.Invitation} object
15
+ *
16
+ * @param invitationId the {@link Amity.Invitation} to cancel
17
+ * @returns A success boolean if the {@link Amity.Invitation} was canceled
18
+ *
19
+ * @category Invitation API
20
+ * @async
21
+ */
22
+ export const cancelInvitation = async (invitationId: Amity.Invitation['_id']): Promise<boolean> => {
23
+ const client = getActiveClient();
24
+ client.log('invitation/cancelInvitation', invitationId);
25
+
26
+ const { data } = await client.http.delete<{ success: boolean }>(
27
+ `/api/v1/invitations/${invitationId}`,
28
+ );
29
+
30
+ const invitation = pullFromCache<Amity.InternalInvitation>([
31
+ 'invitation',
32
+ 'get',
33
+ invitationId,
34
+ ])?.data;
35
+
36
+ if (invitation) {
37
+ dropFromCache(['invitation', 'get', invitationId]);
38
+
39
+ fireEvent('local.invitation.deleted', [invitation]);
40
+ }
41
+
42
+ return data.success;
43
+ };
44
+ /* end_public_function */
@@ -0,0 +1,52 @@
1
+ import { fireEvent } from '~/core/events';
2
+ import { getActiveClient } from '~/client/api/activeClient';
3
+ import { ingestInCache } from '~/cache/api/ingestInCache';
4
+ import { prepareInvitationPayload } from '../utils';
5
+
6
+ /* begin_public_function
7
+ id: invitation.createInvitations
8
+ */
9
+ /**
10
+ * ```js
11
+ * import { createInvitations } from '@amityco/ts-sdk'
12
+ * const created = await createInvitations({
13
+ * type: string,
14
+ * targetType: string,
15
+ * targetId: string,
16
+ * userIds: string[]
17
+ * }))
18
+ * ```
19
+ *
20
+ * Creates an {@link Amity.Invitation}
21
+ *
22
+ * @param bundle The data necessary to create a new {@link Amity.Invitation}
23
+ * @returns The newly created {@link Amity.Invitation}
24
+ *
25
+ * @category Invitation API
26
+ * @async
27
+ */
28
+ export const createInvitations = async (
29
+ bundle: Amity.CreateInvitations,
30
+ ): Promise<Amity.Cached<Amity.InternalInvitation[]>> => {
31
+ const client = getActiveClient();
32
+ client.log('invitation/createInvitations', bundle);
33
+
34
+ const { data: payload } = await client.http.post<Amity.InvitationPayload>(
35
+ '/api/v1/invitations',
36
+ bundle,
37
+ );
38
+
39
+ const data = prepareInvitationPayload(payload);
40
+
41
+ const cachedAt = client.cache && Date.now();
42
+
43
+ if (client.cache) ingestInCache(data, { cachedAt });
44
+
45
+ fireEvent('local.invitation.created', data.invitations);
46
+
47
+ return {
48
+ data: data.invitations,
49
+ cachedAt,
50
+ };
51
+ };
52
+ /* end_public_function */
@@ -0,0 +1,4 @@
1
+ export * from './createInvitations';
2
+ export * from './acceptInvitation';
3
+ export * from './rejectInvitation';
4
+ export * from './cancelInvitation';
@@ -0,0 +1,45 @@
1
+ import { fireEvent } from '~/core/events';
2
+ import { InvitationStatusEnum } from '~/@types';
3
+ import { pullFromCache, upsertInCache } from '~/cache/api';
4
+ import { getActiveClient } from '~/client/api/activeClient';
5
+
6
+ /* begin_public_function
7
+ id: invitation.reject
8
+ */
9
+ /**
10
+ * ```js
11
+ * import { rejectInvitation } from '@amityco/ts-sdk'
12
+ * const isRejected = await rejectInvitation(invitationId)
13
+ * ```
14
+ *
15
+ * Rejects a {@link Amity.Invitation} object
16
+ *
17
+ * @param invitationId the {@link Amity.Invitation} to reject
18
+ * @returns A success boolean if the {@link Amity.Invitation} was rejected
19
+ *
20
+ * @category Invitation API
21
+ * @async
22
+ */
23
+ export const rejectInvitation = async (invitationId: Amity.Invitation['_id']): Promise<boolean> => {
24
+ const client = getActiveClient();
25
+ client.log('invitation/rejectInvitation', invitationId);
26
+
27
+ const { data } = await client.http.post<{ success: boolean }>(
28
+ `/api/v1/invitations/${invitationId}/reject`,
29
+ );
30
+
31
+ const invitation = pullFromCache<Amity.InternalInvitation>([
32
+ 'invitation',
33
+ 'get',
34
+ invitationId,
35
+ ])?.data;
36
+
37
+ if (invitation) {
38
+ upsertInCache(['invitation', 'get', invitationId], { status: InvitationStatusEnum.Rejected });
39
+
40
+ fireEvent('local.invitation.updated', [invitation]);
41
+ }
42
+
43
+ return data.success;
44
+ };
45
+ /* end_public_function */
@@ -0,0 +1,148 @@
1
+ import hash from 'object-hash';
2
+ import { isNonNullable } from '~/utils';
3
+ import { InvitationActionsEnum } from './enums';
4
+ import { invitationLinkedObject } from '~/utils/linkedObject/invitationLinkedObject';
5
+ import { pullFromCache, pushToCache } from '~/cache/api';
6
+ import { sortByFirstCreated, sortByLastCreated } from '~/core/query';
7
+ import { InvitationsPaginationController } from './InvitationsPaginationController';
8
+ import { InvitationsQueryStreamController } from './InvitationsQueryStreamController';
9
+ import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
10
+ import { prepareInvitationPayload } from '~/invitationRepository/utils';
11
+ import {
12
+ onLocalInvitationCreated,
13
+ onLocalInvitationDeleted,
14
+ onLocalInvitationUpdated,
15
+ } from '~/invitationRepository/events';
16
+
17
+ export class InvitationsLiveCollectionController extends LiveCollectionController<
18
+ 'invitation',
19
+ Amity.InvitationLiveCollection,
20
+ Amity.Invitation,
21
+ InvitationsPaginationController
22
+ > {
23
+ private queryStreamController: InvitationsQueryStreamController;
24
+
25
+ private query: Amity.InvitationLiveCollection;
26
+
27
+ constructor(
28
+ query: Amity.InvitationLiveCollection,
29
+ callback: Amity.LiveCollectionCallback<Amity.Invitation>,
30
+ ) {
31
+ const queryStreamId = hash(query);
32
+ const cacheKey = ['invitation', 'collection', queryStreamId];
33
+ const paginationController = new InvitationsPaginationController(query);
34
+
35
+ super(paginationController, queryStreamId, cacheKey, callback);
36
+
37
+ this.query = query;
38
+ this.queryStreamController = new InvitationsQueryStreamController(
39
+ this.query,
40
+ this.cacheKey,
41
+ this.notifyChange.bind(this),
42
+ prepareInvitationPayload,
43
+ );
44
+
45
+ this.callback = callback.bind(this);
46
+ this.loadPage({ initial: true });
47
+ }
48
+
49
+ protected setup() {
50
+ const collection = pullFromCache<Amity.InvitationLiveCollectionCache>(this.cacheKey)?.data;
51
+ if (!collection) {
52
+ pushToCache(this.cacheKey, {
53
+ data: [],
54
+ params: {},
55
+ });
56
+ }
57
+ }
58
+
59
+ protected async persistModel(queryPayload: Amity.InvitationPayload & Amity.Pagination) {
60
+ await this.queryStreamController.saveToMainDB(queryPayload);
61
+ }
62
+
63
+ protected persistQueryStream({
64
+ response,
65
+ direction,
66
+ refresh,
67
+ }: Amity.LiveCollectionPersistQueryStreamParams<'invitation'>) {
68
+ this.queryStreamController.appendToQueryStream(response, direction, refresh);
69
+ }
70
+
71
+ startSubscription() {
72
+ return this.queryStreamController.subscribeRTE([
73
+ {
74
+ fn: onLocalInvitationCreated,
75
+ action: InvitationActionsEnum.OnLocalInvitationCreated,
76
+ },
77
+ {
78
+ fn: onLocalInvitationUpdated,
79
+ action: InvitationActionsEnum.OnLocalInvitationUpdated,
80
+ },
81
+ {
82
+ fn: onLocalInvitationDeleted,
83
+ action: InvitationActionsEnum.OnLocalInvitationDeleted,
84
+ },
85
+ ]);
86
+ }
87
+
88
+ notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams) {
89
+ const collection = pullFromCache<Amity.InvitationLiveCollectionCache>(this.cacheKey)?.data;
90
+ if (!collection) return;
91
+
92
+ const data = this.applyFilter(
93
+ collection.data
94
+ .map(id => pullFromCache<Amity.InternalInvitation>(['invitation', 'get', id])!)
95
+ .filter(isNonNullable)
96
+ .map(({ data }) => invitationLinkedObject(data)) ?? [],
97
+ );
98
+
99
+ if (!this.shouldNotify(data) && origin === 'event') return;
100
+
101
+ this.callback({
102
+ onNextPage: () => this.loadPage({ direction: Amity.LiveCollectionPageDirection.NEXT }),
103
+ data,
104
+ hasNextPage: !!this.paginationController.getNextToken(),
105
+ loading,
106
+ error,
107
+ });
108
+ }
109
+
110
+ applyFilter(data: Amity.Invitation[]) {
111
+ let invitations = data;
112
+
113
+ if (this.query.targetId) {
114
+ invitations = invitations.filter(invitation => invitation.targetId === this.query.targetId);
115
+ }
116
+
117
+ if (this.query.statuses) {
118
+ invitations = invitations.filter(invitation =>
119
+ this.query.statuses?.includes(invitation.status),
120
+ );
121
+ }
122
+
123
+ if (this.query.targetType) {
124
+ invitations = invitations.filter(
125
+ invitation => invitation.targetType === this.query.targetType,
126
+ );
127
+ }
128
+
129
+ if (this.query.type) {
130
+ invitations = invitations.filter(invitation => invitation.type === this.query.type);
131
+ }
132
+
133
+ const sortFn = (() => {
134
+ switch (this.query.sortBy) {
135
+ case 'firstCreated':
136
+ return sortByFirstCreated;
137
+ case 'lastCreated':
138
+ return sortByLastCreated;
139
+ default:
140
+ return sortByLastCreated;
141
+ }
142
+ })();
143
+
144
+ invitations = invitations.sort(sortFn);
145
+
146
+ return invitations;
147
+ }
148
+ }
@@ -0,0 +1,19 @@
1
+ import { COLLECTION_DEFAULT_PAGINATION_LIMIT } from '~/utils/constants';
2
+ import { PaginationController } from '~/core/liveCollection/PaginationController';
3
+
4
+ export class InvitationsPaginationController extends PaginationController<
5
+ 'invitation',
6
+ Amity.InvitationLiveCollection
7
+ > {
8
+ async getRequest(queryParams: Amity.InvitationLiveCollection, token: string | undefined) {
9
+ const { limit = COLLECTION_DEFAULT_PAGINATION_LIMIT, ...params } = queryParams;
10
+ const options = token ? { token } : { limit };
11
+
12
+ const { data } = await this.http.get<Amity.InvitationPayload & Amity.Pagination>(
13
+ `/api/v1/invitations`,
14
+ { params: { ...params, options } },
15
+ );
16
+
17
+ return data;
18
+ }
19
+ }
@@ -0,0 +1,97 @@
1
+ import { getActiveClient } from '~/client/api/activeClient';
2
+ import { getResolver } from '~/core/model';
3
+ import { InvitationActionsEnum } from './enums';
4
+ import { pullFromCache, pushToCache } from '~/cache/api';
5
+ import { ingestInCache } from '~/cache/api/ingestInCache';
6
+ import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
7
+
8
+ export class InvitationsQueryStreamController extends QueryStreamController<
9
+ Amity.InvitationPayload,
10
+ Amity.InvitationLiveCollection
11
+ > {
12
+ private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
13
+
14
+ private preparePayload: (response: Amity.InvitationPayload) => Amity.ProcessedInvitationPayload;
15
+
16
+ constructor(
17
+ query: Amity.InvitationLiveCollection,
18
+ cacheKey: string[],
19
+ notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
20
+ preparePayload: (response: Amity.InvitationPayload) => Amity.ProcessedInvitationPayload,
21
+ ) {
22
+ super(query, cacheKey);
23
+ this.notifyChange = notifyChange;
24
+ this.preparePayload = preparePayload;
25
+ }
26
+
27
+ async saveToMainDB(response: Amity.InvitationPayload) {
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.InvitationPayload & Partial<Amity.Pagination>,
40
+ direction: Amity.LiveCollectionPageDirection,
41
+ refresh = false,
42
+ ) {
43
+ if (refresh) {
44
+ pushToCache(this.cacheKey, {
45
+ data: response.invitations.map(getResolver('invitation')),
46
+ });
47
+ } else {
48
+ const collection = pullFromCache<Amity.InvitationLiveCollectionCache>(this.cacheKey)?.data;
49
+
50
+ const invitations = collection?.data ?? [];
51
+
52
+ pushToCache(this.cacheKey, {
53
+ ...collection,
54
+ data: [
55
+ ...new Set([...invitations, ...response.invitations.map(getResolver('invitation'))]),
56
+ ],
57
+ });
58
+ }
59
+ }
60
+
61
+ reactor(action: InvitationActionsEnum) {
62
+ return (invitations: Amity.InternalInvitation[]) => {
63
+ const collection = pullFromCache<Amity.InvitationLiveCollectionCache>(this.cacheKey)?.data;
64
+ if (!collection) return;
65
+
66
+ if (action === InvitationActionsEnum.OnLocalInvitationUpdated) {
67
+ const isExist = collection.data.find(id => id === invitations[0].invitationId);
68
+ if (!isExist) return;
69
+ }
70
+
71
+ if (action === InvitationActionsEnum.OnLocalInvitationCreated) {
72
+ collection.data = [
73
+ ...new Set([
74
+ ...invitations.map(invitation => invitation.invitationId),
75
+ ...collection.data,
76
+ ]),
77
+ ];
78
+ }
79
+
80
+ if (action === InvitationActionsEnum.OnLocalInvitationDeleted) {
81
+ collection.data = collection.data.filter(id => id !== invitations[0].invitationId);
82
+ }
83
+
84
+ pushToCache(this.cacheKey, collection);
85
+ this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
86
+ };
87
+ }
88
+
89
+ subscribeRTE(
90
+ createSubscriber: {
91
+ fn: (reactor: Amity.Listener<Amity.InternalInvitation[]>) => Amity.Unsubscriber;
92
+ action: InvitationActionsEnum;
93
+ }[],
94
+ ) {
95
+ return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
96
+ }
97
+ }
@@ -0,0 +1,5 @@
1
+ export enum InvitationActionsEnum {
2
+ OnLocalInvitationCreated = 'onLocalInvitationCreated',
3
+ OnLocalInvitationUpdated = 'onLocalInvitationUpdated',
4
+ OnLocalInvitationDeleted = 'onLocalInvitationDeleted',
5
+ }
@@ -0,0 +1,44 @@
1
+ import { dropFromCache } from '~/cache/api';
2
+ import { getActiveClient } from '~/client/api/activeClient';
3
+ import { ENABLE_CACHE_MESSAGE } from '~/utils/constants';
4
+ import { InvitationsLiveCollectionController } from './getInvitations/InvitationsLiveCollectionController';
5
+
6
+ /**
7
+ * Get invitations
8
+ *
9
+ * @param params the query parameters
10
+ * @param callback the callback to be called when the invitations are updated
11
+ * @returns invitations
12
+ *
13
+ * @category Invitation Live Collection
14
+ *
15
+ */
16
+ export const getInvitations = (
17
+ params: Amity.InvitationLiveCollection,
18
+ callback: Amity.LiveCollectionCallback<Amity.Invitation>,
19
+ config?: Amity.LiveCollectionConfig,
20
+ ) => {
21
+ const { log, cache } = getActiveClient();
22
+
23
+ if (!cache) {
24
+ console.log(ENABLE_CACHE_MESSAGE);
25
+ }
26
+
27
+ const timestamp = Date.now();
28
+ log(`getInvitations: (tmpid: ${timestamp}) > listen`);
29
+
30
+ const invitationsLiveCollection = new InvitationsLiveCollectionController(params, callback);
31
+
32
+ const disposers = invitationsLiveCollection.startSubscription();
33
+
34
+ const cacheKey = invitationsLiveCollection.getCacheKey();
35
+
36
+ disposers.push(() => {
37
+ dropFromCache(cacheKey);
38
+ });
39
+
40
+ return () => {
41
+ log(`getInvitations (tmpid: ${timestamp}) > dispose`);
42
+ disposers.forEach(fn => fn());
43
+ };
44
+ };
@@ -0,0 +1 @@
1
+ export * from './prepareInvitationPayload';
@@ -0,0 +1,11 @@
1
+ export const prepareInvitationPayload = (
2
+ rawPayload: Amity.InvitationPayload,
3
+ ): Amity.ProcessedInvitationPayload => {
4
+ return {
5
+ invitations: rawPayload.invitations.map(invitation => ({
6
+ ...invitation,
7
+ invitationId: invitation._id,
8
+ createdById: invitation.createdBy,
9
+ })),
10
+ };
11
+ };
@@ -1,6 +1,6 @@
1
- import { pullFromCache } from '~/cache/api';
1
+ import { pullFromCache } from '~/cache/api/pullFromCache';
2
2
  import { getChannelMessagePreview } from './getChannelMessagePreview';
3
- import { LinkedObject } from '~/utils/linkedObject';
3
+ import { userLinkedObject } from '~/utils/linkedObject/userLinkedObject';
4
4
 
5
5
  export const getChannelMessagePreviewWithUser = (
6
6
  channel: Amity.StaticInternalChannel,
@@ -20,7 +20,7 @@ export const getChannelMessagePreviewWithUser = (
20
20
  const messagePreviewWithUser = messagePreview
21
21
  ? {
22
22
  ...messagePreview,
23
- user: internalUser ? LinkedObject.user(internalUser) : undefined,
23
+ user: internalUser ? userLinkedObject(internalUser) : undefined,
24
24
  }
25
25
  : null;
26
26