@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
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ASCError } from '~/core/errors'
|
|
2
|
+
|
|
1
3
|
export {}
|
|
2
4
|
|
|
3
5
|
declare global {
|
|
@@ -28,5 +30,17 @@ declare global {
|
|
|
28
30
|
next?: Token
|
|
29
31
|
}
|
|
30
32
|
}
|
|
33
|
+
|
|
34
|
+
type MqttClient = {
|
|
35
|
+
connect: (params: { accessToken: string, userId: string }) => Promise<void>
|
|
36
|
+
disconnect: () => Promise<void>
|
|
37
|
+
get connected(): boolean
|
|
38
|
+
on: <T extends keyof Amity.MqttEvents>(event: T, handler: (payload: Amity.MqttEvents[T]) => void) => void
|
|
39
|
+
once: <T extends keyof Amity.MqttEvents>(event: T, handler: (payload: Amity.MqttEvents[T]) => void) => void
|
|
40
|
+
off: <T extends keyof Amity.MqttEvents>(event: T, handler?: (payload: Amity.MqttEvents[T]) => void) => void
|
|
41
|
+
removeAllListeners: () => void
|
|
42
|
+
subscribe: (topic: string, callback?: Amity.Listener<ASCError | void>) => Amity.Unsubscriber
|
|
43
|
+
unsubscribe: (topic: string) => void
|
|
44
|
+
}
|
|
31
45
|
}
|
|
32
46
|
}
|
|
@@ -10,6 +10,7 @@ declare global {
|
|
|
10
10
|
|
|
11
11
|
log: Logger
|
|
12
12
|
http: AxiosInstance
|
|
13
|
+
mqtt: Amity.MqttClient
|
|
13
14
|
ws: SocketIOClient.Socket
|
|
14
15
|
emitter: Emitter<Amity.Events>
|
|
15
16
|
|
|
@@ -17,6 +18,8 @@ declare global {
|
|
|
17
18
|
|
|
18
19
|
apiKey?: string
|
|
19
20
|
userId?: string
|
|
21
|
+
user?: Amity.User
|
|
22
|
+
accessToken?: string
|
|
20
23
|
|
|
21
24
|
use: () => void
|
|
22
25
|
}
|
|
@@ -13,12 +13,12 @@ declare global {
|
|
|
13
13
|
} & (
|
|
14
14
|
T extends 'channel' ? {
|
|
15
15
|
channelId: Amity.Channel['channelId']
|
|
16
|
-
membership: 'member' | '
|
|
16
|
+
membership: 'member' | 'none' | 'banned'
|
|
17
17
|
readToSegment: number
|
|
18
18
|
} :
|
|
19
19
|
T extends 'community' ? {
|
|
20
20
|
communityId: Amity.Community['communityId']
|
|
21
|
-
communityMembership: 'member' | '
|
|
21
|
+
communityMembership: 'member' | 'none' | 'banned'
|
|
22
22
|
} :
|
|
23
23
|
never
|
|
24
24
|
)
|
|
@@ -3,6 +3,7 @@ export {}
|
|
|
3
3
|
declare global {
|
|
4
4
|
namespace Amity {
|
|
5
5
|
type User = {
|
|
6
|
+
_id: string
|
|
6
7
|
userId: string
|
|
7
8
|
displayName?: string
|
|
8
9
|
avatarFileId?: Amity.File<'image'>['fileId']
|
|
@@ -14,5 +15,6 @@ declare global {
|
|
|
14
15
|
& Amity.Accredited
|
|
15
16
|
& Amity.Timestamps
|
|
16
17
|
& Amity.Syncable
|
|
18
|
+
& Amity.Subscribable
|
|
17
19
|
}
|
|
18
20
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { disconnectClient } from '~/client/api/disconnectClient'
|
|
1
2
|
import { getDeviceId } from '~/core/device'
|
|
2
|
-
import { proxyWebsocketEvents } from '~/core/events'
|
|
3
|
+
import { proxyMqttEvents, proxyWebsocketEvents } from '~/core/events'
|
|
3
4
|
|
|
4
5
|
import { getActiveClient } from './activeClient'
|
|
5
6
|
|
|
6
7
|
import { getToken } from './getToken'
|
|
8
|
+
import { onClientBanned } from '../events'
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* ```js
|
|
@@ -39,7 +41,7 @@ export const connectClient = async (params: {
|
|
|
39
41
|
|
|
40
42
|
// @ts-ignore: in that particular case, typing can be
|
|
41
43
|
// ignored since we enforce default values just before.
|
|
42
|
-
const { accessToken } = await getToken(params)
|
|
44
|
+
const { accessToken, users } = await getToken(params)
|
|
43
45
|
|
|
44
46
|
// manually setup the token for http transport
|
|
45
47
|
client.http.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`
|
|
@@ -47,6 +49,7 @@ export const connectClient = async (params: {
|
|
|
47
49
|
// manually setup the token for ws transport
|
|
48
50
|
client.ws.io.opts.query = {token: accessToken}
|
|
49
51
|
|
|
52
|
+
// FIXME: events are duplicated if connectClient is called few times without disconnectClient
|
|
50
53
|
// wire websocket events to our event emitter
|
|
51
54
|
proxyWebsocketEvents(client.ws, client.emitter)
|
|
52
55
|
|
|
@@ -57,7 +60,14 @@ export const connectClient = async (params: {
|
|
|
57
60
|
client.ws.open()
|
|
58
61
|
})
|
|
59
62
|
|
|
63
|
+
const unsubscribe = onClientBanned(() => {
|
|
64
|
+
disconnectClient()
|
|
65
|
+
unsubscribe()
|
|
66
|
+
})
|
|
67
|
+
|
|
60
68
|
client.userId = params.userId
|
|
69
|
+
client.user = users[0]
|
|
70
|
+
client.accessToken = accessToken
|
|
61
71
|
|
|
62
72
|
return client.ws.connected
|
|
63
73
|
}
|
|
@@ -2,10 +2,8 @@ import { VERSION } from '~/version'
|
|
|
2
2
|
|
|
3
3
|
import { createLogger } from '~/core/debug'
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
createWebsocketTransport,
|
|
8
|
-
} from '~/core/transports'
|
|
5
|
+
import { API_ENDPOINT, getUrlFromTemplate, UrlTemplate } from '~/core/network'
|
|
6
|
+
import { createHttpTransport, createMqttTransport, createWebsocketTransport } from '~/core/transports'
|
|
9
7
|
|
|
10
8
|
import { createEventEmitter } from '~/core/events'
|
|
11
9
|
|
|
@@ -28,7 +26,7 @@ import { getActiveClient, setActiveClient } from './activeClient'
|
|
|
28
26
|
**/
|
|
29
27
|
export const createClient = (
|
|
30
28
|
apiKey: string,
|
|
31
|
-
apiEndpoint: string =
|
|
29
|
+
apiEndpoint: typeof API_ENDPOINT[keyof typeof API_ENDPOINT]|string = API_ENDPOINT.SG,
|
|
32
30
|
debugSession: string = 'amity'
|
|
33
31
|
): Amity.Client => {
|
|
34
32
|
const log = createLogger(debugSession)
|
|
@@ -38,8 +36,9 @@ export const createClient = (
|
|
|
38
36
|
apiEndpoint,
|
|
39
37
|
})
|
|
40
38
|
|
|
41
|
-
const http = createHttpTransport(apiEndpoint)
|
|
42
|
-
const ws = createWebsocketTransport(apiEndpoint)
|
|
39
|
+
const http = createHttpTransport(getUrlFromTemplate(UrlTemplate.HTTP, apiEndpoint))
|
|
40
|
+
const ws = createWebsocketTransport(getUrlFromTemplate(UrlTemplate.HTTP, apiEndpoint))
|
|
41
|
+
const mqtt = createMqttTransport(getUrlFromTemplate(UrlTemplate.MQTT, apiEndpoint));
|
|
43
42
|
|
|
44
43
|
const emitter = createEventEmitter()
|
|
45
44
|
|
|
@@ -50,6 +49,7 @@ export const createClient = (
|
|
|
50
49
|
log,
|
|
51
50
|
http,
|
|
52
51
|
ws,
|
|
52
|
+
mqtt,
|
|
53
53
|
emitter,
|
|
54
54
|
use: () => setActiveClient(client),
|
|
55
55
|
}
|
|
@@ -21,11 +21,16 @@ export const disconnectClient = async (): Promise<boolean> => {
|
|
|
21
21
|
await new Promise(resolve => {
|
|
22
22
|
client.ws.once('disconnect', resolve)
|
|
23
23
|
client.ws.disconnect()
|
|
24
|
+
client.mqtt.disconnect()
|
|
24
25
|
})
|
|
25
26
|
|
|
26
27
|
client.emitter.all.clear()
|
|
28
|
+
// FIXME: it removes listener in ws.ts, it breaks global ban event
|
|
27
29
|
client.ws.removeAllListeners()
|
|
30
|
+
client.mqtt.removeAllListeners()
|
|
28
31
|
client.userId = undefined
|
|
32
|
+
client.user = undefined
|
|
33
|
+
client.accessToken = undefined
|
|
29
34
|
|
|
30
35
|
return !client.ws.connected
|
|
31
36
|
}
|
|
@@ -25,7 +25,7 @@ export const getToken = async (params: {
|
|
|
25
25
|
|
|
26
26
|
const deviceInfo = await getDeviceInfo()
|
|
27
27
|
|
|
28
|
-
const { data } = await client.http.post<Amity.Tokens>('/v1/device', {
|
|
28
|
+
const { data } = await client.http.post<Amity.Tokens & { users: Amity.User[] }>('/v1/device', {
|
|
29
29
|
...params, deviceInfo,
|
|
30
30
|
} , {
|
|
31
31
|
//@ts-ignore
|
|
@@ -35,8 +35,8 @@ export const createComment = async <T extends Amity.CommentContentType>(
|
|
|
35
35
|
|
|
36
36
|
const post = await getPost(bundle.referenceId)
|
|
37
37
|
|
|
38
|
-
fireEvent('
|
|
39
|
-
fireEvent('
|
|
38
|
+
fireEvent('post.updated', { posts: [post] })
|
|
39
|
+
fireEvent('comment.created', data)
|
|
40
40
|
|
|
41
41
|
const { comments } = data
|
|
42
42
|
return comments[0]
|
|
@@ -44,8 +44,8 @@ export const deleteComment = async (
|
|
|
44
44
|
|
|
45
45
|
const post = await getPost(comment.referenceId)
|
|
46
46
|
|
|
47
|
-
fireEvent('
|
|
48
|
-
fireEvent('
|
|
47
|
+
fireEvent('post.updated', { posts: [post] })
|
|
48
|
+
fireEvent('comment.deleted', { comments: [deleted] })
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
if (permanent) {
|
|
@@ -34,7 +34,7 @@ export const updateComment = async (
|
|
|
34
34
|
|
|
35
35
|
decoratePayload(data)
|
|
36
36
|
ingestInCache(data)
|
|
37
|
-
fireEvent('
|
|
37
|
+
fireEvent('comment.updated', data)
|
|
38
38
|
|
|
39
39
|
const { comments } = data
|
|
40
40
|
return comments.find(comment => comment.commentId === commentId)!
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export * from './onCommentCreated'
|
|
2
2
|
export * from './onCommentUpdated'
|
|
3
3
|
export * from './onCommentDeleted'
|
|
4
|
+
|
|
5
|
+
export * from './onCommentFlagged'
|
|
6
|
+
export * from './onCommentUnflagged'
|
|
7
|
+
|
|
8
|
+
export * from './onCommentReactionAdded'
|
|
9
|
+
export * from './onCommentReactionRemoved'
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createEventSubscriber } from '~/core/events'
|
|
3
|
-
|
|
4
|
-
import { decoratePayload } from '~/core/query'
|
|
5
|
-
import { ingestInCache } from '~/core/cache'
|
|
1
|
+
import { createCommentEventSubscriber } from './utils'
|
|
6
2
|
|
|
7
3
|
/**
|
|
8
4
|
* ```js
|
|
@@ -12,7 +8,7 @@ import { ingestInCache } from '~/core/cache'
|
|
|
12
8
|
* })
|
|
13
9
|
* ```
|
|
14
10
|
*
|
|
15
|
-
* Fired when
|
|
11
|
+
* Fired when {@link Amity.Comment} has 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
|
|
@@ -21,19 +17,5 @@ import { ingestInCache } from '~/core/cache'
|
|
|
21
17
|
*/
|
|
22
18
|
export const onCommentCreated = <T extends Amity.CommentContentType>(
|
|
23
19
|
callback: Amity.Listener<Amity.Comment<T>>
|
|
24
|
-
): Amity.Unsubscriber =>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const filter = (payload: Amity.CommentPayload<T>) => {
|
|
28
|
-
decoratePayload(payload)
|
|
29
|
-
ingestInCache(payload)
|
|
30
|
-
callback(payload.comments[0])
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return createEventSubscriber(
|
|
34
|
-
client,
|
|
35
|
-
'message/onCommentCreated',
|
|
36
|
-
'v3.comment.didCreate',
|
|
37
|
-
filter
|
|
38
|
-
)
|
|
39
|
-
}
|
|
20
|
+
): Amity.Unsubscriber =>
|
|
21
|
+
createCommentEventSubscriber('comment.created', callback)
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createEventSubscriber } from '~/core/events'
|
|
3
|
-
|
|
4
|
-
import { decoratePayload } from '~/core/query'
|
|
5
|
-
import { ingestInCache } from '~/core/cache'
|
|
1
|
+
import { createCommentEventSubscriber } from './utils'
|
|
6
2
|
|
|
7
3
|
/**
|
|
8
4
|
* ```js
|
|
@@ -12,7 +8,7 @@ import { ingestInCache } from '~/core/cache'
|
|
|
12
8
|
* })
|
|
13
9
|
* ```
|
|
14
10
|
*
|
|
15
|
-
* Fired when
|
|
11
|
+
* Fired when a {@link Amity.Comment} 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
|
|
@@ -21,19 +17,5 @@ import { ingestInCache } from '~/core/cache'
|
|
|
21
17
|
*/
|
|
22
18
|
export const onCommentDeleted = <T extends Amity.CommentContentType>(
|
|
23
19
|
callback: Amity.Listener<Amity.Comment<T>>
|
|
24
|
-
): Amity.Unsubscriber =>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const filter = (payload: Amity.CommentPayload<T>) => {
|
|
28
|
-
decoratePayload(payload)
|
|
29
|
-
ingestInCache(payload)
|
|
30
|
-
callback(payload.comments[0])
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return createEventSubscriber(
|
|
34
|
-
client,
|
|
35
|
-
'message/onCommentDeleted',
|
|
36
|
-
'v3.comment.didDelete',
|
|
37
|
-
filter
|
|
38
|
-
)
|
|
39
|
-
}
|
|
20
|
+
): Amity.Unsubscriber =>
|
|
21
|
+
createCommentEventSubscriber('comment.deleted', callback)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createCommentEventSubscriber } from './utils'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ```js
|
|
5
|
+
* import { onCommentFlagged } from '@amityco/ts-sdk'
|
|
6
|
+
* const dispose = onCommentFlagged(comment => {
|
|
7
|
+
* // ...
|
|
8
|
+
* })
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Fired when a {@link Amity.Comment} has been flagged
|
|
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 Comment Events
|
|
17
|
+
*/
|
|
18
|
+
export const onCommentFlagged = <T extends Amity.CommentContentType>(
|
|
19
|
+
callback: Amity.Listener<Amity.Comment<T>>
|
|
20
|
+
): Amity.Unsubscriber =>
|
|
21
|
+
createCommentEventSubscriber('comment.flagged', callback)
|
|
@@ -0,0 +1,52 @@
|
|
|
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 { preparePayloadForCache } from '~/reaction/utils'
|
|
6
|
+
import { isMatch } from '~/core/model'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* ```js
|
|
10
|
+
* import { onCommentReactionAdded } from '@amityco/ts-sdk'
|
|
11
|
+
* const dispose = onCommentReactionAdded(comment => {
|
|
12
|
+
* // ...
|
|
13
|
+
* })
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Fired when a {@link Amity.Comment} has been reacted
|
|
17
|
+
*
|
|
18
|
+
* @param callback The function to call when the event was fired
|
|
19
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
20
|
+
*
|
|
21
|
+
* @category Comment Events
|
|
22
|
+
*/
|
|
23
|
+
export const onCommentReactionAdded = <T extends Amity.CommentContentType>(
|
|
24
|
+
callback: Amity.Listener<Amity.Comment<T>>
|
|
25
|
+
): Amity.Unsubscriber => {
|
|
26
|
+
const client = getActiveClient()
|
|
27
|
+
|
|
28
|
+
const filter = (payload: Amity.CommentPayload<T> & { reactor: Amity.Reaction }) => {
|
|
29
|
+
const [cached] = pullFromCache('comment', payload.comments[0].commentId) ?? []
|
|
30
|
+
|
|
31
|
+
const { reactor, ...commentPayload } = payload;
|
|
32
|
+
|
|
33
|
+
decoratePayload(commentPayload as Amity.CommentPayload<T>)
|
|
34
|
+
preparePayloadForCache('comment.addReaction', payload)
|
|
35
|
+
ingestInCache(commentPayload as Amity.CommentPayload<T>)
|
|
36
|
+
|
|
37
|
+
const [comment] = pullFromCache('comment', payload.comments[0].commentId) ?? []
|
|
38
|
+
|
|
39
|
+
if (cached && isMatch(cached, comment)) {
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
callback(comment)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return createEventSubscriber(
|
|
47
|
+
client,
|
|
48
|
+
'comment.addReaction',
|
|
49
|
+
'comment.addReaction',
|
|
50
|
+
filter
|
|
51
|
+
)
|
|
52
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
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 { preparePayloadForCache } from '~/reaction/utils'
|
|
6
|
+
import { isMatch } from '~/core/model'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* ```js
|
|
10
|
+
* import { onCommentReactionRemoved } from '@amityco/ts-sdk'
|
|
11
|
+
* const dispose = onCommentReactionRemoved(comment => {
|
|
12
|
+
* // ...
|
|
13
|
+
* })
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Fired when a reaction has been removed from a {@link Amity.Comment}
|
|
17
|
+
*
|
|
18
|
+
* @param callback The function to call when the event was fired
|
|
19
|
+
* @returns an {@link Amity.Unsubscriber} function to stop listening
|
|
20
|
+
*
|
|
21
|
+
* @category Comment Events
|
|
22
|
+
*/
|
|
23
|
+
export const onCommentReactionRemoved = <T extends Amity.CommentContentType>(
|
|
24
|
+
callback: Amity.Listener<Amity.Comment<T>>
|
|
25
|
+
): Amity.Unsubscriber => {
|
|
26
|
+
const client = getActiveClient()
|
|
27
|
+
|
|
28
|
+
const filter = (payload: Amity.CommentPayload<T> & { reactor: Amity.Reaction }) => {
|
|
29
|
+
const [cached] = pullFromCache('comment', payload.comments[0].commentId) ?? []
|
|
30
|
+
|
|
31
|
+
const { reactor, ...commentPayload } = payload;
|
|
32
|
+
|
|
33
|
+
decoratePayload(commentPayload as Amity.CommentPayload<T>)
|
|
34
|
+
preparePayloadForCache('comment.removeReaction', payload)
|
|
35
|
+
ingestInCache(commentPayload as Amity.CommentPayload<T>)
|
|
36
|
+
|
|
37
|
+
const [comment] = pullFromCache('comment', payload.comments[0].commentId) ?? []
|
|
38
|
+
|
|
39
|
+
if (cached && isMatch(cached, comment)) {
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
callback(comment)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return createEventSubscriber(
|
|
47
|
+
client,
|
|
48
|
+
'comment.removeReaction',
|
|
49
|
+
'comment.removeReaction',
|
|
50
|
+
filter
|
|
51
|
+
)
|
|
52
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createCommentEventSubscriber } from './utils'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ```js
|
|
5
|
+
* import { onCommentUnflagged } from '@amityco/ts-sdk'
|
|
6
|
+
* const dispose = onCommentUnflagged(comment => {
|
|
7
|
+
* // ...
|
|
8
|
+
* })
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Fired when a flag has been removed from a {@link Amity.Comment}
|
|
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 Comment Events
|
|
17
|
+
*/
|
|
18
|
+
export const onCommentUnflagged = <T extends Amity.CommentContentType>(
|
|
19
|
+
callback: Amity.Listener<Amity.Comment<T>>
|
|
20
|
+
): Amity.Unsubscriber =>
|
|
21
|
+
createCommentEventSubscriber('comment.unflagged', callback)
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createEventSubscriber } from '~/core/events'
|
|
3
|
-
|
|
4
|
-
import { decoratePayload } from '~/core/query'
|
|
5
|
-
import { ingestInCache } from '~/core/cache'
|
|
1
|
+
import { createCommentEventSubscriber } from './utils'
|
|
6
2
|
|
|
7
3
|
/**
|
|
8
4
|
* ```js
|
|
@@ -12,7 +8,7 @@ import { ingestInCache } from '~/core/cache'
|
|
|
12
8
|
* })
|
|
13
9
|
* ```
|
|
14
10
|
*
|
|
15
|
-
* Fired when
|
|
11
|
+
* Fired when a {@link Amity.Comment} 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
|
|
@@ -21,19 +17,5 @@ import { ingestInCache } from '~/core/cache'
|
|
|
21
17
|
*/
|
|
22
18
|
export const onCommentUpdated = <T extends Amity.CommentContentType>(
|
|
23
19
|
callback: Amity.Listener<Amity.Comment<T>>
|
|
24
|
-
): Amity.Unsubscriber =>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const filter = (payload: Amity.CommentPayload<T>) => {
|
|
28
|
-
decoratePayload(payload)
|
|
29
|
-
ingestInCache(payload)
|
|
30
|
-
callback(payload.comments[0])
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return createEventSubscriber(
|
|
34
|
-
client,
|
|
35
|
-
'message/onCommentUpdated',
|
|
36
|
-
'v3.comment.didUpdate',
|
|
37
|
-
filter
|
|
38
|
-
)
|
|
39
|
-
}
|
|
20
|
+
): Amity.Unsubscriber =>
|
|
21
|
+
createCommentEventSubscriber('comment.updated', callback)
|
|
@@ -0,0 +1,34 @@
|
|
|
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 { isMatch } from '~/core/model'
|
|
6
|
+
|
|
7
|
+
export const createCommentEventSubscriber = <T extends Amity.CommentContentType>(
|
|
8
|
+
event: keyof Amity.MqttCommentMessageEvents,
|
|
9
|
+
callback: Amity.Listener<Amity.Comment<T>>
|
|
10
|
+
) => {
|
|
11
|
+
const client = getActiveClient()
|
|
12
|
+
|
|
13
|
+
const filter = (payload: Amity.CommentPayload<T>) => {
|
|
14
|
+
const [cached] = pullFromCache('comment', payload.comments[0].commentId) ?? []
|
|
15
|
+
|
|
16
|
+
decoratePayload(payload)
|
|
17
|
+
ingestInCache(payload)
|
|
18
|
+
|
|
19
|
+
const [comment] = pullFromCache('comment', payload.comments[0].commentId) ?? []
|
|
20
|
+
|
|
21
|
+
if (cached && isMatch(cached, comment)) {
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
callback(comment)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return createEventSubscriber(
|
|
29
|
+
client,
|
|
30
|
+
event,
|
|
31
|
+
event,
|
|
32
|
+
filter
|
|
33
|
+
)
|
|
34
|
+
}
|
|
@@ -7,6 +7,10 @@ import { getComment } from '../api'
|
|
|
7
7
|
import {
|
|
8
8
|
onCommentUpdated,
|
|
9
9
|
onCommentDeleted,
|
|
10
|
+
onCommentFlagged,
|
|
11
|
+
onCommentUnflagged,
|
|
12
|
+
onCommentReactionAdded,
|
|
13
|
+
onCommentReactionRemoved,
|
|
10
14
|
} from '../events'
|
|
11
15
|
|
|
12
16
|
|
|
@@ -26,7 +30,7 @@ import {
|
|
|
26
30
|
*
|
|
27
31
|
* @category Comment Observer
|
|
28
32
|
*/
|
|
29
|
-
export const observeComment = <Events extends ['onFetch', 'onUpdate', 'onDelete']>(
|
|
33
|
+
export const observeComment = <Events extends ['onFetch', 'onUpdate', 'onDelete', 'onFlagged', 'onUnflagged', 'onReactionAdded', 'onReactionRemoved']>(
|
|
30
34
|
commentId: string,
|
|
31
35
|
callback: Amity.ObjectListener<Amity.QueryResult<Amity.Comment>, Events>,
|
|
32
36
|
policy: Amity.QueryPolicy = 'cache_then_server',
|
|
@@ -41,9 +45,6 @@ export const observeComment = <Events extends ['onFetch', 'onUpdate', 'onDelete'
|
|
|
41
45
|
result: Amity.QueryResult<Amity.Comment>,
|
|
42
46
|
action: Events[number]
|
|
43
47
|
) => {
|
|
44
|
-
// filter function
|
|
45
|
-
if (result.data?.commentId !== commentId) return
|
|
46
|
-
|
|
47
48
|
if (callback instanceof Function)
|
|
48
49
|
return callback(result)
|
|
49
50
|
|
|
@@ -53,16 +54,29 @@ export const observeComment = <Events extends ['onFetch', 'onUpdate', 'onDelete'
|
|
|
53
54
|
callback[action]?.(result)
|
|
54
55
|
}
|
|
55
56
|
|
|
57
|
+
const realtimeRouter = (
|
|
58
|
+
result: Amity.QueryResult<Amity.Comment>,
|
|
59
|
+
action: Events[number]
|
|
60
|
+
) => {
|
|
61
|
+
if (result.data?.commentId !== commentId) return
|
|
62
|
+
|
|
63
|
+
router(result, action)
|
|
64
|
+
}
|
|
65
|
+
|
|
56
66
|
const disposers: Amity.Unsubscriber[] = []
|
|
57
67
|
|
|
58
68
|
disposers.push(
|
|
59
|
-
onCommentUpdated(data =>
|
|
60
|
-
onCommentDeleted(data =>
|
|
69
|
+
onCommentUpdated(data => realtimeRouter({ data }, 'onUpdate')),
|
|
70
|
+
onCommentDeleted(data => realtimeRouter({ data }, 'onDelete')),
|
|
71
|
+
onCommentFlagged(data => realtimeRouter({ data }, 'onFlagged')),
|
|
72
|
+
onCommentUnflagged(data => realtimeRouter({ data }, 'onUnflagged')),
|
|
73
|
+
onCommentReactionAdded(data => realtimeRouter({ data }, 'onReactionAdded')),
|
|
74
|
+
onCommentReactionRemoved(data => realtimeRouter({ data }, 'onReactionRemoved')),
|
|
61
75
|
)
|
|
62
76
|
|
|
63
77
|
runQuery(
|
|
64
78
|
createQuery(getComment, commentId),
|
|
65
|
-
result =>
|
|
79
|
+
result => router(result, 'onFetch'),
|
|
66
80
|
queryOptions(policy)
|
|
67
81
|
)
|
|
68
82
|
|