@amityco/ts-sdk 6.17.1-e9b6af1.0 → 6.17.2-ea577e1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@types/core/payload.d.ts +1 -0
- package/dist/@types/core/payload.d.ts.map +1 -1
- package/dist/@types/core/permissions.d.ts +5 -0
- package/dist/@types/core/permissions.d.ts.map +1 -1
- package/dist/@types/domains/client.d.ts +1 -0
- package/dist/@types/domains/client.d.ts.map +1 -1
- package/dist/@types/domains/story.d.ts +4 -0
- package/dist/@types/domains/story.d.ts.map +1 -1
- package/dist/channelRepository/observers/getChannel.d.ts.map +1 -1
- package/dist/channelRepository/observers/getChannels/ChannelLiveCollectionController.d.ts.map +1 -1
- package/dist/client/api/createClient.d.ts.map +1 -1
- package/dist/client/observers/getTotalUnreadCount.d.ts.map +1 -1
- package/dist/client/observers/getUserUnread.d.ts.map +1 -1
- package/dist/client/utils/hasPermission/checkChannelPermission.d.ts +2 -0
- package/dist/client/utils/hasPermission/checkChannelPermission.d.ts.map +1 -0
- package/dist/client/utils/hasPermission/checkCommunityPermission.d.ts +2 -0
- package/dist/client/utils/hasPermission/checkCommunityPermission.d.ts.map +1 -0
- package/dist/client/utils/hasPermission/checkUserPermission.d.ts +2 -0
- package/dist/client/utils/hasPermission/checkUserPermission.d.ts.map +1 -0
- package/dist/client/utils/hasPermission/hasPermission.d.ts +6 -0
- package/dist/client/utils/hasPermission/hasPermission.d.ts.map +1 -0
- package/dist/client/utils/hasPermission/index.d.ts +2 -0
- package/dist/client/utils/hasPermission/index.d.ts.map +1 -0
- package/dist/client/utils/markerSyncEngine.d.ts.map +1 -1
- package/dist/index.cjs.js +510 -70
- package/dist/index.esm.js +510 -71
- package/dist/index.umd.js +4 -4
- package/dist/marker/api/getUserMarker.d.ts +1 -1
- package/dist/marker/api/getUserMarker.d.ts.map +1 -1
- package/dist/marker/events/onChannelMarkerFetched.d.ts.map +1 -1
- package/dist/marker/events/onUserMarkerFetched.d.ts +2 -1
- package/dist/marker/events/onUserMarkerFetched.d.ts.map +1 -1
- package/dist/messageRepository/events/onMessageCreated.d.ts +2 -1
- package/dist/messageRepository/events/onMessageCreated.d.ts.map +1 -1
- package/dist/messageRepository/observers/observeMessages.d.ts.map +1 -1
- package/dist/messageRepository/utils/prepareMessagePayload.d.ts.map +1 -1
- package/dist/storyRepository/constants.d.ts +1 -0
- package/dist/storyRepository/constants.d.ts.map +1 -1
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.d.ts +14 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.d.ts.map +1 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.d.ts +5 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.d.ts.map +1 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.d.ts +16 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.d.ts.map +1 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/getStoriesByTargetIds.d.ts +5 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/getStoriesByTargetIds.d.ts.map +1 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/index.d.ts +2 -0
- package/dist/storyRepository/observers/getStoriesByTargetIds/index.d.ts.map +1 -0
- package/dist/storyRepository/observers/index.d.ts +1 -0
- package/dist/storyRepository/observers/index.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/getSubChannel.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/@types/core/payload.ts +1 -0
- package/src/@types/core/permissions.ts +6 -0
- package/src/@types/domains/client.ts +2 -0
- package/src/@types/domains/story.ts +5 -0
- package/src/channelRepository/observers/getChannel.ts +30 -2
- package/src/channelRepository/observers/getChannels/ChannelLiveCollectionController.ts +65 -3
- package/src/client/api/createClient.ts +3 -1
- package/src/client/observers/getTotalUnreadCount.ts +14 -4
- package/src/client/observers/getUserUnread.ts +95 -11
- package/src/client/utils/hasPermission/checkChannelPermission.ts +22 -0
- package/src/client/utils/hasPermission/checkCommunityPermission.ts +22 -0
- package/src/client/utils/hasPermission/checkUserPermission.ts +12 -0
- package/src/client/utils/hasPermission/hasPermission.ts +18 -0
- package/src/client/utils/hasPermission/index.ts +1 -0
- package/src/client/utils/markerSyncEngine.ts +46 -32
- package/src/marker/api/getUserMarker.ts +15 -4
- package/src/marker/events/onChannelMarkerFetched.ts +3 -1
- package/src/marker/events/onUserMarkerFetched.ts +17 -0
- package/src/messageRepository/api/tests/createMessage.test.ts +4 -4
- package/src/messageRepository/events/onMessageCreated.ts +20 -8
- package/src/messageRepository/events/tests/events.test.ts +2 -2
- package/src/messageRepository/observers/getMessages/MessageLiveCollectionController.ts +2 -2
- package/src/messageRepository/observers/observeMessages.ts +8 -2
- package/src/messageRepository/utils/prepareMessagePayload.ts +14 -4
- package/src/storyRepository/constants.ts +1 -0
- package/src/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.ts +113 -0
- package/src/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.ts +18 -0
- package/src/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.ts +97 -0
- package/src/storyRepository/observers/getStoriesByTargetIds/getStoriesByTargetIds.ts +32 -0
- package/src/storyRepository/observers/getStoriesByTargetIds/index.ts +1 -0
- package/src/storyRepository/observers/index.ts +1 -0
- package/src/subChannelRepository/observers/getSubChannel.ts +35 -2
- package/src/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.ts +53 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const getUserMarker: () => Promise<Amity.Cached<Amity.UserMarker>>;
|
|
1
|
+
export declare const getUserMarker: () => Promise<Amity.Cached<Amity.UserMarker | null>>;
|
|
2
2
|
//# sourceMappingURL=getUserMarker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserMarker.d.ts","sourceRoot":"","sources":["../../../src/marker/api/getUserMarker.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,QAAa,QAAQ,MAAM,MAAM,CAAC,MAAM,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"getUserMarker.d.ts","sourceRoot":"","sources":["../../../src/marker/api/getUserMarker.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,QAAa,QAAQ,MAAM,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,CAgCnF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onChannelMarkerFetched.d.ts","sourceRoot":"","sources":["../../../src/marker/events/onChannelMarkerFetched.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,aACvB,MAAM,QAAQ,CAAC,MAAM,aAAa,CAAC,KAC5C,MAAM,
|
|
1
|
+
{"version":3,"file":"onChannelMarkerFetched.d.ts","sourceRoot":"","sources":["../../../src/marker/events/onChannelMarkerFetched.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,aACvB,MAAM,QAAQ,CAAC,MAAM,aAAa,CAAC,KAC5C,MAAM,YAeR,CAAC"}
|
|
@@ -13,5 +13,6 @@
|
|
|
13
13
|
*
|
|
14
14
|
* @category UserMarker Events
|
|
15
15
|
*/
|
|
16
|
-
export declare const onUserMarkerFetched: (callback: Amity.Listener<Amity.UserMarker>) => Amity.Unsubscriber;
|
|
16
|
+
export declare const onUserMarkerFetched: (callback: Amity.Listener<Amity.UserMarker[]>) => Amity.Unsubscriber;
|
|
17
|
+
export declare const onUserMarkerFetchedLegacy: (callback: Amity.Listener<Amity.UserMarker>) => Amity.Unsubscriber;
|
|
17
18
|
//# sourceMappingURL=onUserMarkerFetched.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onUserMarkerFetched.d.ts","sourceRoot":"","sources":["../../../src/marker/events/onUserMarkerFetched.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,aACpB,MAAM,QAAQ,CAAC,MAAM,UAAU,CAAC,KACzC,MAAM,YAaR,CAAC"}
|
|
1
|
+
{"version":3,"file":"onUserMarkerFetched.d.ts","sourceRoot":"","sources":["../../../src/marker/events/onUserMarkerFetched.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,aACpB,MAAM,QAAQ,CAAC,MAAM,UAAU,EAAE,CAAC,KAC3C,MAAM,YAaR,CAAC;AAEF,eAAO,MAAM,yBAAyB,aAC1B,MAAM,QAAQ,CAAC,MAAM,UAAU,CAAC,KACzC,MAAM,YAaR,CAAC"}
|
|
@@ -14,5 +14,6 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @category Message Events
|
|
16
16
|
*/
|
|
17
|
-
export declare const
|
|
17
|
+
export declare const onMessageCreatedMqtt: (callback: Amity.Listener<Amity.Message>) => Amity.Unsubscriber;
|
|
18
|
+
export declare const onMessageCreatedLocal: (callback: Amity.Listener<Amity.Message>) => Amity.Unsubscriber;
|
|
18
19
|
//# sourceMappingURL=onMessageCreated.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onMessageCreated.d.ts","sourceRoot":"","sources":["../../../src/messageRepository/events/onMessageCreated.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"onMessageCreated.d.ts","sourceRoot":"","sources":["../../../src/messageRepository/events/onMessageCreated.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,aACrB,MAAM,QAAQ,CAAC,MAAM,OAAO,CAAC,KACtC,MAAM,YAqBR,CAAC;AAEF,eAAO,MAAM,qBAAqB,aACtB,MAAM,QAAQ,CAAC,MAAM,OAAO,CAAC,KACtC,MAAM,YAcR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observeMessages.d.ts","sourceRoot":"","sources":["../../../src/messageRepository/observers/observeMessages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"observeMessages.d.ts","sourceRoot":"","sources":["../../../src/messageRepository/observers/observeMessages.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,eAAe,iBACZ,MAAM,UAAU,CAAC,cAAc,CAAC,YACpC,MAAM,cAAc,CAC5B,MAAM,QAAQ,CAAC,MAAM,OAAO,CAAC,EAC7B;IAAC,UAAU;IAAE,UAAU;IAAE,UAAU;CAAC,CACrC,KACA,MAAM,YAyCR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareMessagePayload.d.ts","sourceRoot":"","sources":["../../../src/messageRepository/utils/prepareMessagePayload.ts"],"names":[],"mappings":"AAYA,wBAAgB,cAAc,CAC5B,OAAO,EAAE,KAAK,CAAC,UAAU,EACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,EAC1B,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,iBAAiB,GACpC,KAAK,CAAC,OAAO,CAsEf;
|
|
1
|
+
{"version":3,"file":"prepareMessagePayload.d.ts","sourceRoot":"","sources":["../../../src/messageRepository/utils/prepareMessagePayload.ts"],"names":[],"mappings":"AAYA,wBAAgB,cAAc,CAC5B,OAAO,EAAE,KAAK,CAAC,UAAU,EACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,EAC1B,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,iBAAiB,GACpC,KAAK,CAAC,OAAO,CAsEf;AAWD,eAAO,MAAM,qBAAqB,YACvB,MAAM,cAAc,UACrB,MAAM,MAAM,iBAAiB,KACpC,QAAQ,MAAM,uBAAuB,CA0CvC,CAAC;AAEF,aAAK,gBAAgB,GAAG,IAAI,CAC1B,KAAK,CAAC,aAAa,EAIjB,MAAM,GACN,QAAQ,GACR,cAAc,GACd,MAAM,GACN,gBAAgB,GAChB,iBAAiB,GACjB,UAAU,GACV,eAAe,GACf,eAAe,CAClB,GAAG;IACF,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC;IACpC,OAAO,EAAE;QACP,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KACrC,CAAC;CACH,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,GAAG,IAAI,EACR,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAc9C;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,KAAK,EACL,IAAI,EACJ,GAAG,IAAI,EACR,EAAE,KAAK,CAAC,sBAAsB,GAAG,gBAAgB,CA6BjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/storyRepository/constants.ts"],"names":[],"mappings":"AAAA,0BAAkB,eAAe;IAC/B,KAAK,UAAU;IACf,UAAU,qBAAqB;IAC/B,OAAO,eAAe;IACtB,SAAS,oBAAoB;IAC7B,MAAM,iBAAiB;IACvB,wBAAwB,oBAAoB;CAC7C"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/storyRepository/constants.ts"],"names":[],"mappings":"AAAA,0BAAkB,eAAe;IAC/B,KAAK,UAAU;IACf,UAAU,qBAAqB;IAC/B,gBAAgB,qBAAqB;IACrC,OAAO,eAAe;IACtB,SAAS,oBAAoB;IAC7B,MAAM,iBAAiB;IACvB,wBAAwB,oBAAoB;CAC7C"}
|
package/dist/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { LiveCollectionController } from '~/core/liveCollection/LiveCollectionController';
|
|
2
|
+
import { StoryPaginationNoPageController } from './StoryPaginationNoPageController';
|
|
3
|
+
export declare class StoryLiveCollectionController extends LiveCollectionController<'story', Amity.StoryLiveCollection, Amity.Story, StoryPaginationNoPageController> {
|
|
4
|
+
private queryStreamController;
|
|
5
|
+
private query;
|
|
6
|
+
constructor(query: Amity.StoryLiveCollection, callback: Amity.LiveCollectionCallback<Amity.Story>);
|
|
7
|
+
protected setup(): void;
|
|
8
|
+
protected persistModel(response: Amity.StoryPayload): void;
|
|
9
|
+
protected persistQueryStream({ response, direction, refresh, }: Amity.LiveCollectionPersistQueryStreamParams<'story'>): void;
|
|
10
|
+
notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams): void;
|
|
11
|
+
private applyFilter;
|
|
12
|
+
startSubscription(): Amity.Unsubscriber[];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=StoryLiveCollectionController.d.ts.map
|
package/dist/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StoryLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/storyRepository/observers/getStoriesByTargetIds/StoryLiveCollectionController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAU1F,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AAEpF,qBAAa,6BAA8B,SAAQ,wBAAwB,CACzE,OAAO,EACP,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,KAAK,EACX,+BAA+B,CAChC;IACC,OAAO,CAAC,qBAAqB,CAA6B;IAE1D,OAAO,CAAC,KAAK,CAA4B;gBAGvC,KAAK,EAAE,KAAK,CAAC,mBAAmB,EAChC,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC;IAsBrD,SAAS,CAAC,KAAK;IAUf,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY;IAInD,SAAS,CAAC,kBAAkB,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,KAAK,CAAC,sCAAsC,CAAC,OAAO,CAAC;IAIxD,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,0BAA0B;IAyBzE,OAAO,CAAC,WAAW;IAUnB,iBAAiB;CAQlB"}
|
package/dist/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PaginationNoPageController } from '~/core/liveCollection/PaginationNoPageController';
|
|
2
|
+
export declare class StoryPaginationNoPageController extends PaginationNoPageController<'story', Pick<Amity.StoryLiveCollection, 'targets'>> {
|
|
3
|
+
getRequest(queryParams: Pick<Amity.StoryLiveCollection, 'targets'>): Promise<Amity.StoryPayload>;
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=StoryPaginationNoPageController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StoryPaginationNoPageController.d.ts","sourceRoot":"","sources":["../../../../src/storyRepository/observers/getStoriesByTargetIds/StoryPaginationNoPageController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AAE9F,qBAAa,+BAAgC,SAAQ,0BAA0B,CAC7E,OAAO,EACP,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAC3C;IACO,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,SAAS,CAAC;CASzE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
|
|
2
|
+
import { StoryPaginationNoPageController } from './StoryPaginationNoPageController';
|
|
3
|
+
export declare class StoryQueryStreamController extends QueryStreamController<Amity.StoryPayload, Amity.StoryLiveCollection> {
|
|
4
|
+
private notifyChange;
|
|
5
|
+
private paginationController;
|
|
6
|
+
constructor(query: Amity.StoryLiveCollection, cacheKey: string[], notifyChange: (params: Amity.LiveCollectionNotifyParams) => void, paginationController: StoryPaginationNoPageController);
|
|
7
|
+
saveToMainDB(response: Amity.StoryPayload): void;
|
|
8
|
+
getStoryReferenceIds(story: Amity.RawStory): string;
|
|
9
|
+
appendToQueryStream(response: Amity.StoryPayload, direction: Amity.LiveCollectionPageDirection, refresh?: boolean): void;
|
|
10
|
+
reactor(action: Amity.StoryActionType): (payload: Amity.InternalStory[]) => void;
|
|
11
|
+
subscribeRTE(createSubscriber: {
|
|
12
|
+
fn: (reactor: Amity.Listener<Amity.InternalStory[]>) => Amity.Unsubscriber;
|
|
13
|
+
action: Amity.StoryActionType;
|
|
14
|
+
}[]): Amity.Unsubscriber[];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=StoryQueryStreamController.d.ts.map
|
package/dist/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StoryQueryStreamController.d.ts","sourceRoot":"","sources":["../../../../src/storyRepository/observers/getStoriesByTargetIds/StoryQueryStreamController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAOpF,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AAEpF,qBAAa,0BAA2B,SAAQ,qBAAqB,CACnE,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,mBAAmB,CAC1B;IACC,OAAO,CAAC,YAAY,CAAqD;IAEzE,OAAO,CAAC,oBAAoB,CAAkC;gBAG5D,KAAK,EAAE,KAAK,CAAC,mBAAmB,EAChC,QAAQ,EAAE,MAAM,EAAE,EAClB,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,0BAA0B,KAAK,IAAI,EAChE,oBAAoB,EAAE,+BAA+B;IAQvD,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY;IAkBzC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ;IAO1C,mBAAmB,CACjB,QAAQ,EAAE,KAAK,CAAC,YAAY,EAC5B,SAAS,EAAE,KAAK,CAAC,2BAA2B,EAC5C,OAAO,UAAQ;IAiBjB,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,aAClB,MAAM,aAAa,EAAE;IAaxC,YAAY,CACV,gBAAgB,EAAE;QAChB,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC;QAC3E,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;KAC/B,EAAE;CAIN"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const getStoriesByTargetIds: (params: {
|
|
2
|
+
targets: Amity.StoryTargetQueryParam[];
|
|
3
|
+
options?: Amity.StorySortOption;
|
|
4
|
+
}, callback: Amity.LiveCollectionCallback<Amity.Story>, config?: Amity.LiveCollectionConfig) => () => void;
|
|
5
|
+
//# sourceMappingURL=getStoriesByTargetIds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getStoriesByTargetIds.d.ts","sourceRoot":"","sources":["../../../../src/storyRepository/observers/getStoriesByTargetIds/getStoriesByTargetIds.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB,WACxB;IAAE,OAAO,EAAE,MAAM,qBAAqB,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,eAAe,CAAA;CAAE,YACzE,MAAM,sBAAsB,CAAC,MAAM,KAAK,CAAC,WAC1C,MAAM,oBAAoB,eAuBpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storyRepository/observers/getStoriesByTargetIds/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/observers/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/observers/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSubChannel.d.ts","sourceRoot":"","sources":["../../../src/subChannelRepository/observers/getSubChannel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getSubChannel.d.ts","sourceRoot":"","sources":["../../../src/subChannelRepository/observers/getSubChannel.ts"],"names":[],"mappings":"AA0BA;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,iBACV,MAAM,UAAU,CAAC,cAAc,CAAC,YACpC,MAAM,kBAAkB,CAAC,MAAM,UAAU,CAAC,KACnD,MAAM,YA+KR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubChannelLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAE1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"SubChannelLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAE1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AA4BlF,qBAAa,kCAAmC,SAAQ,wBAAwB,CAC9E,YAAY,EACZ,KAAK,CAAC,wBAAwB,EAC9B,KAAK,CAAC,UAAU,EAChB,8BAA8B,CAC/B;IACC,OAAO,CAAC,qBAAqB,CAAkC;IAE/D,OAAO,CAAC,KAAK,CAAiC;gBAG5C,KAAK,EAAE,KAAK,CAAC,wBAAwB,EACrC,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC;IAmB1D,SAAS,CAAC,KAAK;cASC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,UAAU;IAIjF,SAAS,CAAC,kBAAkB,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,KAAK,CAAC,sCAAsC,CAAC,YAAY,CAAC;IAI7D,iBAAiB;IAkNjB,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,0BAA0B;IAuBzE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE;CAWrC"}
|
package/package.json
CHANGED
|
@@ -71,5 +71,11 @@ declare global {
|
|
|
71
71
|
permissions: Permission[];
|
|
72
72
|
} & Amity.Timestamps &
|
|
73
73
|
Amity.SoftDelete;
|
|
74
|
+
|
|
75
|
+
type PermissionChecker = {
|
|
76
|
+
community: (communityId: Amity.Community['communityId']) => boolean;
|
|
77
|
+
channel: (channelId: Amity.Channel['channelId']) => boolean;
|
|
78
|
+
currentUser: () => boolean;
|
|
79
|
+
};
|
|
74
80
|
}
|
|
75
81
|
}
|
|
@@ -55,6 +55,11 @@ declare global {
|
|
|
55
55
|
options?: Amity.StorySortOption;
|
|
56
56
|
} & Amity.StoryTargetQueryParam;
|
|
57
57
|
|
|
58
|
+
type StoryLiveCollection = {
|
|
59
|
+
targets: Amity.StoryTargetQueryParam[];
|
|
60
|
+
options?: Amity.StorySortOption;
|
|
61
|
+
};
|
|
62
|
+
|
|
58
63
|
type StoryTarget = Pick<Amity.RawStoryTarget, 'targetId' | 'targetType'> & {
|
|
59
64
|
updatedAt: Amity.timestamp;
|
|
60
65
|
hasUnseen: boolean;
|
|
@@ -14,7 +14,10 @@ import {
|
|
|
14
14
|
onChannelUpdated,
|
|
15
15
|
} from '../events';
|
|
16
16
|
import { dropFromCache, pullFromCache } from '~/cache/api';
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
onMessageCreatedLocal,
|
|
19
|
+
onMessageCreatedMqtt,
|
|
20
|
+
} from '~/messageRepository/events/onMessageCreated';
|
|
18
21
|
import { onMessageUpdated } from '~/messageRepository/events/onMessageUpdated';
|
|
19
22
|
import { onMessageDeleted } from '~/messageRepository/events/onMessageDeleted';
|
|
20
23
|
import { onSubChannelDeleted } from '~/subChannelRepository/events/onSubChannelDeleted';
|
|
@@ -120,7 +123,32 @@ export const getChannel = (
|
|
|
120
123
|
callback(message);
|
|
121
124
|
};
|
|
122
125
|
|
|
123
|
-
return
|
|
126
|
+
return onMessageCreatedMqtt(updateMessagePreview);
|
|
127
|
+
},
|
|
128
|
+
'channelId',
|
|
129
|
+
'channel',
|
|
130
|
+
),
|
|
131
|
+
convertEventPayload(
|
|
132
|
+
(callback: Amity.Listener<Amity.Message>) => {
|
|
133
|
+
const updateMessagePreview = async (message: Amity.Message) => {
|
|
134
|
+
const messagePreviewSetting = await client.getMessagePreviewSetting(false);
|
|
135
|
+
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
136
|
+
|
|
137
|
+
await handleMessageCreated(message);
|
|
138
|
+
|
|
139
|
+
if (message.channelId !== channelId) return;
|
|
140
|
+
|
|
141
|
+
const channel = pullFromCache<Amity.Channel>(['channel', 'get', channelId])?.data;
|
|
142
|
+
if (!channel) return;
|
|
143
|
+
|
|
144
|
+
updateChannelCache(channel, {
|
|
145
|
+
messagePreviewId: message.messageId,
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
callback(message);
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
return onMessageCreatedLocal(updateMessagePreview);
|
|
124
152
|
},
|
|
125
153
|
'channelId',
|
|
126
154
|
'channel',
|
|
@@ -14,7 +14,10 @@ import {
|
|
|
14
14
|
onChannelMuted,
|
|
15
15
|
onChannelUpdated,
|
|
16
16
|
} from '~/channelRepository/events';
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
onMessageCreatedLocal,
|
|
19
|
+
onMessageCreatedMqtt,
|
|
20
|
+
} from '~/messageRepository/events/onMessageCreated';
|
|
18
21
|
import { onMessageUpdated } from '~/messageRepository/events/onMessageUpdated';
|
|
19
22
|
import { onMessageDeleted } from '~/messageRepository/events/onMessageDeleted';
|
|
20
23
|
import { onSubChannelUpdated } from '~/subChannelRepository/events/onSubChannelUpdated';
|
|
@@ -223,7 +226,32 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
|
223
226
|
// TODO: merge this code to another onMessageCreated in this file
|
|
224
227
|
fn: convertEventPayload(
|
|
225
228
|
(callback: Amity.Listener<Amity.Message>) => {
|
|
226
|
-
return
|
|
229
|
+
return onMessageCreatedMqtt(message => {
|
|
230
|
+
const cacheData = pullFromCache<Amity.Channel>([
|
|
231
|
+
'channel',
|
|
232
|
+
'get',
|
|
233
|
+
message.channelId,
|
|
234
|
+
])?.data;
|
|
235
|
+
|
|
236
|
+
if (!cacheData) return;
|
|
237
|
+
|
|
238
|
+
updateChannelCache(cacheData, {
|
|
239
|
+
lastActivity: message.createdAt,
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
callback(message);
|
|
243
|
+
});
|
|
244
|
+
},
|
|
245
|
+
'messageId',
|
|
246
|
+
'channel',
|
|
247
|
+
),
|
|
248
|
+
action: 'onUpdate',
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
// TODO: merge this code to another onMessageCreated in this file
|
|
252
|
+
fn: convertEventPayload(
|
|
253
|
+
(callback: Amity.Listener<Amity.Message>) => {
|
|
254
|
+
return onMessageCreatedLocal(message => {
|
|
227
255
|
const cacheData = pullFromCache<Amity.Channel>([
|
|
228
256
|
'channel',
|
|
229
257
|
'get',
|
|
@@ -285,7 +313,41 @@ export class ChannelLiveCollectionController extends LiveCollectionController<
|
|
|
285
313
|
callback(message);
|
|
286
314
|
};
|
|
287
315
|
|
|
288
|
-
return
|
|
316
|
+
return onMessageCreatedMqtt(updateMessagePreview);
|
|
317
|
+
},
|
|
318
|
+
|
|
319
|
+
'channelId',
|
|
320
|
+
'channel',
|
|
321
|
+
),
|
|
322
|
+
action: 'onUpdate',
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
fn: convertEventPayload(
|
|
326
|
+
(callback: Amity.Listener<Amity.Message>) => {
|
|
327
|
+
const updateMessagePreview = async (message: Amity.Message) => {
|
|
328
|
+
const messagePreviewSetting =
|
|
329
|
+
await ChannelLiveCollectionController.getMessagePreviewSetting();
|
|
330
|
+
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
331
|
+
|
|
332
|
+
handleMessageCreated(message);
|
|
333
|
+
|
|
334
|
+
if (this.shouldAbort(message.channelId)) return;
|
|
335
|
+
|
|
336
|
+
const channel = pullFromCache<Amity.Channel>([
|
|
337
|
+
'channel',
|
|
338
|
+
'get',
|
|
339
|
+
message.channelId,
|
|
340
|
+
])?.data;
|
|
341
|
+
if (!channel) return;
|
|
342
|
+
|
|
343
|
+
updateChannelCache(channel, {
|
|
344
|
+
messagePreviewId: message.messageId,
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
callback(message);
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
return onMessageCreatedLocal(updateMessagePreview);
|
|
289
351
|
},
|
|
290
352
|
|
|
291
353
|
'channelId',
|
|
@@ -12,9 +12,10 @@ import {
|
|
|
12
12
|
import { createEventEmitter } from '~/core/events';
|
|
13
13
|
|
|
14
14
|
import { getMessagePreviewSetting } from '~/client/utils/messagePreviewEngine';
|
|
15
|
+
import { getSocialSettings } from '~/client/api/getSocialSettings';
|
|
16
|
+
import { hasPermission } from '~/client/utils/hasPermission';
|
|
15
17
|
import { getActiveClient, setActiveClient } from './activeClient';
|
|
16
18
|
import { getFeedSettings } from './getFeedSettings';
|
|
17
|
-
import { getSocialSettings } from '~/client/api/getSocialSettings';
|
|
18
19
|
|
|
19
20
|
import { accessTokenExpiryWatcher } from './accessTokenExpiryWatcher';
|
|
20
21
|
|
|
@@ -96,6 +97,7 @@ export const createClient = (
|
|
|
96
97
|
accessTokenExpiryWatcher,
|
|
97
98
|
sessionHandler,
|
|
98
99
|
|
|
100
|
+
hasPermission,
|
|
99
101
|
getFeedSettings,
|
|
100
102
|
getSocialSettings,
|
|
101
103
|
getMessagePreviewSetting,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ASCError } from '~/core/errors';
|
|
2
2
|
import { getUserMarker } from '~/marker/api';
|
|
3
|
-
import {
|
|
3
|
+
import { onUserMarkerFetchedLegacy } from '~/marker/events';
|
|
4
4
|
import { liveObject } from '~/utils/liveObject';
|
|
5
5
|
|
|
6
6
|
import { getActiveUser } from '../api';
|
|
@@ -37,7 +37,17 @@ export const getTotalUnreadCount = (
|
|
|
37
37
|
|
|
38
38
|
const callbackDataSelector = (data: Amity.UserMarker | undefined) => data?.unreadCount ?? 0;
|
|
39
39
|
|
|
40
|
-
return liveObject(
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
return liveObject(
|
|
41
|
+
userId,
|
|
42
|
+
callback,
|
|
43
|
+
'userId',
|
|
44
|
+
async (): Promise<Amity.Cached<Amity.UserMarker>> => {
|
|
45
|
+
const { data: userMarker, cachedAt } = await getUserMarker();
|
|
46
|
+
return { data: userMarker as Amity.UserMarker, cachedAt };
|
|
47
|
+
},
|
|
48
|
+
[onUserMarkerFetchedLegacy],
|
|
49
|
+
{
|
|
50
|
+
callbackDataSelector,
|
|
51
|
+
},
|
|
52
|
+
);
|
|
43
53
|
};
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { ASCError } from '~/core/errors';
|
|
1
|
+
import { ASCApiError, ASCError } from '~/core/errors';
|
|
2
2
|
import { getUserMarker } from '~/marker/api';
|
|
3
3
|
import { onUserMarkerFetched } from '~/marker/events';
|
|
4
|
-
import { liveObject } from '~/utils/liveObject';
|
|
5
4
|
|
|
6
|
-
import { getActiveUser } from '../api';
|
|
5
|
+
import { getActiveClient, getActiveUser } from '../api';
|
|
6
|
+
import { createQuery, runQuery } from '~/core/query';
|
|
7
|
+
import {
|
|
8
|
+
UNSYNCED_OBJECT_CACHED_AT_MESSAGE,
|
|
9
|
+
UNSYNCED_OBJECT_CACHED_AT_VALUE,
|
|
10
|
+
} from '~/utils/constants';
|
|
7
11
|
|
|
8
12
|
/**
|
|
9
13
|
*
|
|
@@ -34,14 +38,94 @@ export const getUserUnread = (
|
|
|
34
38
|
Amity.ErrorLevel.ERROR,
|
|
35
39
|
);
|
|
36
40
|
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
const { log, cache } = getActiveClient();
|
|
42
|
+
|
|
43
|
+
if (!cache) {
|
|
44
|
+
console.log('For using Live Object feature you need to enable Cache!');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const timestamp = Date.now();
|
|
48
|
+
log(`liveUserUnread(tmpid: ${timestamp}) > listen`);
|
|
49
|
+
|
|
50
|
+
const disposers: Amity.Unsubscriber[] = [];
|
|
51
|
+
|
|
52
|
+
let isUnsyncedModel = false; // for messages
|
|
53
|
+
|
|
54
|
+
const dispatcher = (data: Amity.LiveObject<Amity.UserMarker>) => {
|
|
55
|
+
const userUnread = data.data;
|
|
56
|
+
|
|
57
|
+
callback({
|
|
58
|
+
data: {
|
|
59
|
+
hasMentioned: userUnread.hasMentioned,
|
|
60
|
+
unreadCount: userUnread.unreadCount,
|
|
61
|
+
},
|
|
62
|
+
loading: data.loading,
|
|
63
|
+
error: data.error,
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const realtimeRouter = (userMarkers: Amity.UserMarker[]) => {
|
|
68
|
+
const filterUserMarkers = userMarkers.filter(userMarker => userId === userMarker.userId);
|
|
69
|
+
|
|
70
|
+
const latestUserMarker = filterUserMarkers.reduce((currentMaxUserMarker, userMarker) => {
|
|
71
|
+
if (
|
|
72
|
+
currentMaxUserMarker == null ||
|
|
73
|
+
new Date(userMarker.lastSyncAt).getTime() >
|
|
74
|
+
new Date(currentMaxUserMarker.lastSyncAt).getTime()
|
|
75
|
+
) {
|
|
76
|
+
return userMarker;
|
|
77
|
+
}
|
|
78
|
+
return currentMaxUserMarker;
|
|
79
|
+
}, null as Amity.UserMarker | null);
|
|
80
|
+
|
|
81
|
+
dispatcher({
|
|
82
|
+
loading: false,
|
|
83
|
+
data: {
|
|
84
|
+
unreadCount: latestUserMarker?.unreadCount ?? 0,
|
|
85
|
+
hasMentioned: filterUserMarkers.some(userMarker => !!userMarker.hasMentioned),
|
|
86
|
+
} as Amity.UserMarker,
|
|
87
|
+
});
|
|
42
88
|
};
|
|
43
89
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
90
|
+
function isAmityUserMarkerData(data: unknown): data is Amity.UserMarker {
|
|
91
|
+
if (data == null) return false;
|
|
92
|
+
return (data as { data: Amity.UserMarker }).data != null;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const onFetch = () => {
|
|
96
|
+
const query = createQuery(getUserMarker);
|
|
97
|
+
|
|
98
|
+
runQuery(query, ({ error, data, loading, origin, cachedAt }) => {
|
|
99
|
+
if (!isAmityUserMarkerData(data)) return;
|
|
100
|
+
if (cachedAt === UNSYNCED_OBJECT_CACHED_AT_VALUE) {
|
|
101
|
+
dispatcher({
|
|
102
|
+
data,
|
|
103
|
+
origin,
|
|
104
|
+
loading: false,
|
|
105
|
+
error: new ASCApiError(
|
|
106
|
+
UNSYNCED_OBJECT_CACHED_AT_MESSAGE,
|
|
107
|
+
Amity.ClientError.DISALOOW_UNSYNCED_OBJECT,
|
|
108
|
+
Amity.ErrorLevel.ERROR,
|
|
109
|
+
),
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
isUnsyncedModel = true;
|
|
113
|
+
disposers.forEach(fn => fn());
|
|
114
|
+
} else if (!isUnsyncedModel) {
|
|
115
|
+
dispatcher({ loading, data, origin, error });
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (error) {
|
|
119
|
+
disposers.forEach(fn => fn());
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
disposers.push(onUserMarkerFetched(userMarkers => realtimeRouter(userMarkers)));
|
|
125
|
+
|
|
126
|
+
onFetch();
|
|
127
|
+
|
|
128
|
+
return () => {
|
|
129
|
+
disposers.forEach(fn => fn());
|
|
130
|
+
};
|
|
47
131
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { pullFromCache } from '~/cache/api';
|
|
2
|
+
import { checkUserPermission } from './checkUserPermission';
|
|
3
|
+
|
|
4
|
+
export const checkChannelPermission = (
|
|
5
|
+
userId: Amity.User['userId'] | undefined,
|
|
6
|
+
permission: string,
|
|
7
|
+
channelId: Amity.Channel['channelId'],
|
|
8
|
+
) => {
|
|
9
|
+
if (!userId) return false;
|
|
10
|
+
|
|
11
|
+
const member = pullFromCache<Amity.Membership<'channel'>>([
|
|
12
|
+
'channelUsers',
|
|
13
|
+
'get',
|
|
14
|
+
`${channelId}#${userId}`,
|
|
15
|
+
])?.data;
|
|
16
|
+
|
|
17
|
+
if (!member) return false;
|
|
18
|
+
|
|
19
|
+
if (member.permissions.some(x => x === permission)) return true;
|
|
20
|
+
|
|
21
|
+
return checkUserPermission(userId, permission);
|
|
22
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { pullFromCache } from '~/cache/api';
|
|
2
|
+
import { checkUserPermission } from './checkUserPermission';
|
|
3
|
+
|
|
4
|
+
export const checkCommunityPermission = (
|
|
5
|
+
userId: Amity.User['userId'] | undefined,
|
|
6
|
+
permission: string,
|
|
7
|
+
communityId: Amity.Community['communityId'],
|
|
8
|
+
) => {
|
|
9
|
+
if (!userId) return false;
|
|
10
|
+
|
|
11
|
+
const member = pullFromCache<Amity.Membership<'community'>>([
|
|
12
|
+
'communityUsers',
|
|
13
|
+
'get',
|
|
14
|
+
`${communityId}#${userId}`,
|
|
15
|
+
])?.data;
|
|
16
|
+
|
|
17
|
+
if (!member) return false;
|
|
18
|
+
|
|
19
|
+
if (member.permissions.some(x => x === permission)) return true;
|
|
20
|
+
|
|
21
|
+
return checkUserPermission(userId, permission);
|
|
22
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { pullFromCache } from '~/cache/api';
|
|
2
|
+
|
|
3
|
+
export const checkUserPermission = (
|
|
4
|
+
userId: Amity.User['userId'] | undefined,
|
|
5
|
+
permission: string,
|
|
6
|
+
) => {
|
|
7
|
+
const user = pullFromCache<Amity.User>(['users', 'get', userId])?.data;
|
|
8
|
+
|
|
9
|
+
if (!user) return false;
|
|
10
|
+
|
|
11
|
+
return user.permissions.some(x => x === permission);
|
|
12
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getActiveClient } from '~/client/api/activeClient';
|
|
2
|
+
import { checkCommunityPermission } from '~/client/utils/hasPermission/checkCommunityPermission';
|
|
3
|
+
import { checkChannelPermission } from '~/client/utils/hasPermission/checkChannelPermission';
|
|
4
|
+
import { checkUserPermission } from '~/client/utils/hasPermission/checkUserPermission';
|
|
5
|
+
|
|
6
|
+
export const hasPermission = (permission: string) => {
|
|
7
|
+
const { userId } = getActiveClient();
|
|
8
|
+
|
|
9
|
+
return {
|
|
10
|
+
currentUser: () => checkUserPermission(userId, permission),
|
|
11
|
+
|
|
12
|
+
community: (communityId: Amity.Community['communityId']) =>
|
|
13
|
+
checkCommunityPermission(userId, permission, communityId),
|
|
14
|
+
|
|
15
|
+
channel: (channelId: Amity.Channel['channelId']) =>
|
|
16
|
+
checkChannelPermission(userId, permission, channelId),
|
|
17
|
+
};
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './hasPermission';
|