@amityco/ts-sdk 0.0.1-beta.8 → 0.0.1-beta.9
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/dist/@types/core/events.d.ts +63 -17
- package/dist/@types/core/events.d.ts.map +1 -1
- package/dist/@types/core/transport.d.ts +15 -0
- package/dist/@types/core/transport.d.ts.map +1 -1
- package/dist/@types/domains/client.d.ts +3 -0
- package/dist/@types/domains/client.d.ts.map +1 -1
- package/dist/@types/domains/comment.d.ts +1 -1
- package/dist/@types/domains/comment.d.ts.map +1 -1
- package/dist/@types/domains/community.d.ts +1 -1
- package/dist/@types/domains/community.d.ts.map +1 -1
- package/dist/@types/domains/group.d.ts +2 -2
- package/dist/@types/domains/group.d.ts.map +1 -1
- package/dist/@types/domains/partials.d.ts +3 -0
- package/dist/@types/domains/partials.d.ts.map +1 -1
- package/dist/@types/domains/post.d.ts +1 -1
- package/dist/@types/domains/post.d.ts.map +1 -1
- package/dist/@types/domains/user.d.ts +2 -1
- package/dist/@types/domains/user.d.ts.map +1 -1
- package/dist/client/api/connectClient.d.ts.map +1 -1
- package/dist/client/api/createClient.d.ts +2 -1
- package/dist/client/api/createClient.d.ts.map +1 -1
- package/dist/client/api/disconnectClient.d.ts.map +1 -1
- package/dist/client/api/getToken.d.ts +3 -1
- package/dist/client/api/getToken.d.ts.map +1 -1
- package/dist/comment/api/deleteComment.d.ts +1 -0
- package/dist/comment/api/deleteComment.d.ts.map +1 -1
- package/dist/comment/events/index.d.ts +4 -0
- package/dist/comment/events/index.d.ts.map +1 -1
- package/dist/comment/events/onCommentCreated.d.ts +1 -1
- package/dist/comment/events/onCommentCreated.d.ts.map +1 -1
- package/dist/comment/events/onCommentDeleted.d.ts +1 -1
- package/dist/comment/events/onCommentDeleted.d.ts.map +1 -1
- package/dist/comment/events/onCommentFlagged.d.ts +17 -0
- package/dist/comment/events/onCommentFlagged.d.ts.map +1 -0
- package/dist/comment/events/onCommentReactionAdded.d.ts +17 -0
- package/dist/comment/events/onCommentReactionAdded.d.ts.map +1 -0
- package/dist/comment/events/onCommentReactionRemoved.d.ts +17 -0
- package/dist/comment/events/onCommentReactionRemoved.d.ts.map +1 -0
- package/dist/comment/events/onCommentUnflagged.d.ts +17 -0
- package/dist/comment/events/onCommentUnflagged.d.ts.map +1 -0
- package/dist/comment/events/onCommentUpdated.d.ts +1 -1
- package/dist/comment/events/onCommentUpdated.d.ts.map +1 -1
- package/dist/comment/events/utils.d.ts +2 -0
- package/dist/comment/events/utils.d.ts.map +1 -0
- package/dist/comment/observers/observeComment.d.ts +1 -1
- package/dist/comment/observers/observeComment.d.ts.map +1 -1
- package/dist/comment/observers/observeComments.d.ts +5 -1
- package/dist/comment/observers/observeComments.d.ts.map +1 -1
- package/dist/community/events/index.d.ts +4 -0
- package/dist/community/events/index.d.ts.map +1 -1
- package/dist/community/events/onCommunityCreated.d.ts +2 -2
- package/dist/community/events/onCommunityCreated.d.ts.map +1 -1
- package/dist/community/events/onCommunityDeleted.d.ts +2 -2
- package/dist/community/events/onCommunityDeleted.d.ts.map +1 -1
- package/dist/community/events/onCommunityJoined.d.ts +3 -3
- package/dist/community/events/onCommunityJoined.d.ts.map +1 -1
- package/dist/community/events/onCommunityLeft.d.ts +3 -3
- package/dist/community/events/onCommunityLeft.d.ts.map +1 -1
- package/dist/community/events/onCommunityUpdated.d.ts +2 -2
- package/dist/community/events/onCommunityUpdated.d.ts.map +1 -1
- package/dist/community/events/onCommunityUserAdded.d.ts +17 -0
- package/dist/community/events/onCommunityUserAdded.d.ts.map +1 -0
- package/dist/community/events/onCommunityUserBanned.d.ts +17 -0
- package/dist/community/events/onCommunityUserBanned.d.ts.map +1 -0
- package/dist/community/events/onCommunityUserRemoved.d.ts +17 -0
- package/dist/community/events/onCommunityUserRemoved.d.ts.map +1 -0
- package/dist/community/events/onCommunityUserUnbanned.d.ts +17 -0
- package/dist/community/events/onCommunityUserUnbanned.d.ts.map +1 -0
- package/dist/community/events/utils.d.ts +3 -0
- package/dist/community/events/utils.d.ts.map +1 -0
- package/dist/community/observers/observeCommunity.d.ts +1 -1
- package/dist/community/observers/observeCommunity.d.ts.map +1 -1
- package/dist/core/cache/ingest.d.ts.map +1 -1
- package/dist/core/events.d.ts +4 -2
- package/dist/core/events.d.ts.map +1 -1
- package/dist/core/model/index.d.ts +1 -0
- package/dist/core/model/index.d.ts.map +1 -1
- package/dist/core/model/isMatch.d.ts +3 -0
- package/dist/core/model/isMatch.d.ts.map +1 -0
- package/dist/core/network.d.ts +11 -0
- package/dist/core/network.d.ts.map +1 -0
- package/dist/core/subscription.d.ts +14 -0
- package/dist/core/subscription.d.ts.map +1 -0
- package/dist/core/transports/http.d.ts +11 -0
- package/dist/core/transports/http.d.ts.map +1 -0
- package/dist/core/transports/index.d.ts +4 -0
- package/dist/core/transports/index.d.ts.map +1 -0
- package/dist/core/transports/mqtt.d.ts +17 -0
- package/dist/core/transports/mqtt.d.ts.map +1 -0
- package/dist/core/transports/utils.d.ts +13 -0
- package/dist/core/transports/utils.d.ts.map +1 -0
- package/dist/core/transports/ws.d.ts +27 -0
- package/dist/core/transports/ws.d.ts.map +1 -0
- package/dist/index.cjs.js +1208 -514
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +1185 -515
- package/dist/index.umd.js +5 -3
- package/dist/post/api/deletePost.d.ts +1 -0
- package/dist/post/api/deletePost.d.ts.map +1 -1
- package/dist/post/events/index.d.ts +6 -0
- package/dist/post/events/index.d.ts.map +1 -1
- package/dist/post/events/onPostApproved.d.ts +17 -0
- package/dist/post/events/onPostApproved.d.ts.map +1 -0
- package/dist/post/events/onPostCreated.d.ts +1 -1
- package/dist/post/events/onPostCreated.d.ts.map +1 -1
- package/dist/post/events/onPostDeclined.d.ts +17 -0
- package/dist/post/events/onPostDeclined.d.ts.map +1 -0
- package/dist/post/events/onPostDeleted.d.ts +1 -1
- package/dist/post/events/onPostDeleted.d.ts.map +1 -1
- package/dist/post/events/onPostFlagged.d.ts +17 -0
- package/dist/post/events/onPostFlagged.d.ts.map +1 -0
- package/dist/post/events/onPostReactionAdded.d.ts +17 -0
- package/dist/post/events/onPostReactionAdded.d.ts.map +1 -0
- package/dist/post/events/onPostReactionRemoved.d.ts +17 -0
- package/dist/post/events/onPostReactionRemoved.d.ts.map +1 -0
- package/dist/post/events/onPostUnflagged.d.ts +17 -0
- package/dist/post/events/onPostUnflagged.d.ts.map +1 -0
- package/dist/post/events/onPostUpdated.d.ts +1 -1
- package/dist/post/events/onPostUpdated.d.ts.map +1 -1
- package/dist/post/events/utils.d.ts +2 -0
- package/dist/post/events/utils.d.ts.map +1 -0
- package/dist/post/observers/observePost.d.ts +1 -1
- package/dist/post/observers/observePost.d.ts.map +1 -1
- package/dist/post/observers/observePosts.d.ts +1 -1
- package/dist/post/observers/observePosts.d.ts.map +1 -1
- package/dist/reaction/events/onReactionAdded.d.ts +4 -2
- package/dist/reaction/events/onReactionAdded.d.ts.map +1 -1
- package/dist/reaction/events/onReactionRemoved.d.ts +4 -2
- package/dist/reaction/events/onReactionRemoved.d.ts.map +1 -1
- package/dist/reaction/utils/index.d.ts +1 -0
- package/dist/reaction/utils/index.d.ts.map +1 -1
- package/dist/reaction/utils/preparePayloadForCache.d.ts +3 -0
- package/dist/reaction/utils/preparePayloadForCache.d.ts.map +1 -0
- package/dist/report/api/createReport.d.ts.map +1 -1
- package/dist/report/api/deleteReport.d.ts.map +1 -1
- package/dist/user/events/index.d.ts +3 -0
- package/dist/user/events/index.d.ts.map +1 -1
- package/dist/user/events/onUserFlagCleared.d.ts +17 -0
- package/dist/user/events/onUserFlagCleared.d.ts.map +1 -0
- package/dist/user/events/onUserFlagged.d.ts +17 -0
- package/dist/user/events/onUserFlagged.d.ts.map +1 -0
- package/dist/user/events/onUserUnflagged.d.ts +17 -0
- package/dist/user/events/onUserUnflagged.d.ts.map +1 -0
- package/dist/user/events/onUserUpdated.d.ts +1 -1
- package/dist/user/events/onUserUpdated.d.ts.map +1 -1
- package/dist/user/events/utils.d.ts +2 -0
- package/dist/user/events/utils.d.ts.map +1 -0
- package/dist/user/observers/observeUser.d.ts +1 -1
- package/dist/user/observers/observeUser.d.ts.map +1 -1
- package/package.json +4 -1
- package/rollup.config.js +2 -2
- package/src/@types/core/events.ts +64 -23
- package/src/@types/core/transport.ts +14 -0
- package/src/@types/domains/client.ts +3 -0
- package/src/@types/domains/comment.ts +1 -0
- package/src/@types/domains/community.ts +1 -0
- package/src/@types/domains/group.ts +2 -2
- package/src/@types/domains/partials.ts +4 -0
- package/src/@types/domains/post.ts +1 -0
- package/src/@types/domains/user.ts +2 -0
- package/src/client/api/connectClient.ts +12 -2
- package/src/client/api/createClient.ts +7 -7
- package/src/client/api/disconnectClient.ts +5 -0
- package/src/client/api/getToken.ts +1 -1
- package/src/client/events/onConnectionError.ts +1 -1
- package/src/comment/api/createComment.ts +2 -2
- package/src/comment/api/deleteComment.ts +2 -2
- package/src/comment/api/updateComment.ts +1 -1
- package/src/comment/events/index.ts +6 -0
- package/src/comment/events/onCommentCreated.ts +4 -22
- package/src/comment/events/onCommentDeleted.ts +4 -22
- package/src/comment/events/onCommentFlagged.ts +21 -0
- package/src/comment/events/onCommentReactionAdded.ts +52 -0
- package/src/comment/events/onCommentReactionRemoved.ts +52 -0
- package/src/comment/events/onCommentUnflagged.ts +21 -0
- package/src/comment/events/onCommentUpdated.ts +4 -22
- package/src/comment/events/utils.ts +34 -0
- package/src/comment/observers/observeComment.ts +21 -7
- package/src/comment/observers/observeComments.ts +11 -3
- package/src/community/api/addCommunityMembers.ts +1 -1
- package/src/community/api/createCommunity.ts +1 -1
- package/src/community/api/deleteCommunity.ts +1 -1
- package/src/community/api/joinCommunity.ts +1 -1
- package/src/community/api/leaveCommunity.ts +1 -1
- package/src/community/api/removeCommunityMembers.ts +1 -1
- package/src/community/api/updateCommunity.ts +1 -1
- package/src/community/events/index.ts +5 -0
- package/src/community/events/onCommunityCreated.ts +5 -23
- package/src/community/events/onCommunityDeleted.ts +5 -23
- package/src/community/events/onCommunityJoined.ts +5 -23
- package/src/community/events/onCommunityLeft.ts +5 -23
- package/src/community/events/onCommunityUpdated.ts +5 -23
- package/src/community/events/onCommunityUserAdded.ts +19 -0
- package/src/community/events/onCommunityUserBanned.ts +19 -0
- package/src/community/events/onCommunityUserRemoved.ts +19 -0
- package/src/community/events/onCommunityUserUnbanned.ts +19 -0
- package/src/community/events/utils.ts +108 -0
- package/src/community/observers/observeCommunity.ts +23 -9
- package/src/core/cache/ingest.ts +19 -3
- package/src/core/events.ts +45 -4
- package/src/core/model/index.ts +1 -0
- package/src/core/model/isMatch.ts +12 -0
- package/src/core/network.ts +14 -0
- package/src/core/subscription.ts +75 -0
- package/src/core/transports/http.ts +63 -0
- package/src/core/transports/index.ts +3 -0
- package/src/core/transports/mqtt.ts +141 -0
- package/src/core/transports/utils.ts +25 -0
- package/src/core/transports/ws.ts +61 -0
- package/src/index.ts +1 -0
- package/src/post/api/createPost.ts +2 -2
- package/src/post/api/deletePost.ts +2 -2
- package/src/post/api/updatePost.ts +1 -1
- package/src/post/events/index.ts +9 -0
- package/src/post/events/onPostApproved.ts +19 -0
- package/src/post/events/onPostCreated.ts +4 -24
- package/src/post/events/onPostDeclined.ts +19 -0
- package/src/post/events/onPostDeleted.ts +4 -24
- package/src/post/events/onPostFlagged.ts +19 -0
- package/src/post/events/onPostReactionAdded.ts +50 -0
- package/src/post/events/onPostReactionRemoved.ts +50 -0
- package/src/post/events/onPostUnflagged.ts +19 -0
- package/src/post/events/onPostUpdated.ts +4 -24
- package/src/post/events/utils.ts +40 -0
- package/src/post/observers/observePost.ts +25 -7
- package/src/post/observers/observePosts.ts +12 -2
- package/src/reaction/events/onReactionAdded.ts +36 -15
- package/src/reaction/events/onReactionRemoved.ts +37 -14
- package/src/reaction/utils/dispatchReactable.ts +2 -2
- package/src/reaction/utils/index.ts +1 -0
- package/src/reaction/utils/preparePayloadForCache.ts +45 -0
- package/src/report/api/createReport.ts +5 -1
- package/src/report/api/deleteReport.ts +5 -1
- package/src/user/events/index.ts +4 -0
- package/src/user/events/onUserFlagCleared.ts +19 -0
- package/src/user/events/onUserFlagged.ts +19 -0
- package/src/user/events/onUserUnflagged.ts +19 -0
- package/src/user/events/onUserUpdated.ts +4 -24
- package/src/user/events/utils.ts +24 -0
- package/src/user/observers/observeUser.ts +11 -3
- package/dist/core/transports.d.ts +0 -49
- package/dist/core/transports.d.ts.map +0 -1
- package/src/core/transports.ts +0 -151
|
@@ -4,6 +4,10 @@ import {
|
|
|
4
4
|
onCommentCreated,
|
|
5
5
|
onCommentUpdated,
|
|
6
6
|
onCommentDeleted,
|
|
7
|
+
onCommentFlagged,
|
|
8
|
+
onCommentUnflagged,
|
|
9
|
+
onCommentReactionAdded,
|
|
10
|
+
onCommentReactionRemoved,
|
|
7
11
|
} from '../events'
|
|
8
12
|
|
|
9
13
|
/**
|
|
@@ -26,7 +30,7 @@ export const observeComments = (
|
|
|
26
30
|
postId: Amity.Post['postId'],
|
|
27
31
|
callback: Amity.ObjectListener<
|
|
28
32
|
Amity.Comment,
|
|
29
|
-
['onCreate', 'onUpdate', 'onDelete']
|
|
33
|
+
['onCreate', 'onUpdate', 'onDelete', 'onFlagged', 'onUnflagged', 'onReactionAdded', 'onReactionRemoved']
|
|
30
34
|
>
|
|
31
35
|
): Amity.Unsubscriber => {
|
|
32
36
|
const { log } = getActiveClient()
|
|
@@ -38,7 +42,7 @@ export const observeComments = (
|
|
|
38
42
|
|
|
39
43
|
const router = (
|
|
40
44
|
comment: Amity.Comment,
|
|
41
|
-
action: 'onCreate' | 'onUpdate' | 'onDelete'
|
|
45
|
+
action: 'onCreate' | 'onUpdate' | 'onDelete' | 'onFlagged' | 'onUnflagged' | 'onReactionAdded' | 'onReactionRemoved'
|
|
42
46
|
) => {
|
|
43
47
|
if (comment.referenceId !== postId) return
|
|
44
48
|
|
|
@@ -51,7 +55,11 @@ export const observeComments = (
|
|
|
51
55
|
disposers.push(
|
|
52
56
|
onCommentCreated(comment => router(comment, 'onCreate')),
|
|
53
57
|
onCommentUpdated(comment => router(comment, 'onUpdate')),
|
|
54
|
-
onCommentDeleted(comment => router(comment, 'onDelete'))
|
|
58
|
+
onCommentDeleted(comment => router(comment, 'onDelete')),
|
|
59
|
+
onCommentFlagged(comment => router(comment, 'onFlagged')),
|
|
60
|
+
onCommentUnflagged(comment => router(comment, 'onUnflagged')),
|
|
61
|
+
onCommentReactionAdded(comment => router(comment, 'onReactionAdded')),
|
|
62
|
+
onCommentReactionRemoved(comment => router(comment, 'onReactionRemoved')),
|
|
55
63
|
)
|
|
56
64
|
|
|
57
65
|
return () => {
|
|
@@ -33,7 +33,7 @@ export const updateCommunity = async (
|
|
|
33
33
|
|
|
34
34
|
decoratePayload(data)
|
|
35
35
|
ingestInCache(data)
|
|
36
|
-
fireEvent('
|
|
36
|
+
fireEvent('community.updated', data)
|
|
37
37
|
|
|
38
38
|
const { communities } = data
|
|
39
39
|
return communities.find(community => community.communityId === communityId)!
|
|
@@ -4,3 +4,8 @@ export * from './onCommunityDeleted'
|
|
|
4
4
|
|
|
5
5
|
export * from './onCommunityJoined'
|
|
6
6
|
export * from './onCommunityLeft'
|
|
7
|
+
|
|
8
|
+
export * from './onCommunityUserAdded'
|
|
9
|
+
export * from './onCommunityUserRemoved'
|
|
10
|
+
export * from './onCommunityUserBanned'
|
|
11
|
+
export * from './onCommunityUserUnbanned'
|
|
@@ -1,37 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createEventSubscriber } from '~/core/events'
|
|
3
|
-
|
|
4
|
-
import { decoratePayload } from '~/core/query'
|
|
5
|
-
import { ingestInCache } from '~/core/cache'
|
|
1
|
+
import { createCommunityEventSubscriber } from './utils'
|
|
6
2
|
|
|
7
3
|
/**
|
|
8
4
|
* ```js
|
|
9
5
|
* import { onCommunityCreated } from '@amityco/ts-sdk'
|
|
10
|
-
* const dispose = onCommunityCreated(
|
|
6
|
+
* const dispose = onCommunityCreated(community => {
|
|
11
7
|
* // ...
|
|
12
8
|
* })
|
|
13
9
|
* ```
|
|
14
10
|
*
|
|
15
|
-
* Fired when
|
|
11
|
+
* Fired when {@link Amity.Community} have been created
|
|
16
12
|
*
|
|
17
13
|
* @param callback The function to call when the event was fired
|
|
18
14
|
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
19
15
|
*
|
|
20
16
|
* @category Community Events
|
|
21
17
|
*/
|
|
22
|
-
export const onCommunityCreated = (callback: Amity.Listener<Amity.Community>) =>
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const filter = (payload: Amity.CommunityPayload) => {
|
|
26
|
-
decoratePayload(payload)
|
|
27
|
-
ingestInCache(payload)
|
|
28
|
-
callback(payload.communities[0])
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return createEventSubscriber(
|
|
32
|
-
client,
|
|
33
|
-
'onCommunityCreated',
|
|
34
|
-
'v3.community.didCreate',
|
|
35
|
-
filter
|
|
36
|
-
)
|
|
37
|
-
}
|
|
18
|
+
export const onCommunityCreated = (callback: Amity.Listener<Amity.Community>) =>
|
|
19
|
+
createCommunityEventSubscriber('community.created', callback)
|
|
@@ -1,37 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createEventSubscriber } from '~/core/events'
|
|
3
|
-
|
|
4
|
-
import { decoratePayload } from '~/core/query'
|
|
5
|
-
import { ingestInCache } from '~/core/cache'
|
|
1
|
+
import { createCommunityEventSubscriber } from './utils'
|
|
6
2
|
|
|
7
3
|
/**
|
|
8
4
|
* ```js
|
|
9
5
|
* import { onCommunityDeleted } from '@amityco/ts-sdk'
|
|
10
|
-
* const dispose = onCommunityDeleted(
|
|
6
|
+
* const dispose = onCommunityDeleted(community => {
|
|
11
7
|
* // ...
|
|
12
8
|
* })
|
|
13
9
|
* ```
|
|
14
10
|
*
|
|
15
|
-
* Fired when
|
|
11
|
+
* Fired when a {@link Amity.Community} has been deleted
|
|
16
12
|
*
|
|
17
13
|
* @param callback The function to call when the event was fired
|
|
18
14
|
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
19
15
|
*
|
|
20
16
|
* @category Community Events
|
|
21
17
|
*/
|
|
22
|
-
export const onCommunityDeleted = (callback: Amity.Listener<Amity.Community>) =>
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const filter = (payload: Amity.CommunityPayload) => {
|
|
26
|
-
decoratePayload(payload)
|
|
27
|
-
ingestInCache(payload)
|
|
28
|
-
callback(payload.communities[0])
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return createEventSubscriber(
|
|
32
|
-
client,
|
|
33
|
-
'onCommunityDeleted',
|
|
34
|
-
'v3.community.didDelete',
|
|
35
|
-
filter
|
|
36
|
-
)
|
|
37
|
-
}
|
|
18
|
+
export const onCommunityDeleted = (callback: Amity.Listener<Amity.Community>) =>
|
|
19
|
+
createCommunityEventSubscriber('community.deleted', callback)
|
|
@@ -1,37 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createEventSubscriber } from '~/core/events'
|
|
3
|
-
|
|
4
|
-
import { decoratePayload } from '~/core/query'
|
|
5
|
-
import { ingestInCache } from '~/core/cache'
|
|
1
|
+
import { createCommunityMemberEventSubscriber } from './utils'
|
|
6
2
|
|
|
7
3
|
/**
|
|
8
4
|
* ```js
|
|
9
5
|
* import { onCommunityJoined } from '@amityco/ts-sdk'
|
|
10
|
-
* const dispose = onCommunityJoined(
|
|
6
|
+
* const dispose = onCommunityJoined((community, member) => {
|
|
11
7
|
* // ...
|
|
12
8
|
* })
|
|
13
9
|
* ```
|
|
14
10
|
*
|
|
15
|
-
* Fired when
|
|
11
|
+
* Fired when a {@link Amity.Community} has been joined
|
|
16
12
|
*
|
|
17
13
|
* @param callback The function to call when the event was fired
|
|
18
14
|
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
19
15
|
*
|
|
20
16
|
* @category Community Events
|
|
21
17
|
*/
|
|
22
|
-
export const onCommunityJoined = (callback: Amity.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const filter = (payload: Amity.CommunityPayload) => {
|
|
26
|
-
decoratePayload(payload)
|
|
27
|
-
ingestInCache(payload)
|
|
28
|
-
callback(payload.communities[0])
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return createEventSubscriber(
|
|
32
|
-
client,
|
|
33
|
-
'onCommunityJoined',
|
|
34
|
-
'v3.community.didJoin',
|
|
35
|
-
filter
|
|
36
|
-
)
|
|
37
|
-
}
|
|
18
|
+
export const onCommunityJoined = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
|
|
19
|
+
createCommunityMemberEventSubscriber('community.joined', callback)
|
|
@@ -1,37 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createEventSubscriber } from '~/core/events'
|
|
3
|
-
|
|
4
|
-
import { decoratePayload } from '~/core/query'
|
|
5
|
-
import { ingestInCache } from '~/core/cache'
|
|
1
|
+
import { createCommunityMemberEventSubscriber } from './utils'
|
|
6
2
|
|
|
7
3
|
/**
|
|
8
4
|
* ```js
|
|
9
5
|
* import { onCommunityLeft } from '@amityco/ts-sdk'
|
|
10
|
-
* const dispose = onCommunityLeft(
|
|
6
|
+
* const dispose = onCommunityLeft((community, member) => {
|
|
11
7
|
* // ...
|
|
12
8
|
* })
|
|
13
9
|
* ```
|
|
14
10
|
*
|
|
15
|
-
* Fired when
|
|
11
|
+
* Fired when a {@link Amity.Community} has been left
|
|
16
12
|
*
|
|
17
13
|
* @param callback The function to call when the event was fired
|
|
18
14
|
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
19
15
|
*
|
|
20
16
|
* @category Community Events
|
|
21
17
|
*/
|
|
22
|
-
export const onCommunityLeft = (callback: Amity.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const filter = (payload: Amity.CommunityPayload) => {
|
|
26
|
-
decoratePayload(payload)
|
|
27
|
-
ingestInCache(payload)
|
|
28
|
-
callback(payload.communities[0])
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return createEventSubscriber(
|
|
32
|
-
client,
|
|
33
|
-
'onCommunityLeft',
|
|
34
|
-
'v3.community.didLeave',
|
|
35
|
-
filter
|
|
36
|
-
)
|
|
37
|
-
}
|
|
18
|
+
export const onCommunityLeft = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
|
|
19
|
+
createCommunityMemberEventSubscriber('community.left', callback)
|
|
@@ -1,37 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createEventSubscriber } from '~/core/events'
|
|
3
|
-
|
|
4
|
-
import { decoratePayload } from '~/core/query'
|
|
5
|
-
import { ingestInCache } from '~/core/cache'
|
|
1
|
+
import { createCommunityEventSubscriber } from './utils'
|
|
6
2
|
|
|
7
3
|
/**
|
|
8
4
|
* ```js
|
|
9
5
|
* import { onCommunityUpdated } from '@amityco/ts-sdk'
|
|
10
|
-
* const dispose = onCommunityUpdated(
|
|
6
|
+
* const dispose = onCommunityUpdated(community => {
|
|
11
7
|
* // ...
|
|
12
8
|
* })
|
|
13
9
|
* ```
|
|
14
10
|
*
|
|
15
|
-
* Fired when
|
|
11
|
+
* Fired when a {@link Amity.Community} has been updated
|
|
16
12
|
*
|
|
17
13
|
* @param callback The function to call when the event was fired
|
|
18
14
|
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
19
15
|
*
|
|
20
16
|
* @category Community Events
|
|
21
17
|
*/
|
|
22
|
-
export const onCommunityUpdated = (callback: Amity.Listener<Amity.Community>) =>
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const filter = (payload: Amity.CommunityPayload) => {
|
|
26
|
-
decoratePayload(payload)
|
|
27
|
-
ingestInCache(payload)
|
|
28
|
-
callback(payload.communities[0])
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return createEventSubscriber(
|
|
32
|
-
client,
|
|
33
|
-
'onCommunityUpdated',
|
|
34
|
-
'v3.community.didUpdate',
|
|
35
|
-
filter
|
|
36
|
-
)
|
|
37
|
-
}
|
|
18
|
+
export const onCommunityUpdated = (callback: Amity.Listener<Amity.Community>) =>
|
|
19
|
+
createCommunityEventSubscriber('community.updated', callback)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createCommunityMemberEventSubscriber } from './utils'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ```js
|
|
5
|
+
* import { onCommunityUserAdded } from '@amityco/ts-sdk'
|
|
6
|
+
* const dispose = onCommunityUserAdded((community, member) => {
|
|
7
|
+
* // ...
|
|
8
|
+
* })
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Fired when a user has been added to a {@link Amity.Community}
|
|
12
|
+
*
|
|
13
|
+
* @param callback The function to call when the event was fired
|
|
14
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
15
|
+
*
|
|
16
|
+
* @category Community Events
|
|
17
|
+
*/
|
|
18
|
+
export const onCommunityUserAdded = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
|
|
19
|
+
createCommunityMemberEventSubscriber('community.userAdded', callback)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createCommunityMemberEventSubscriber } from './utils'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ```js
|
|
5
|
+
* import { onCommunityUserBanned } from '@amityco/ts-sdk'
|
|
6
|
+
* const dispose = onCommunityUserBanned((community, member) => {
|
|
7
|
+
* // ...
|
|
8
|
+
* })
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Fired when a user has been banned in a {@link Amity.Community}
|
|
12
|
+
*
|
|
13
|
+
* @param callback The function to call when the event was fired
|
|
14
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
15
|
+
*
|
|
16
|
+
* @category Community Events
|
|
17
|
+
*/
|
|
18
|
+
export const onCommunityUserBanned = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
|
|
19
|
+
createCommunityMemberEventSubscriber('community.userBanned', callback)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createCommunityMemberEventSubscriber } from './utils'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ```js
|
|
5
|
+
* import { onCommunityUserRemoved } from '@amityco/ts-sdk'
|
|
6
|
+
* const dispose = onCommunityUserRemoved((community, member) => {
|
|
7
|
+
* // ...
|
|
8
|
+
* })
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Fired when a user has been removed from a {@link Amity.Community}
|
|
12
|
+
*
|
|
13
|
+
* @param callback The function to call when the event was fired
|
|
14
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
15
|
+
*
|
|
16
|
+
* @category Community Events
|
|
17
|
+
*/
|
|
18
|
+
export const onCommunityUserRemoved = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
|
|
19
|
+
createCommunityMemberEventSubscriber('community.userRemoved', callback)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createCommunityMemberEventSubscriber } from './utils'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ```js
|
|
5
|
+
* import { onCommunityUserUnbanned } from '@amityco/ts-sdk'
|
|
6
|
+
* const dispose = onCommunityUserUnbanned((community, member) => {
|
|
7
|
+
* // ...
|
|
8
|
+
* })
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Fired when a user has been unbanned in a {@link Amity.Community}
|
|
12
|
+
*
|
|
13
|
+
* @param callback The function to call when the event was fired
|
|
14
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
15
|
+
*
|
|
16
|
+
* @category Community Events
|
|
17
|
+
*/
|
|
18
|
+
export const onCommunityUserUnbanned = (callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void) =>
|
|
19
|
+
createCommunityMemberEventSubscriber('community.userUnbanned', callback)
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { getActiveClient } from '~/client/api'
|
|
2
|
+
import { decoratePayload } from '~/core/query'
|
|
3
|
+
import { ingestInCache, pullFromCache } from '~/core/cache'
|
|
4
|
+
import { createEventSubscriber } from '~/core/events'
|
|
5
|
+
import { getResolver, isMatch } from '~/core/model'
|
|
6
|
+
|
|
7
|
+
export const createCommunityEventSubscriber = (
|
|
8
|
+
event: keyof Amity.MqttCommunityMessageEvents,
|
|
9
|
+
callback: Amity.Listener<Amity.Community>
|
|
10
|
+
) => {
|
|
11
|
+
const client = getActiveClient()
|
|
12
|
+
|
|
13
|
+
const filter = (payload: Amity.CommunityPayload) => {
|
|
14
|
+
const [cached] = pullFromCache('community', payload.communities[0].communityId) ?? []
|
|
15
|
+
|
|
16
|
+
decoratePayload(payload)
|
|
17
|
+
ingestInCache(payload)
|
|
18
|
+
|
|
19
|
+
const [community] = pullFromCache('community', payload.communities[0].communityId) ?? []
|
|
20
|
+
|
|
21
|
+
if (cached && isMatch(cached, community)) {
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
callback(community)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return createEventSubscriber(
|
|
29
|
+
client,
|
|
30
|
+
event,
|
|
31
|
+
event,
|
|
32
|
+
filter
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function hasPermission(member: Amity.Membership<'community'>, payload: Amity.CommunityPayload, permission: string) {
|
|
37
|
+
if (member.permissions.some(x => x === permission)) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return payload.users!
|
|
42
|
+
.find(user => user.userId === member.userId)!
|
|
43
|
+
.permissions.some(x => x === permission)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
function getEventRelatedMember(
|
|
48
|
+
event: keyof Amity.MqttCommunityUserMessageEvents,
|
|
49
|
+
payload: Amity.CommunityPayload
|
|
50
|
+
) {
|
|
51
|
+
if (event === 'community.joined' || event === 'community.left') {
|
|
52
|
+
return payload.communityUsers![0];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// NOTE: backend returns the one who took the action and the one on whom
|
|
56
|
+
// the action was taken. We need the 2nd one
|
|
57
|
+
if (event === 'community.userRemoved') {
|
|
58
|
+
return payload.communityUsers!.filter(x => x.communityMembership === 'none')[0]
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (event === 'community.userBanned') {
|
|
62
|
+
return payload.communityUsers!.filter(x => x.communityMembership === 'banned')[0]
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// NOTE: it might be that in certain edge cases permission check won't be enough
|
|
66
|
+
if (event === 'community.userUnbanned') {
|
|
67
|
+
return payload.communityUsers!.filter(x => !hasPermission(x, payload, 'BAN_COMMUNITY_USER'))[0]
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return payload.communityUsers!.filter(x => !hasPermission(x, payload, 'ADD_COMMUNITY_USER'))[0]
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export const createCommunityMemberEventSubscriber = (
|
|
74
|
+
event: keyof Amity.MqttCommunityUserMessageEvents,
|
|
75
|
+
callback: (community: Amity.Community, member: Amity.Membership<'community'>) => void,
|
|
76
|
+
) => {
|
|
77
|
+
const client = getActiveClient()
|
|
78
|
+
|
|
79
|
+
const filter = (payload: Amity.CommunityPayload) => {
|
|
80
|
+
const [cachedCommunity] = pullFromCache('community', payload.communities[0].communityId) ?? []
|
|
81
|
+
const [cachedMember] = pullFromCache(
|
|
82
|
+
'communityUsers',
|
|
83
|
+
getResolver('communityUsers')(getEventRelatedMember(event, payload))
|
|
84
|
+
) ?? []
|
|
85
|
+
|
|
86
|
+
decoratePayload(payload)
|
|
87
|
+
ingestInCache(payload)
|
|
88
|
+
|
|
89
|
+
const [community] = pullFromCache('community', payload.communities[0].communityId) ?? []
|
|
90
|
+
const [member] = pullFromCache(
|
|
91
|
+
'communityUsers',
|
|
92
|
+
getResolver('communityUsers')(getEventRelatedMember(event, payload))
|
|
93
|
+
) ?? []
|
|
94
|
+
|
|
95
|
+
if (cachedCommunity && isMatch(cachedCommunity, community) && cachedMember && isMatch(cachedMember, member)) {
|
|
96
|
+
return
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
callback(community, member)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return createEventSubscriber(
|
|
103
|
+
client,
|
|
104
|
+
event,
|
|
105
|
+
event,
|
|
106
|
+
filter
|
|
107
|
+
)
|
|
108
|
+
}
|
|
@@ -9,6 +9,10 @@ import {
|
|
|
9
9
|
onCommunityDeleted,
|
|
10
10
|
onCommunityJoined,
|
|
11
11
|
onCommunityLeft,
|
|
12
|
+
onCommunityUserAdded,
|
|
13
|
+
onCommunityUserRemoved,
|
|
14
|
+
onCommunityUserBanned,
|
|
15
|
+
onCommunityUserUnbanned
|
|
12
16
|
} from '../events'
|
|
13
17
|
|
|
14
18
|
/**
|
|
@@ -27,7 +31,7 @@ import {
|
|
|
27
31
|
*
|
|
28
32
|
* @category Community Observer
|
|
29
33
|
*/
|
|
30
|
-
export const observeCommunity = <Events extends ['onFetch', 'onUpdate', 'onDelete', 'onJoin', 'onLeft']>(
|
|
34
|
+
export const observeCommunity = <Events extends ['onFetch', 'onUpdate', 'onDelete', 'onJoin', 'onLeft', 'onUserAdded', 'onUserRemoved', 'onUserBanned', 'onUserUnbanned']>(
|
|
31
35
|
communityId: string,
|
|
32
36
|
callback: Amity.ObjectListener<Amity.QueryResult<Amity.Community>, Events>
|
|
33
37
|
): Amity.Unsubscriber => {
|
|
@@ -41,9 +45,6 @@ export const observeCommunity = <Events extends ['onFetch', 'onUpdate', 'onDelet
|
|
|
41
45
|
result: Amity.QueryResult<Amity.Community>,
|
|
42
46
|
action: Events[number]
|
|
43
47
|
) => {
|
|
44
|
-
// filter function
|
|
45
|
-
if (result.data?.communityId !== communityId) return
|
|
46
|
-
|
|
47
48
|
if (callback instanceof Function)
|
|
48
49
|
return callback(result)
|
|
49
50
|
|
|
@@ -53,18 +54,31 @@ export const observeCommunity = <Events extends ['onFetch', 'onUpdate', 'onDelet
|
|
|
53
54
|
callback[action]?.(result)
|
|
54
55
|
}
|
|
55
56
|
|
|
57
|
+
const realtimeRouter = (
|
|
58
|
+
result: Amity.QueryResult<Amity.Community>,
|
|
59
|
+
action: Events[number]
|
|
60
|
+
) => {
|
|
61
|
+
if (result.data?.communityId !== communityId) return
|
|
62
|
+
|
|
63
|
+
router(result, action)
|
|
64
|
+
}
|
|
65
|
+
|
|
56
66
|
const disposers: Amity.Unsubscriber[] = []
|
|
57
67
|
|
|
58
68
|
disposers.push(
|
|
59
|
-
onCommunityUpdated(data =>
|
|
60
|
-
onCommunityDeleted(data =>
|
|
61
|
-
onCommunityJoined(data =>
|
|
62
|
-
onCommunityLeft(data =>
|
|
69
|
+
onCommunityUpdated(data => realtimeRouter({ data }, 'onUpdate')),
|
|
70
|
+
onCommunityDeleted(data => realtimeRouter({ data }, 'onDelete')),
|
|
71
|
+
onCommunityJoined(data => realtimeRouter({ data }, 'onJoin')),
|
|
72
|
+
onCommunityLeft(data => realtimeRouter({ data }, 'onLeft')),
|
|
73
|
+
onCommunityUserAdded(data => realtimeRouter({ data }, 'onUserAdded')),
|
|
74
|
+
onCommunityUserRemoved(data => realtimeRouter({ data }, 'onUserRemoved')),
|
|
75
|
+
onCommunityUserBanned(data => realtimeRouter({ data }, 'onUserBanned')),
|
|
76
|
+
onCommunityUserUnbanned(data => realtimeRouter({ data }, 'onUserUnbanned')),
|
|
63
77
|
)
|
|
64
78
|
|
|
65
79
|
runQuery(
|
|
66
80
|
createQuery(getCommunity, communityId),
|
|
67
|
-
result =>
|
|
81
|
+
result => router(result, 'onFetch')
|
|
68
82
|
)
|
|
69
83
|
|
|
70
84
|
return () => {
|
package/src/core/cache/ingest.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pullFromCache } from './pull'
|
|
2
|
+
import { mergeInCache } from './merge'
|
|
2
3
|
|
|
3
|
-
import { storeInterests } from '
|
|
4
|
+
import { getResolver, storeInterests } from '~/core/model'
|
|
5
|
+
import { pushToCache } from '~/core/cache/push'
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Ingest a payload (v3) into the cache
|
|
@@ -19,6 +21,20 @@ export const ingestInCache = (
|
|
|
19
21
|
const name = storeInterests[key]
|
|
20
22
|
if (!name) return
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
payload[key].forEach(model => {
|
|
25
|
+
const [cached] = pullFromCache(name, getResolver(name)(model)) ?? []
|
|
26
|
+
|
|
27
|
+
if (cached) {
|
|
28
|
+
// > instead of >= - some updates like reactions do not change updatedAt
|
|
29
|
+
if (cached.updatedAt && cached.updatedAt > model.updatedAt) {
|
|
30
|
+
return
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// personal fields like isJoined, myReactions are missed from real time event payload
|
|
34
|
+
mergeInCache(name, model)
|
|
35
|
+
} else {
|
|
36
|
+
pushToCache(name, model)
|
|
37
|
+
}
|
|
38
|
+
})
|
|
23
39
|
})
|
|
24
40
|
}
|