@stream-io/feeds-client 0.3.51 → 1.0.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/CHANGELOG.md +12 -0
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react-bindings.js +1 -1
- package/dist/es/index.mjs +15 -14
- package/dist/es/react-bindings.mjs +1 -1
- package/dist/{feeds-client-DeAqnd1a.mjs → feeds-client-B03y08Kq.mjs} +184 -67
- package/dist/feeds-client-B03y08Kq.mjs.map +1 -0
- package/dist/{feeds-client-B4zeBggL.js → feeds-client-tw63OGrd.js} +178 -61
- package/dist/feeds-client-tw63OGrd.js.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/types/activity-with-state-updates/activity-with-state-updates.d.ts.map +1 -1
- package/dist/types/feed/activity-filter.d.ts +11 -0
- package/dist/types/feed/activity-filter.d.ts.map +1 -0
- package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts +3 -2
- package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/activity/handle-activity-updated.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/comment/handle-comment-updated.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/follow/handle-follow-created.d.ts +2 -2
- package/dist/types/feed/event-handlers/follow/handle-follow-created.d.ts.map +1 -1
- package/dist/types/feed/feed.d.ts +17 -12
- package/dist/types/feed/feed.d.ts.map +1 -1
- package/dist/types/feeds-client/apply-new-activity-to-active-feeds.d.ts +4 -0
- package/dist/types/feeds-client/apply-new-activity-to-active-feeds.d.ts.map +1 -0
- package/dist/types/feeds-client/feeds-client.d.ts +6 -8
- package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.d.ts +15 -0
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/activity-with-state-updates/activity-with-state-updates.ts +8 -2
- package/src/feed/activity-filter.ts +44 -0
- package/src/feed/event-handlers/activity/handle-activity-added.ts +22 -8
- package/src/feed/event-handlers/activity/handle-activity-updated.ts +5 -1
- package/src/feed/event-handlers/comment/handle-comment-updated.ts +11 -10
- package/src/feed/event-handlers/follow/handle-follow-created.ts +18 -1
- package/src/feed/feed.ts +72 -21
- package/src/feeds-client/apply-new-activity-to-active-feeds.ts +9 -0
- package/src/feeds-client/feeds-client.ts +46 -28
- package/src/index.ts +1 -0
- package/src/types.ts +17 -0
- package/dist/feeds-client-B4zeBggL.js.map +0 -1
- package/dist/feeds-client-DeAqnd1a.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-with-state-updates.d.ts","sourceRoot":"","sources":["../../../src/activity-with-state-updates/activity-with-state-updates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAwB,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,EAAE,OAAO,CAChB,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC,CAC/D,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CAChE,SAAS,EACT,uBAAuB,CACxB,GAAG;IACA;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,uBAAuB,CAAC,EAAE,iBAAiB,CAAC;CAC7C,CAAC;AAEJ,qBAAa,wBAAwB;aAUjB,EAAE,EAAE,MAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAV9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1C,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,wBAAwB,CAAC,CAAa;IAC9C,OAAO,CAAC,aAAa,CAAC,CAGpB;gBAGgB,EAAE,EAAE,MAAM,EACT,WAAW,EAAE,WAAW,EACzC,EAAE,YAAY,EAAE,GAAE;QAAE,YAAY,CAAC,EAAE,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"activity-with-state-updates.d.ts","sourceRoot":"","sources":["../../../src/activity-with-state-updates/activity-with-state-updates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAwB,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,EAAE,OAAO,CAChB,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC,CAC/D,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CAChE,SAAS,EACT,uBAAuB,CACxB,GAAG;IACA;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,uBAAuB,CAAC,EAAE,iBAAiB,CAAC;CAC7C,CAAC;AAEJ,qBAAa,wBAAwB;aAUjB,EAAE,EAAE,MAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAV9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1C,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,wBAAwB,CAAC,CAAa;IAC9C,OAAO,CAAC,aAAa,CAAC,CAGpB;gBAGgB,EAAE,EAAE,MAAM,EACT,WAAW,EAAE,WAAW,EACzC,EAAE,YAAY,EAAE,GAAE;QAAE,YAAY,CAAC,EAAE,gBAAgB,CAAA;KAElD;IAiBH,IAAI,YAAY,kBAEf;IAED,IAAI,KAAK,aAER;IAED;;;;;OAKG;IACG,GAAG,CAAC,OAAO,GAAE,iBAAsB;IA6CzC,4BAA4B,CAC1B,OAAO,CAAC,EAAE,OAAO,CACf,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC,CAC/D;IAiBH,0BAA0B,CACxB,GAAG,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAQ3D,OAAO;IAKP;;OAEG;IACG,WAAW;IASjB,OAAO,CAAC,OAAO;IAuBf,OAAO,CAAC,oBAAoB;CAkB7B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ActivityResponse, GetOrCreateFeedRequest } from '../gen/models';
|
|
2
|
+
/**
|
|
3
|
+
* Returns true if the activity matches the feed's getOrCreate filter (e.g. filter_tags, activity_type, within_bounds).
|
|
4
|
+
* Use this inside onNewActivity to only add activities that match the current feed filter.
|
|
5
|
+
*
|
|
6
|
+
* @param activity - The activity to check
|
|
7
|
+
* @param requestConfig - The last getOrCreate request config (contains the filter). If omitted or filter is empty, returns true.
|
|
8
|
+
* @returns true if the activity matches the filter or there is no filter
|
|
9
|
+
*/
|
|
10
|
+
export declare function activityFilter(activity: ActivityResponse, requestConfig?: GetOrCreateFeedRequest): boolean;
|
|
11
|
+
//# sourceMappingURL=activity-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-filter.d.ts","sourceRoot":"","sources":["../../../src/feed/activity-filter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAsB9E;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,CAAC,EAAE,sBAAsB,GACrC,OAAO,CAST"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Feed } from '../../feed';
|
|
2
2
|
import type { ActivityResponse } from '../../../gen/models';
|
|
3
3
|
import type { EventPayload } from '../../../types-internal';
|
|
4
|
-
export declare function addActivitiesToState(this: Feed, newActivities: ActivityResponse[], activities: ActivityResponse[] | undefined, position: 'start' | 'end', {
|
|
5
|
-
|
|
4
|
+
export declare function addActivitiesToState(this: Feed, newActivities: ActivityResponse[], activities: ActivityResponse[] | undefined, position: 'start' | 'end', { hasOwnFields, backfillOwnFields, }?: {
|
|
5
|
+
hasOwnFields: boolean;
|
|
6
|
+
backfillOwnFields: boolean;
|
|
6
7
|
}): {
|
|
7
8
|
changed: boolean;
|
|
8
9
|
activities: ActivityResponse[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-activity-added.d.ts","sourceRoot":"","sources":["../../../../../src/feed/event-handlers/activity/handle-activity-added.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,gBAAgB,EAAE,EACjC,UAAU,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAC1C,QAAQ,EAAE,OAAO,GAAG,KAAK,EACzB,
|
|
1
|
+
{"version":3,"file":"handle-activity-added.d.ts","sourceRoot":"","sources":["../../../../../src/feed/event-handlers/activity/handle-activity-added.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,gBAAgB,EAAE,EACjC,UAAU,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAC1C,QAAQ,EAAE,OAAO,GAAG,KAAK,EACzB,EACE,YAAY,EACZ,iBAAiB,GAClB,GAAE;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAA;CAGrD;;;EAoCF;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,YAAY,CAAC,sBAAsB,CAAC,QAyB5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-activity-updated.d.ts","sourceRoot":"","sources":["../../../../../src/feed/event-handlers/activity/handle-activity-updated.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAS9E,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CACnD,YAAY,CAAC,wBAAwB,CAAC,EACtC,UAAU,CACX,CAAC;AAIF,eAAO,MAAM,qBAAqB,GAChC,OAAO,sBAAsB,EAC7B,YAAY,gBAAgB,EAAE,GAAG,SAAS;;;CAUxC,CAAC;AAEL,eAAO,MAAM,2BAA2B,GACtC,OAAO,sBAAsB,EAC7B,kBAAkB,mBAAmB,EAAE,GAAG,SAAS;;;CAqBjD,CAAC;AAEL,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,sBAAsB,EAC/B,MAAM,CAAC,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"handle-activity-updated.d.ts","sourceRoot":"","sources":["../../../../../src/feed/event-handlers/activity/handle-activity-updated.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAS9E,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CACnD,YAAY,CAAC,wBAAwB,CAAC,EACtC,UAAU,CACX,CAAC;AAIF,eAAO,MAAM,qBAAqB,GAChC,OAAO,sBAAsB,EAC7B,YAAY,gBAAgB,EAAE,GAAG,SAAS;;;CAUxC,CAAC;AAEL,eAAO,MAAM,2BAA2B,GACtC,OAAO,sBAAsB,EAC7B,kBAAkB,mBAAmB,EAAE,GAAG,SAAS;;;CAqBjD,CAAC;AAEL,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,sBAAsB,EAC/B,MAAM,CAAC,EAAE,OAAO,QAwCjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-comment-updated.d.ts","sourceRoot":"","sources":["../../../../../src/feed/event-handlers/comment/handle-comment-updated.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"handle-comment-updated.d.ts","sourceRoot":"","sources":["../../../../../src/feed/event-handlers/comment/handle-comment-updated.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAClD,YAAY,CAAC,uBAAuB,CAAC,EACrC,SAAS,CACV,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,qBAAqB,EAC9B,MAAM,CAAC,EAAE,OAAO,QA+CjB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Feed, FeedState } from '../../feed';
|
|
2
2
|
import type { FollowResponse } from '../../../gen/models';
|
|
3
3
|
import type { EventPayload, PartializeAllBut, UpdateStateResult } from '../../../types-internal';
|
|
4
|
-
export declare const updateStateFollowCreated: (follow: FollowResponse, currentState: FeedState, currentFeedId: string, connectedUserId?: string) => UpdateStateResult<{
|
|
4
|
+
export declare const updateStateFollowCreated: (follow: FollowResponse, currentState: FeedState, currentFeedId: string, connectedUserId?: string, hasOwnFields?: boolean) => UpdateStateResult<{
|
|
5
5
|
data: FeedState;
|
|
6
6
|
}>;
|
|
7
|
-
export declare function handleFollowCreated(this: Feed, eventOrResponse: PartializeAllBut<EventPayload<'feeds.follow.created'>, 'follow'>, fromWs?: boolean): void;
|
|
7
|
+
export declare function handleFollowCreated(this: Feed, eventOrResponse: PartializeAllBut<EventPayload<'feeds.follow.created'>, 'follow'>, fromWs?: boolean, hasOwnFields?: boolean): void;
|
|
8
8
|
//# sourceMappingURL=handle-follow-created.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-follow-created.d.ts","sourceRoot":"","sources":["../../../../../src/feed/event-handlers/follow/handle-follow-created.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAGjC,eAAO,MAAM,wBAAwB,GACnC,QAAQ,cAAc,EACtB,cAAc,SAAS,EACvB,eAAe,MAAM,EACrB,kBAAkB,MAAM,
|
|
1
|
+
{"version":3,"file":"handle-follow-created.d.ts","sourceRoot":"","sources":["../../../../../src/feed/event-handlers/follow/handle-follow-created.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAGjC,eAAO,MAAM,wBAAwB,GACnC,QAAQ,cAAc,EACtB,cAAc,SAAS,EACvB,eAAe,MAAM,EACrB,kBAAkB,MAAM,EACxB,sBAAoB,KACnB,iBAAiB,CAAC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CA2DvC,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,gBAAgB,CAC/B,YAAY,CAAC,sBAAsB,CAAC,EACpC,QAAQ,CACT,EACD,MAAM,CAAC,EAAE,OAAO,EAChB,YAAY,UAAQ,QA4BrB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { ActivityRequest, FeedResponse, GetOrCreateFeedRequest, GetOrCreateFeedResponse, QueryFollowsRequest, WSEvent, ActivityResponse, CommentResponse, QueryFeedMembersRequest, SortParamRequest, FollowRequest, QueryCommentsRequest
|
|
1
|
+
import type { ActivityRequest, FeedResponse, GetOrCreateFeedRequest, GetOrCreateFeedResponse, QueryFollowsRequest, WSEvent, ActivityResponse, CommentResponse, QueryFeedMembersRequest, SortParamRequest, FollowRequest, QueryCommentsRequest } from '../gen/models';
|
|
2
2
|
import type { StreamResponse } from '../gen-imports';
|
|
3
3
|
import { StateStore } from '@stream-io/state-store';
|
|
4
4
|
import { EventDispatcher } from '../common/EventDispatcher';
|
|
5
5
|
import { FeedApi } from '../gen/feeds/FeedApi';
|
|
6
6
|
import type { FeedsClient } from '../feeds-client';
|
|
7
|
-
import type { ActivityIdOrCommentId, GetCommentsRepliesRequest, GetCommentsRequest, LoadingStates, PagerResponseWithLoadingStates } from '../types';
|
|
7
|
+
import type { ActivityIdOrCommentId, ConnectedUser, GetCommentsRepliesRequest, GetCommentsRequest, LoadingStates, OnNewActivityCallback, OnNewActivityResult, PagerResponseWithLoadingStates } from '../types';
|
|
8
8
|
export type FeedState = Omit<Partial<GetOrCreateFeedResponse & FeedResponse>, 'feed' | 'duration'> & {
|
|
9
9
|
/**
|
|
10
10
|
* True when loading state using `getOrCreate`
|
|
@@ -68,14 +68,9 @@ export type FeedState = Omit<Partial<GetOrCreateFeedResponse & FeedResponse>, 'f
|
|
|
68
68
|
* `true` if the feed is receiving real-time updates via WebSocket
|
|
69
69
|
*/
|
|
70
70
|
watch: boolean;
|
|
71
|
-
/**
|
|
72
|
-
* When a new activity is received from a WebSocket event by default it's added to the start of the list. You can change this to `end` to add it to the end of the list.
|
|
73
|
-
* Useful for story feeds.
|
|
74
|
-
*/
|
|
75
|
-
addNewActivitiesTo: 'start' | 'end';
|
|
76
71
|
};
|
|
77
72
|
export declare class Feed extends FeedApi {
|
|
78
|
-
|
|
73
|
+
onNewActivity?: OnNewActivityCallback | undefined;
|
|
79
74
|
readonly state: StateStore<FeedState>;
|
|
80
75
|
private static readonly noop;
|
|
81
76
|
protected indexedActivityIds: Set<string>;
|
|
@@ -83,13 +78,17 @@ export declare class Feed extends FeedApi {
|
|
|
83
78
|
private readonly eventHandlers;
|
|
84
79
|
protected eventDispatcher: EventDispatcher<WSEvent['type'], WSEvent>;
|
|
85
80
|
private inProgressGetOrCreate?;
|
|
86
|
-
constructor(client: FeedsClient, groupId: 'user' | 'timeline' | (string & {}), id: string, data?: FeedResponse, watch?: boolean,
|
|
81
|
+
constructor(client: FeedsClient, groupId: 'user' | 'timeline' | (string & {}), id: string, data?: FeedResponse, watch?: boolean, onNewActivity?: OnNewActivityCallback | undefined);
|
|
87
82
|
protected readonly client: FeedsClient;
|
|
88
83
|
get feed(): string;
|
|
89
84
|
get currentState(): FeedState;
|
|
90
|
-
set addNewActivitiesTo(value: 'start' | 'end');
|
|
91
85
|
hasActivity(activityId: string): boolean;
|
|
92
86
|
hasPinnedActivity(activityId: string): boolean | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Resolves how to handle a new activity (WS or HTTP): ignore, add-to-start, or add-to-end.
|
|
89
|
+
* Uses onNewActivity if set; else default (current user + filter match) adds to start.
|
|
90
|
+
*/
|
|
91
|
+
protected resolveNewActivityDecision(activity: ActivityResponse, currentUser: ConnectedUser | undefined, _fromHttp: boolean): OnNewActivityResult;
|
|
93
92
|
synchronize(): Promise<void>;
|
|
94
93
|
getOrCreate(request?: GetOrCreateFeedRequest): Promise<StreamResponse<GetOrCreateFeedResponse>>;
|
|
95
94
|
/**
|
|
@@ -129,12 +128,18 @@ export declare class Feed extends FeedApi {
|
|
|
129
128
|
* @returns The response from the API or `undefined` if there is no next page.
|
|
130
129
|
*/
|
|
131
130
|
getNextPage(): Promise<StreamResponse<GetOrCreateFeedResponse> | undefined>;
|
|
131
|
+
/**
|
|
132
|
+
* Applies a new activity to this feed's state (decision + add to activities).
|
|
133
|
+
* Used when the activity was added via this feed's addActivity or via client.addActivity.
|
|
134
|
+
*/
|
|
135
|
+
protected addActivityFromHTTPResponse(activity: ActivityResponse): void;
|
|
132
136
|
addActivity(request: Omit<ActivityRequest, 'feeds'>): Promise<StreamResponse<import("..").AddActivityResponse>>;
|
|
133
137
|
on: (eventName: "all" | "app.updated" | "feeds.activity.added" | "feeds.activity.deleted" | "feeds.activity.feedback" | "feeds.activity.marked" | "feeds.activity.pinned" | "feeds.activity.reaction.added" | "feeds.activity.reaction.deleted" | "feeds.activity.reaction.updated" | "feeds.activity.removed_from_feed" | "feeds.activity.restored" | "feeds.activity.unpinned" | "feeds.activity.updated" | "feeds.bookmark.added" | "feeds.bookmark.deleted" | "feeds.bookmark.updated" | "feeds.bookmark_folder.deleted" | "feeds.bookmark_folder.updated" | "feeds.comment.added" | "feeds.comment.deleted" | "feeds.comment.reaction.added" | "feeds.comment.reaction.deleted" | "feeds.comment.reaction.updated" | "feeds.comment.updated" | "feeds.feed.created" | "feeds.feed.deleted" | "feeds.feed.updated" | "feeds.feed_group.changed" | "feeds.feed_group.deleted" | "feeds.feed_group.restored" | "feeds.feed_member.added" | "feeds.feed_member.removed" | "feeds.feed_member.updated" | "feeds.follow.created" | "feeds.follow.deleted" | "feeds.follow.updated" | "feeds.notification_feed.updated" | "feeds.poll.closed" | "feeds.poll.deleted" | "feeds.poll.updated" | "feeds.poll.vote_casted" | "feeds.poll.vote_changed" | "feeds.poll.vote_removed" | "feeds.stories_feed.updated" | "health.check" | "moderation.custom_action" | "moderation.flagged" | "moderation.mark_reviewed" | "user.banned" | "user.deactivated" | "user.reactivated" | "user.unbanned" | "user.updated", handler: (event: WSEvent) => void) => () => void;
|
|
134
138
|
off: (eventName: "all" | "app.updated" | "feeds.activity.added" | "feeds.activity.deleted" | "feeds.activity.feedback" | "feeds.activity.marked" | "feeds.activity.pinned" | "feeds.activity.reaction.added" | "feeds.activity.reaction.deleted" | "feeds.activity.reaction.updated" | "feeds.activity.removed_from_feed" | "feeds.activity.restored" | "feeds.activity.unpinned" | "feeds.activity.updated" | "feeds.bookmark.added" | "feeds.bookmark.deleted" | "feeds.bookmark.updated" | "feeds.bookmark_folder.deleted" | "feeds.bookmark_folder.updated" | "feeds.comment.added" | "feeds.comment.deleted" | "feeds.comment.reaction.added" | "feeds.comment.reaction.deleted" | "feeds.comment.reaction.updated" | "feeds.comment.updated" | "feeds.feed.created" | "feeds.feed.deleted" | "feeds.feed.updated" | "feeds.feed_group.changed" | "feeds.feed_group.deleted" | "feeds.feed_group.restored" | "feeds.feed_member.added" | "feeds.feed_member.removed" | "feeds.feed_member.updated" | "feeds.follow.created" | "feeds.follow.deleted" | "feeds.follow.updated" | "feeds.notification_feed.updated" | "feeds.poll.closed" | "feeds.poll.deleted" | "feeds.poll.updated" | "feeds.poll.vote_casted" | "feeds.poll.vote_changed" | "feeds.poll.vote_removed" | "feeds.stories_feed.updated" | "health.check" | "moderation.custom_action" | "moderation.flagged" | "moderation.mark_reviewed" | "user.banned" | "user.deactivated" | "user.reactivated" | "user.unbanned" | "user.updated", handler: (event: WSEvent) => void) => void;
|
|
135
139
|
handleWSEvent(event: WSEvent): void;
|
|
136
|
-
protected
|
|
137
|
-
|
|
140
|
+
protected activitiesAddedOrUpdated(activities: ActivityResponse[], options?: {
|
|
141
|
+
hasOwnFields: boolean;
|
|
142
|
+
backfillOwnFields: boolean;
|
|
138
143
|
}): void;
|
|
139
144
|
private getOrCreateFeeds;
|
|
140
145
|
private shouldAddToActiveFeeds;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../../src/feed/feed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,eAAe,EAEf,uBAAuB,EACvB,gBAAgB,EAEhB,aAAa,EACb,oBAAoB,
|
|
1
|
+
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../../src/feed/feed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-new-activity-to-active-feeds.d.ts","sourceRoot":"","sources":["../../../src/feeds-client/apply-new-activity-to-active-feeds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,gBAAgB,GACzB,IAAI,CAEN"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FeedsApi } from '../gen/feeds/FeedsApi';
|
|
2
|
-
import type {
|
|
3
|
-
import type { ConnectedUser, FeedsEvent, StreamFile, TokenOrProvider } from '../types';
|
|
2
|
+
import type { ActivityResponse, AddActivityRequest, AddActivityResponse, AddCommentReactionRequest, AddCommentReactionResponse, AddCommentRequest, AddCommentResponse, AddReactionRequest, CastPollVoteRequest, CreateGuestResponse, DeleteActivityReactionResponse, DeleteCommentReactionResponse, DeleteCommentResponse, FeedResponse, FileUploadRequest, FollowBatchRequest, FollowRequest, GetFollowSuggestionsResponse, GetOrCreateFeedRequest, ImageUploadRequest, OwnBatchRequest, PollResponse, PollVoteResponse, PollVotesResponse, QueryFeedsRequest, QueryPollVotesRequest, UnfollowBatchRequest, UpdateActivityRequest, UpdateActivityResponse, UpdateCommentRequest, UpdateCommentResponse, UpdateFollowRequest, UpdatePollPartialRequest, UpdatePollRequest, UserRequest } from '../gen/models';
|
|
3
|
+
import type { ConnectedUser, FeedsEvent, OnNewActivityCallback, StreamFile, TokenOrProvider } from '../types';
|
|
4
4
|
import { StateStore } from '@stream-io/state-store';
|
|
5
5
|
import type { FeedsClientOptions, StreamResponse } from '../common/types';
|
|
6
6
|
import { ModerationClient } from '../moderation-client';
|
|
@@ -71,6 +71,7 @@ export declare class FeedsClient extends FeedsApi {
|
|
|
71
71
|
id: string;
|
|
72
72
|
}) => Promise<StreamResponse<UpdateCommentResponse>>;
|
|
73
73
|
deleteComment: (...args: Parameters<FeedsApi["deleteComment"]>) => Promise<StreamResponse<DeleteCommentResponse>>;
|
|
74
|
+
addActivity(request: AddActivityRequest): Promise<StreamResponse<AddActivityResponse>>;
|
|
74
75
|
addActivityReaction: (request: AddReactionRequest & {
|
|
75
76
|
activity_id: string;
|
|
76
77
|
}) => Promise<StreamResponse<import("..").AddReactionResponse>>;
|
|
@@ -108,13 +109,11 @@ export declare class FeedsClient extends FeedsApi {
|
|
|
108
109
|
* @param groupId for example `user`, `notification` or id of a custom feed group
|
|
109
110
|
* @param id
|
|
110
111
|
* @param options
|
|
111
|
-
* @param options.
|
|
112
|
-
* @param options.activityAddedEventFilter - a callback that is called when a new activity is received from a WebSocket event. You can use this to prevent the activity from being added to the feed. Useful for feed filtering, or if you don't want new activities to be added to the feed.
|
|
112
|
+
* @param options.onNewActivity - callback to control how new activities (WS or addActivity response) are added: 'add-to-start', 'add-to-end', or 'ignore'.
|
|
113
113
|
* @returns
|
|
114
114
|
*/
|
|
115
115
|
feed: (groupId: string, id: string, options?: {
|
|
116
|
-
|
|
117
|
-
activityAddedEventFilter?: (event: ActivityAddedEvent) => boolean;
|
|
116
|
+
onNewActivity?: OnNewActivityCallback;
|
|
118
117
|
}) => Feed;
|
|
119
118
|
/**
|
|
120
119
|
* If you want to get an activity with state updates outside of a feed, use this method.
|
|
@@ -171,8 +170,7 @@ export declare class FeedsClient extends FeedsApi {
|
|
|
171
170
|
data?: FeedResponse;
|
|
172
171
|
watch?: boolean;
|
|
173
172
|
options?: {
|
|
174
|
-
|
|
175
|
-
activityAddedEventFilter?: (event: ActivityAddedEvent) => boolean;
|
|
173
|
+
onNewActivity?: OnNewActivityCallback;
|
|
176
174
|
};
|
|
177
175
|
fieldsToUpdate: Array<"own_capabilities" | "own_follows" | "own_followings" | "own_membership">;
|
|
178
176
|
}) => Feed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feeds-client.d.ts","sourceRoot":"","sources":["../../../src/feeds-client/feeds-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAK,EACV,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"feeds-client.d.ts","sourceRoot":"","sources":["../../../src/feeds-client/feeds-client.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from '@stream-io/state-store';
|
|
2
2
|
export * from './feeds-client/feeds-client';
|
|
3
3
|
export * from './feed/feed';
|
|
4
|
+
export { activityFilter } from './feed/activity-filter';
|
|
4
5
|
export * from './gen/models';
|
|
5
6
|
export * from './types';
|
|
6
7
|
export * from './common/types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,2DAA2D,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,2DAA2D,CAAC"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -24,4 +24,19 @@ export type ConnectedUser = OwnUserResponse & {
|
|
|
24
24
|
name?: string;
|
|
25
25
|
image?: string;
|
|
26
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* Result of the onNewActivity callback: whether to add a new activity to the feed and where.
|
|
29
|
+
* - 'add-to-start': prepend to the activities list (e.g. new posts at top)
|
|
30
|
+
* - 'add-to-end': append to the activities list (e.g. stories)
|
|
31
|
+
* - 'ignore': do not add to the feed
|
|
32
|
+
*/
|
|
33
|
+
export type OnNewActivityResult = 'add-to-start' | 'add-to-end' | 'ignore';
|
|
34
|
+
/**
|
|
35
|
+
* Callback invoked when a new activity is received (WebSocket event or addActivity HTTP response).
|
|
36
|
+
* Return how the feed should handle it.
|
|
37
|
+
*/
|
|
38
|
+
export type OnNewActivityCallback = (params: {
|
|
39
|
+
activity: ActivityResponse;
|
|
40
|
+
currentUser: ConnectedUser | undefined;
|
|
41
|
+
}) => OnNewActivityResult;
|
|
27
42
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,sBAAsB,GACtB,mBAAmB,GACnB,mBAAmB,CAAC;AACxB,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAChD,WAAW,CAAC,mBAAmB,CAAC,CACjC,CAAC,CAAC,CAAC,CAAC;AAEL,MAAM,MAAM,8BAA8B,GAAG,aAAa,GAAG,aAAa,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,aAAa,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AAElD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,MAAM,UAAU,GAClB,OAAO,GACP,sBAAsB,GACtB,mBAAmB,GACnB,mBAAmB,CAAC;AACxB,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAChD,WAAW,CAAC,mBAAmB,CAAC,CACjC,CAAC,CAAC,CAAC,CAAC;AAEL,MAAM,MAAM,8BAA8B,GAAG,aAAa,GAAG,aAAa,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,aAAa,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AAElD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE3E;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE;IAC3C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,WAAW,EAAE,aAAa,GAAG,SAAS,CAAC;CACxC,KAAK,mBAAmB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/feeds-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"packageManager": "yarn@3.2.4",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/es/index.mjs",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"CHANGELOG.md"
|
|
51
51
|
],
|
|
52
52
|
"dependencies": {
|
|
53
|
+
"@stream-io/filter": "^1.0.0",
|
|
53
54
|
"@stream-io/logger": "^2.0.0",
|
|
54
55
|
"@stream-io/state-store": "^1.1.6",
|
|
55
56
|
"axios": "^1.7.7"
|
|
@@ -42,7 +42,9 @@ export class ActivityWithStateUpdates {
|
|
|
42
42
|
constructor(
|
|
43
43
|
public readonly id: string,
|
|
44
44
|
private readonly feedsClient: FeedsClient,
|
|
45
|
-
{ fromResponse }: { fromResponse?: ActivityResponse } = {
|
|
45
|
+
{ fromResponse }: { fromResponse?: ActivityResponse } = {
|
|
46
|
+
fromResponse: undefined,
|
|
47
|
+
},
|
|
46
48
|
) {
|
|
47
49
|
this.state = new StateStore<ActivityState>({
|
|
48
50
|
activity: undefined,
|
|
@@ -104,7 +106,7 @@ export class ActivityWithStateUpdates {
|
|
|
104
106
|
});
|
|
105
107
|
|
|
106
108
|
if (this.feed) {
|
|
107
|
-
this.feed.
|
|
109
|
+
this.feed.onNewActivity = () => 'ignore';
|
|
108
110
|
}
|
|
109
111
|
|
|
110
112
|
if (comments) {
|
|
@@ -177,6 +179,10 @@ export class ActivityWithStateUpdates {
|
|
|
177
179
|
[initialState],
|
|
178
180
|
[],
|
|
179
181
|
'start',
|
|
182
|
+
{
|
|
183
|
+
hasOwnFields: initialState.current_feed?.own_capabilities !== undefined,
|
|
184
|
+
backfillOwnFields: false,
|
|
185
|
+
},
|
|
180
186
|
);
|
|
181
187
|
this.feed?.state.partialNext({
|
|
182
188
|
activities,
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { itemMatchesFilter, resolveDotPathValue } from '@stream-io/filter';
|
|
2
|
+
import type { ActivityResponse, GetOrCreateFeedRequest } from '../gen/models';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Resolvers that map feed filter field names to activity properties.
|
|
6
|
+
* - activity_type: API filter key maps to activity.type
|
|
7
|
+
* - within_bounds: API filter key maps to activity.location (for bounds check)
|
|
8
|
+
*/
|
|
9
|
+
const activityResolvers = [
|
|
10
|
+
{
|
|
11
|
+
matchesField: (field: string) => field === 'activity_type',
|
|
12
|
+
resolve: (activity: ActivityResponse) => activity.type,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
matchesField: (field: string) => field === 'within_bounds',
|
|
16
|
+
resolve: (activity: ActivityResponse) => activity.location,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
matchesField: () => true,
|
|
20
|
+
resolve: (item: any, path: any) => resolveDotPathValue(item, path),
|
|
21
|
+
},
|
|
22
|
+
] as const;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Returns true if the activity matches the feed's getOrCreate filter (e.g. filter_tags, activity_type, within_bounds).
|
|
26
|
+
* Use this inside onNewActivity to only add activities that match the current feed filter.
|
|
27
|
+
*
|
|
28
|
+
* @param activity - The activity to check
|
|
29
|
+
* @param requestConfig - The last getOrCreate request config (contains the filter). If omitted or filter is empty, returns true.
|
|
30
|
+
* @returns true if the activity matches the filter or there is no filter
|
|
31
|
+
*/
|
|
32
|
+
export function activityFilter(
|
|
33
|
+
activity: ActivityResponse,
|
|
34
|
+
requestConfig?: GetOrCreateFeedRequest,
|
|
35
|
+
): boolean {
|
|
36
|
+
const filter = requestConfig?.filter;
|
|
37
|
+
if (!filter || typeof filter !== 'object') {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
return itemMatchesFilter(activity, filter, {
|
|
41
|
+
resolvers: [...activityResolvers],
|
|
42
|
+
arrayEqMode: 'contains',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
@@ -7,7 +7,13 @@ export function addActivitiesToState(
|
|
|
7
7
|
newActivities: ActivityResponse[],
|
|
8
8
|
activities: ActivityResponse[] | undefined,
|
|
9
9
|
position: 'start' | 'end',
|
|
10
|
-
{
|
|
10
|
+
{
|
|
11
|
+
hasOwnFields,
|
|
12
|
+
backfillOwnFields,
|
|
13
|
+
}: { hasOwnFields: boolean; backfillOwnFields: boolean } = {
|
|
14
|
+
hasOwnFields: true,
|
|
15
|
+
backfillOwnFields: true,
|
|
16
|
+
},
|
|
11
17
|
) {
|
|
12
18
|
if (activities === undefined) {
|
|
13
19
|
return {
|
|
@@ -34,7 +40,10 @@ export function addActivitiesToState(
|
|
|
34
40
|
...activities,
|
|
35
41
|
...(position === 'end' ? newActivitiesDeduplicated : []),
|
|
36
42
|
];
|
|
37
|
-
this.
|
|
43
|
+
this.activitiesAddedOrUpdated(newActivitiesDeduplicated, {
|
|
44
|
+
hasOwnFields,
|
|
45
|
+
backfillOwnFields,
|
|
46
|
+
});
|
|
38
47
|
|
|
39
48
|
result = { changed: true, activities: updatedActivities };
|
|
40
49
|
}
|
|
@@ -46,17 +55,22 @@ export function handleActivityAdded(
|
|
|
46
55
|
this: Feed,
|
|
47
56
|
event: EventPayload<'feeds.activity.added'>,
|
|
48
57
|
) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
const currentUser = this.client.state.getLatestValue().connected_user;
|
|
59
|
+
const decision = this.resolveNewActivityDecision(
|
|
60
|
+
event.activity,
|
|
61
|
+
currentUser,
|
|
62
|
+
false,
|
|
63
|
+
);
|
|
64
|
+
if (decision === 'ignore') {
|
|
65
|
+
return;
|
|
53
66
|
}
|
|
67
|
+
const position = decision === 'add-to-end' ? 'end' : 'start';
|
|
54
68
|
const currentActivities = this.currentState.activities;
|
|
55
69
|
const result = addActivitiesToState.bind(this)(
|
|
56
70
|
[event.activity],
|
|
57
71
|
currentActivities,
|
|
58
|
-
|
|
59
|
-
{
|
|
72
|
+
position,
|
|
73
|
+
{ hasOwnFields: false, backfillOwnFields: true },
|
|
60
74
|
);
|
|
61
75
|
if (result.changed) {
|
|
62
76
|
const activity = event.activity;
|
|
@@ -90,7 +90,11 @@ export function handleActivityUpdated(
|
|
|
90
90
|
];
|
|
91
91
|
|
|
92
92
|
if (result1?.changed || result2.changed) {
|
|
93
|
-
this.
|
|
93
|
+
this.activitiesAddedOrUpdated([payload.activity], {
|
|
94
|
+
hasOwnFields:
|
|
95
|
+
payload.activity.current_feed?.own_capabilities !== undefined,
|
|
96
|
+
backfillOwnFields: false,
|
|
97
|
+
});
|
|
94
98
|
|
|
95
99
|
this.state.partialNext({
|
|
96
100
|
activities: result1?.changed ? result1.entities : currentActivities,
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import type { Feed } from '../../feed';
|
|
2
|
-
import type { EventPayload} from '../../../types-internal';
|
|
2
|
+
import type { EventPayload } from '../../../types-internal';
|
|
3
3
|
import { type PartializeAllBut } from '../../../types-internal';
|
|
4
4
|
import { getStateUpdateQueueId, shouldUpdateState } from '../../../utils';
|
|
5
|
-
import {
|
|
6
|
-
eventTriggeredByConnectedUser
|
|
7
|
-
} from '../../../utils/event-triggered-by-connected-user';
|
|
5
|
+
import { eventTriggeredByConnectedUser } from '../../../utils/event-triggered-by-connected-user';
|
|
8
6
|
|
|
9
7
|
export type CommentUpdatedPayload = PartializeAllBut<
|
|
10
8
|
EventPayload<'feeds.comment.updated'>,
|
|
@@ -21,14 +19,14 @@ export function handleCommentUpdated(
|
|
|
21
19
|
|
|
22
20
|
if (
|
|
23
21
|
!shouldUpdateState({
|
|
24
|
-
stateUpdateQueueId: getStateUpdateQueueId(
|
|
25
|
-
payload,
|
|
26
|
-
'comment-updated',
|
|
27
|
-
),
|
|
22
|
+
stateUpdateQueueId: getStateUpdateQueueId(payload, 'comment-updated'),
|
|
28
23
|
stateUpdateQueue: this.stateUpdateQueue,
|
|
29
24
|
watch: this.currentState.watch,
|
|
30
25
|
fromWs,
|
|
31
|
-
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
26
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
27
|
+
this,
|
|
28
|
+
payload,
|
|
29
|
+
),
|
|
32
30
|
})
|
|
33
31
|
) {
|
|
34
32
|
return;
|
|
@@ -45,7 +43,10 @@ export function handleCommentUpdated(
|
|
|
45
43
|
|
|
46
44
|
const newComments = [...entityState.comments];
|
|
47
45
|
|
|
48
|
-
newComments[index] =
|
|
46
|
+
newComments[index] = {
|
|
47
|
+
...comment,
|
|
48
|
+
own_reactions: entityState.comments[index].own_reactions,
|
|
49
|
+
};
|
|
49
50
|
|
|
50
51
|
return {
|
|
51
52
|
...currentState,
|
|
@@ -12,6 +12,7 @@ export const updateStateFollowCreated = (
|
|
|
12
12
|
currentState: FeedState,
|
|
13
13
|
currentFeedId: string,
|
|
14
14
|
connectedUserId?: string,
|
|
15
|
+
hasOwnFields = false,
|
|
15
16
|
): UpdateStateResult<{ data: FeedState }> => {
|
|
16
17
|
// filter non-accepted follows (the way getOrCreate does by default)
|
|
17
18
|
if (follow.status !== 'accepted') {
|
|
@@ -26,6 +27,13 @@ export const updateStateFollowCreated = (
|
|
|
26
27
|
...newState,
|
|
27
28
|
// Update FeedResponse fields, that has the new follower/following count
|
|
28
29
|
...follow.source_feed,
|
|
30
|
+
...(hasOwnFields
|
|
31
|
+
? {
|
|
32
|
+
own_capabilities: follow.source_feed.own_capabilities,
|
|
33
|
+
own_follows: follow.source_feed.own_follows,
|
|
34
|
+
own_followings: follow.source_feed.own_followings,
|
|
35
|
+
}
|
|
36
|
+
: {}),
|
|
29
37
|
};
|
|
30
38
|
|
|
31
39
|
// Only update if following array already exists
|
|
@@ -42,9 +50,16 @@ export const updateStateFollowCreated = (
|
|
|
42
50
|
...newState,
|
|
43
51
|
// Update FeedResponse fields, that has the new follower/following count
|
|
44
52
|
...follow.target_feed,
|
|
53
|
+
...(hasOwnFields
|
|
54
|
+
? {
|
|
55
|
+
own_capabilities: follow.target_feed.own_capabilities,
|
|
56
|
+
own_follows: follow.target_feed.own_follows,
|
|
57
|
+
own_followings: follow.target_feed.own_followings,
|
|
58
|
+
}
|
|
59
|
+
: {}),
|
|
45
60
|
};
|
|
46
61
|
|
|
47
|
-
if (source.created_by.id === connectedUserId) {
|
|
62
|
+
if (source.created_by.id === connectedUserId && !hasOwnFields) {
|
|
48
63
|
newState.own_follows = currentState.own_follows
|
|
49
64
|
? currentState.own_follows.concat(follow)
|
|
50
65
|
: [follow];
|
|
@@ -66,6 +81,7 @@ export function handleFollowCreated(
|
|
|
66
81
|
'follow'
|
|
67
82
|
>,
|
|
68
83
|
fromWs?: boolean,
|
|
84
|
+
hasOwnFields = false,
|
|
69
85
|
) {
|
|
70
86
|
const follow = eventOrResponse.follow;
|
|
71
87
|
|
|
@@ -88,6 +104,7 @@ export function handleFollowCreated(
|
|
|
88
104
|
this.currentState,
|
|
89
105
|
this.feed,
|
|
90
106
|
connectedUser?.id,
|
|
107
|
+
hasOwnFields,
|
|
91
108
|
);
|
|
92
109
|
if (result.changed) {
|
|
93
110
|
this.state.next(result.data);
|