@amityco/ts-sdk 6.17.3-e382dbe.0 → 6.18.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/.env +26 -26
- package/dist/@types/domains/client.d.ts +1 -1
- package/dist/@types/domains/client.d.ts.map +1 -1
- package/dist/@types/domains/community.d.ts +1 -3
- package/dist/@types/domains/community.d.ts.map +1 -1
- package/dist/@types/domains/story.d.ts +3 -3
- package/dist/@types/domains/story.d.ts.map +1 -1
- package/dist/client/api/accessTokenExpiryWatcher.d.ts +1 -1
- package/dist/client/api/accessTokenExpiryWatcher.d.ts.map +1 -1
- package/dist/client/api/login.d.ts.map +1 -1
- package/dist/client/api/renewal.d.ts.map +1 -1
- package/dist/client/utils/setClientToken.d.ts.map +1 -1
- package/dist/index.cjs.js +35 -26
- package/dist/index.esm.js +35 -26
- package/dist/index.umd.js +2 -2
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.d.ts.map +1 -1
- package/dist/storyRepository/utils/StoryComputedValue.d.ts +0 -2
- package/dist/storyRepository/utils/StoryComputedValue.d.ts.map +1 -1
- package/dist/storyRepository/utils/convertStoryPayloadToRaw.d.ts.map +1 -1
- package/dist/utils/linkedObject/storyTargetLinkedObject.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/@types/domains/client.ts +1 -5
- package/src/@types/domains/community.ts +2 -3
- package/src/@types/domains/story.ts +5 -3
- package/src/client/api/accessTokenExpiryWatcher.ts +7 -2
- package/src/client/api/login.ts +1 -5
- package/src/client/api/renewal.ts +2 -5
- package/src/client/utils/setClientToken.ts +0 -2
- package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts +7 -8
- package/src/storyRepository/utils/StoryComputedValue.ts +0 -8
- package/src/storyRepository/utils/convertStoryPayloadToRaw.ts +23 -0
- package/src/utils/linkedObject/storyTargetLinkedObject.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalStoryLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAU1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAQxE,qBAAa,mCAAoC,SAAQ,wBAAwB,CAC/E,iBAAiB,EACjB,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,WAAW,EACjB,yBAAyB,CAC1B;IACC,OAAO,CAAC,qBAAqB,CAAmC;IAEhE,OAAO,CAAC,KAAK,CAAyB;gBAGpC,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAC7B,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;IAsB3D,SAAS,CAAC,KAAK;IAUf,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,sBAAsB;IAI7D,SAAS,CAAC,kBAAkB,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,KAAK,CAAC,sCAAsC,CAAC,iBAAiB,CAAC;IAIlE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,0BAA0B;
|
|
1
|
+
{"version":3,"file":"GlobalStoryLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAU1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAQxE,qBAAa,mCAAoC,SAAQ,wBAAwB,CAC/E,iBAAiB,EACjB,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,WAAW,EACjB,yBAAyB,CAC1B;IACC,OAAO,CAAC,qBAAqB,CAAmC;IAEhE,OAAO,CAAC,KAAK,CAAyB;gBAGpC,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAC7B,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;IAsB3D,SAAS,CAAC,KAAK;IAUf,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,sBAAsB;IAI7D,SAAS,CAAC,kBAAkB,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,KAAK,CAAC,sCAAsC,CAAC,iBAAiB,CAAC;IAIlE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,0BAA0B;IA6BzE,OAAO,CAAC,WAAW;IAkCnB,iBAAiB;CAalB"}
|
|
@@ -5,7 +5,6 @@ export declare class StoryComputedValue {
|
|
|
5
5
|
private cacheStoryExpireTime?;
|
|
6
6
|
private cacheStoreSeenTime?;
|
|
7
7
|
private _syncingStoriesCount;
|
|
8
|
-
private _syncedStoriesCount;
|
|
9
8
|
private _errorStoriesCount;
|
|
10
9
|
constructor(targetId: string, lastStoryExpiresAt?: Amity.timestamp, lastStorySeenExpiresAt?: Amity.timestamp);
|
|
11
10
|
get lastStoryExpiresAt(): number;
|
|
@@ -16,7 +15,6 @@ export declare class StoryComputedValue {
|
|
|
16
15
|
getLocalLastSortingDate(): number;
|
|
17
16
|
getHasUnseenFlag(): boolean;
|
|
18
17
|
getTotalStoryByStatus(): void;
|
|
19
|
-
get syncedStoriesCount(): number;
|
|
20
18
|
get syncingStoriesCount(): number;
|
|
21
19
|
get failedStoriesCount(): number;
|
|
22
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoryComputedValue.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/utils/StoryComputedValue.ts"],"names":[],"mappings":"AAGA,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAkB;IAEvD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAkB;IAE3D,OAAO,CAAC,oBAAoB,CAAC,CAAgC;IAE7D,OAAO,CAAC,kBAAkB,CAAC,CAAgC;IAE3D,OAAO,CAAC,oBAAoB,CAAK;IAEjC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"StoryComputedValue.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/utils/StoryComputedValue.ts"],"names":[],"mappings":"AAGA,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAkB;IAEvD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAkB;IAE3D,OAAO,CAAC,oBAAoB,CAAC,CAAgC;IAE7D,OAAO,CAAC,kBAAkB,CAAC,CAAgC;IAE3D,OAAO,CAAC,oBAAoB,CAAK;IAEjC,OAAO,CAAC,kBAAkB,CAAK;gBAG7B,QAAQ,EAAE,MAAM,EAChB,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,EACpC,sBAAsB,CAAC,EAAE,KAAK,CAAC,SAAS;IAqB1C,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,IAAI,qBAAqB,IAAI,MAAM,CAIlC;IAED,IAAI,2BAA2B,IAAI,MAAM,CAExC;IAED,IAAI,sBAAsB,IAAI,OAAO,CASpC;IAED,uBAAuB,IAAI,MAAM;IAQjC,gBAAgB,IAAI,OAAO;IAiB3B,qBAAqB,IAAI,IAAI;IAgC7B,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,kBAAkB,IAAI,MAAM,CAE/B;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertStoryPayloadToRaw.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/utils/convertStoryPayloadToRaw.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convertStoryPayloadToRaw.d.ts","sourceRoot":"","sources":["../../../src/storyRepository/utils/convertStoryPayloadToRaw.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB,YAC1B,MAAM,kBAAkB,KAChC,MAAM,0BA0DR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storyTargetLinkedObject.d.ts","sourceRoot":"","sources":["../../../src/utils/linkedObject/storyTargetLinkedObject.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB,gBAAiB,MAAM,cAAc,KAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"storyTargetLinkedObject.d.ts","sourceRoot":"","sources":["../../../src/utils/linkedObject/storyTargetLinkedObject.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB,gBAAiB,MAAM,cAAc,KAAG,MAAM,WAgCjF,CAAC"}
|
package/package.json
CHANGED
|
@@ -58,11 +58,7 @@ declare global {
|
|
|
58
58
|
|
|
59
59
|
use: () => void;
|
|
60
60
|
|
|
61
|
-
accessTokenExpiryWatcher: (
|
|
62
|
-
expiresAt: Amity.Tokens['expiresAt'],
|
|
63
|
-
issuedAt: Amity.Tokens['issuedAt'],
|
|
64
|
-
sessionHandler: Amity.SessionHandler,
|
|
65
|
-
) => Amity.Unsubscriber;
|
|
61
|
+
accessTokenExpiryWatcher: (sessionHandler: Amity.SessionHandler) => Amity.Unsubscriber;
|
|
66
62
|
|
|
67
63
|
getFeedSettings: () => Promise<Amity.FeedSettings>;
|
|
68
64
|
getSocialSettings: () => Promise<Amity.SocialSettings>;
|
|
@@ -61,6 +61,8 @@ declare global {
|
|
|
61
61
|
|
|
62
62
|
hasFlaggedComment: boolean;
|
|
63
63
|
hasFlaggedPost: boolean;
|
|
64
|
+
|
|
65
|
+
allowCommentInStory?: boolean;
|
|
64
66
|
} & Amity.Taggable &
|
|
65
67
|
Amity.Metadata &
|
|
66
68
|
Amity.Timestamps &
|
|
@@ -70,9 +72,6 @@ declare global {
|
|
|
70
72
|
type Community = Omit<Amity.RawCommunity, 'onlyAdminCanPost' | 'needApprovalOnPostCreation'> &
|
|
71
73
|
Amity.CommunityStorySettings & {
|
|
72
74
|
postSetting?: ValueOf<typeof CommunityPostSettings>;
|
|
73
|
-
storySetting?: {
|
|
74
|
-
enableComment: boolean;
|
|
75
|
-
};
|
|
76
75
|
};
|
|
77
76
|
|
|
78
77
|
type QueryCommunities = {
|
|
@@ -48,12 +48,14 @@ declare global {
|
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
type RawStoryTarget = {
|
|
51
|
-
lastStoryExpiresAt?: Amity.timestamp;
|
|
52
|
-
lastStorySeenExpiresAt?: Amity.timestamp;
|
|
53
51
|
targetId: string;
|
|
54
52
|
targetType: string;
|
|
55
53
|
targetPublicId: string;
|
|
56
54
|
targetUpdatedAt: Amity.timestamp;
|
|
55
|
+
|
|
56
|
+
lastStoryExpiresAt?: Amity.timestamp;
|
|
57
|
+
lastStorySeenExpiresAt?: Amity.timestamp;
|
|
58
|
+
|
|
57
59
|
localFilter?: Amity.StorySeenQuery;
|
|
58
60
|
};
|
|
59
61
|
|
|
@@ -82,7 +84,6 @@ declare global {
|
|
|
82
84
|
localSortingDate: number;
|
|
83
85
|
localFilter?: Amity.StorySeenQuery;
|
|
84
86
|
|
|
85
|
-
syncedStoriesCount: number;
|
|
86
87
|
syncingStoriesCount: number;
|
|
87
88
|
failedStoriesCount: number;
|
|
88
89
|
};
|
|
@@ -119,6 +120,7 @@ declare global {
|
|
|
119
120
|
markAsSeen: () => void;
|
|
120
121
|
markLinkAsClicked: () => void;
|
|
121
122
|
};
|
|
123
|
+
creator?: Amity.User;
|
|
122
124
|
storyTarget?: Amity.StoryTarget;
|
|
123
125
|
community?: Amity.Community;
|
|
124
126
|
communityCategories?: Amity.Category[];
|
|
@@ -3,6 +3,7 @@ import { scheduleTask } from '~/core/microtasks';
|
|
|
3
3
|
import { MINUTE, ACCESS_TOKEN_WATCHER_INTERVAL } from '~/utils/constants';
|
|
4
4
|
|
|
5
5
|
import { renewal } from './renewal';
|
|
6
|
+
import { getActiveClient } from './activeClient';
|
|
6
7
|
|
|
7
8
|
const ABOUT_TO_EXPIRE_THRESHOLD = 80 / 100;
|
|
8
9
|
const COMPENSATED_DELAY = 5 * MINUTE;
|
|
@@ -50,11 +51,15 @@ export const isAboutToExpire = (params: {
|
|
|
50
51
|
* @category private
|
|
51
52
|
*/
|
|
52
53
|
export const accessTokenExpiryWatcher = (
|
|
53
|
-
expiresAt: Amity.Tokens['expiresAt'],
|
|
54
|
-
issuedAt: Amity.Tokens['issuedAt'],
|
|
55
54
|
sessionHandler: Amity.SessionHandler,
|
|
56
55
|
): Amity.Unsubscriber => {
|
|
57
56
|
const interval: ReturnType<typeof setInterval> = setInterval(() => {
|
|
57
|
+
const client = getActiveClient();
|
|
58
|
+
|
|
59
|
+
if (!client.token) return;
|
|
60
|
+
|
|
61
|
+
const { issuedAt, expiresAt } = client.token;
|
|
62
|
+
|
|
58
63
|
if (isExpired(expiresAt)) {
|
|
59
64
|
/*
|
|
60
65
|
* the event handler will take care of updating session state
|
package/src/client/api/login.ts
CHANGED
|
@@ -132,11 +132,7 @@ export const login = async (
|
|
|
132
132
|
* Cannot push to subscriptions as watcher needs to continue working even if
|
|
133
133
|
* token expires
|
|
134
134
|
*/
|
|
135
|
-
unsubWatcher = client.accessTokenExpiryWatcher(
|
|
136
|
-
client.token?.expiresAt!,
|
|
137
|
-
client.token?.issuedAt!,
|
|
138
|
-
sessionHandler!,
|
|
139
|
-
);
|
|
135
|
+
unsubWatcher = client.accessTokenExpiryWatcher(sessionHandler);
|
|
140
136
|
|
|
141
137
|
setActiveUser(user);
|
|
142
138
|
} catch (error) {
|
|
@@ -35,14 +35,11 @@ export const renewal = (): Amity.AccessTokenRenewal => {
|
|
|
35
35
|
|
|
36
36
|
const params = { userId, displayName, authToken, deviceId };
|
|
37
37
|
|
|
38
|
-
if (client.sessionState === Amity.SessionStates.TOKEN_EXPIRED) {
|
|
39
|
-
|
|
40
|
-
await login(params, client.sessionHandler!);
|
|
38
|
+
if (client.sessionState === Amity.SessionStates.TOKEN_EXPIRED && client.sessionHandler) {
|
|
39
|
+
await login(params, client.sessionHandler);
|
|
41
40
|
} else {
|
|
42
41
|
// about to expire
|
|
43
42
|
|
|
44
|
-
// @ts-ignore: in that particular case, typing can be
|
|
45
|
-
// ignored since we enforce default values just before.
|
|
46
43
|
await refreshToken(params);
|
|
47
44
|
}
|
|
48
45
|
|
|
@@ -19,8 +19,6 @@ export const setClientToken = async (params: Parameters<typeof getToken>[0]) =>
|
|
|
19
19
|
// begin establishing session
|
|
20
20
|
setSessionState(Amity.SessionStates.ESTABLISHING);
|
|
21
21
|
|
|
22
|
-
// @ts-ignore: in that particular case, typing can be
|
|
23
|
-
// ignored since we enforce default values just before.
|
|
24
22
|
const { accessToken, users, expiresAt, issuedAt, refreshToken } = await getToken(params);
|
|
25
23
|
|
|
26
24
|
// manually setup the token for http transport
|
package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts
CHANGED
|
@@ -87,7 +87,11 @@ export class GlobalStoryLiveCollectionController extends LiveCollectionControlle
|
|
|
87
87
|
|
|
88
88
|
if (!this.shouldNotify(data) && origin === 'event') return;
|
|
89
89
|
|
|
90
|
-
data = this.applyFilter(data)
|
|
90
|
+
data = this.applyFilter(data)
|
|
91
|
+
// Remove internal fields
|
|
92
|
+
.map(
|
|
93
|
+
({ localFilter, localLastExpires, localLastSeen, localSortingDate, ...rest }) => rest,
|
|
94
|
+
) as Amity.StoryTarget[];
|
|
91
95
|
|
|
92
96
|
this.callback({
|
|
93
97
|
onNextPage: () => this.loadPage(false, Amity.LiveCollectionPageDirection.NEXT),
|
|
@@ -98,7 +102,7 @@ export class GlobalStoryLiveCollectionController extends LiveCollectionControlle
|
|
|
98
102
|
});
|
|
99
103
|
}
|
|
100
104
|
|
|
101
|
-
private applyFilter(data: Amity.StoryTarget[]) {
|
|
105
|
+
private applyFilter(data: Amity.StoryTarget[]): Amity.StoryTarget[] {
|
|
102
106
|
if (this.query.seenState !== Amity.StorySeenQuery.SMART) {
|
|
103
107
|
return data
|
|
104
108
|
.filter(({ hasUnseen }) => {
|
|
@@ -129,12 +133,7 @@ export class GlobalStoryLiveCollectionController extends LiveCollectionControlle
|
|
|
129
133
|
const sortedSeen = result.seen.sort(sortByLocalSortingDate) || [];
|
|
130
134
|
|
|
131
135
|
// Merge all status and remove internal fields
|
|
132
|
-
return sortedUnknown
|
|
133
|
-
.concat(sortedUnseen, sortedSeen)
|
|
134
|
-
.map(
|
|
135
|
-
({ localFilter, localLastExpires, localLastSeen, localSortingDate, ...rest }) =>
|
|
136
|
-
rest as Amity.StoryTarget,
|
|
137
|
-
);
|
|
136
|
+
return sortedUnknown.concat(sortedUnseen, sortedSeen);
|
|
138
137
|
}
|
|
139
138
|
|
|
140
139
|
startSubscription() {
|
|
@@ -14,8 +14,6 @@ export class StoryComputedValue {
|
|
|
14
14
|
|
|
15
15
|
private _syncingStoriesCount = 0;
|
|
16
16
|
|
|
17
|
-
private _syncedStoriesCount = 0;
|
|
18
|
-
|
|
19
17
|
private _errorStoriesCount = 0;
|
|
20
18
|
|
|
21
19
|
constructor(
|
|
@@ -101,7 +99,6 @@ export class StoryComputedValue {
|
|
|
101
99
|
|
|
102
100
|
if (!stories) {
|
|
103
101
|
this._errorStoriesCount = 0;
|
|
104
|
-
this._syncedStoriesCount = 0;
|
|
105
102
|
this._syncingStoriesCount = 0;
|
|
106
103
|
return;
|
|
107
104
|
}
|
|
@@ -126,14 +123,9 @@ export class StoryComputedValue {
|
|
|
126
123
|
);
|
|
127
124
|
|
|
128
125
|
this._errorStoriesCount = groupByType.error;
|
|
129
|
-
this._syncedStoriesCount = groupByType.synced;
|
|
130
126
|
this._syncingStoriesCount = groupByType.syncing;
|
|
131
127
|
}
|
|
132
128
|
|
|
133
|
-
get syncedStoriesCount(): number {
|
|
134
|
-
return this._syncedStoriesCount;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
129
|
get syncingStoriesCount(): number {
|
|
138
130
|
return this._syncingStoriesCount;
|
|
139
131
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { getActiveClient } from '~/client';
|
|
2
2
|
import { YEAR } from '~/utils/constants';
|
|
3
|
+
import { pullFromCache } from '~/cache/api';
|
|
4
|
+
import { STORY_KEY_CACHE } from '~/storyRepository/constants';
|
|
5
|
+
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
3
6
|
|
|
4
7
|
export const convertStoryPayloadToRaw = (
|
|
5
8
|
payload: Amity.StoryCreatePayload,
|
|
@@ -8,6 +11,26 @@ export const convertStoryPayloadToRaw = (
|
|
|
8
11
|
|
|
9
12
|
const now = new Date();
|
|
10
13
|
const expiresAt = now.getTime() + YEAR;
|
|
14
|
+
const expiresAtDate = new Date(expiresAt).toISOString();
|
|
15
|
+
|
|
16
|
+
let storyTarget = pullFromCache<Amity.RawStoryTarget>([
|
|
17
|
+
STORY_KEY_CACHE.STORY_TARGET,
|
|
18
|
+
'get',
|
|
19
|
+
payload.targetId,
|
|
20
|
+
])?.data;
|
|
21
|
+
|
|
22
|
+
if (!storyTarget) {
|
|
23
|
+
// Save mock story target to cache
|
|
24
|
+
storyTarget = {
|
|
25
|
+
targetType: payload.targetType,
|
|
26
|
+
targetId: payload.targetId,
|
|
27
|
+
lastStoryExpiresAt: expiresAtDate,
|
|
28
|
+
targetPublicId: payload.targetId,
|
|
29
|
+
targetUpdatedAt: now.toISOString(),
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
ingestInCache({ storyTargets: [storyTarget] });
|
|
33
|
+
}
|
|
11
34
|
|
|
12
35
|
return {
|
|
13
36
|
stories: [
|
|
@@ -24,7 +24,6 @@ export const storyTargetLinkedObject = (storyTarget: Amity.RawStoryTarget): Amit
|
|
|
24
24
|
|
|
25
25
|
// Additional data
|
|
26
26
|
hasUnseen: computedValue.getHasUnseenFlag(),
|
|
27
|
-
syncedStoriesCount: computedValue.syncedStoriesCount,
|
|
28
27
|
syncingStoriesCount: computedValue.syncingStoriesCount,
|
|
29
28
|
failedStoriesCount: computedValue.failedStoriesCount,
|
|
30
29
|
|