@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.
Files changed (44) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/index.js +2 -1
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/react-bindings.js +1 -1
  5. package/dist/es/index.mjs +15 -14
  6. package/dist/es/react-bindings.mjs +1 -1
  7. package/dist/{feeds-client-DeAqnd1a.mjs → feeds-client-B03y08Kq.mjs} +184 -67
  8. package/dist/feeds-client-B03y08Kq.mjs.map +1 -0
  9. package/dist/{feeds-client-B4zeBggL.js → feeds-client-tw63OGrd.js} +178 -61
  10. package/dist/feeds-client-tw63OGrd.js.map +1 -0
  11. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  12. package/dist/types/activity-with-state-updates/activity-with-state-updates.d.ts.map +1 -1
  13. package/dist/types/feed/activity-filter.d.ts +11 -0
  14. package/dist/types/feed/activity-filter.d.ts.map +1 -0
  15. package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts +3 -2
  16. package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts.map +1 -1
  17. package/dist/types/feed/event-handlers/activity/handle-activity-updated.d.ts.map +1 -1
  18. package/dist/types/feed/event-handlers/comment/handle-comment-updated.d.ts.map +1 -1
  19. package/dist/types/feed/event-handlers/follow/handle-follow-created.d.ts +2 -2
  20. package/dist/types/feed/event-handlers/follow/handle-follow-created.d.ts.map +1 -1
  21. package/dist/types/feed/feed.d.ts +17 -12
  22. package/dist/types/feed/feed.d.ts.map +1 -1
  23. package/dist/types/feeds-client/apply-new-activity-to-active-feeds.d.ts +4 -0
  24. package/dist/types/feeds-client/apply-new-activity-to-active-feeds.d.ts.map +1 -0
  25. package/dist/types/feeds-client/feeds-client.d.ts +6 -8
  26. package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
  27. package/dist/types/index.d.ts +1 -0
  28. package/dist/types/index.d.ts.map +1 -1
  29. package/dist/types/types.d.ts +15 -0
  30. package/dist/types/types.d.ts.map +1 -1
  31. package/package.json +2 -1
  32. package/src/activity-with-state-updates/activity-with-state-updates.ts +8 -2
  33. package/src/feed/activity-filter.ts +44 -0
  34. package/src/feed/event-handlers/activity/handle-activity-added.ts +22 -8
  35. package/src/feed/event-handlers/activity/handle-activity-updated.ts +5 -1
  36. package/src/feed/event-handlers/comment/handle-comment-updated.ts +11 -10
  37. package/src/feed/event-handlers/follow/handle-follow-created.ts +18 -1
  38. package/src/feed/feed.ts +72 -21
  39. package/src/feeds-client/apply-new-activity-to-active-feeds.ts +9 -0
  40. package/src/feeds-client/feeds-client.ts +46 -28
  41. package/src/index.ts +1 -0
  42. package/src/types.ts +17 -0
  43. package/dist/feeds-client-B4zeBggL.js.map +0 -1
  44. 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;KAAgC;IAiBrF,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;IAmBf,OAAO,CAAC,oBAAoB;CAkB7B"}
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', { fromWebSocket }?: {
5
- fromWebSocket: boolean;
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,EAAE,aAAa,EAAE,GAAE;IAAE,aAAa,EAAE,OAAO,CAAA;CAA6B;;;EAiCzE;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,YAAY,CAAC,sBAAsB,CAAC,QAoB5C"}
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,QAoCjB"}
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,EAAC,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,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,QA4CjB"}
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,KACvB,iBAAiB,CAAC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CA6CvC,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,QA2BjB"}
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, ActivityAddedEvent } from '../gen/models';
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
- activityAddedEventFilter?: ((event: ActivityAddedEvent) => boolean) | undefined;
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, addNewActivitiesTo?: 'start' | 'end', activityAddedEventFilter?: ((event: ActivityAddedEvent) => boolean) | undefined);
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 newActivitiesAdded(activities: ActivityResponse[], options?: {
137
- fromWebSocket: boolean;
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":"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"}
1
+ {"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../../src/feed/feed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Feed } from '../feed/feed';
2
+ import type { ActivityResponse } from '../gen/models';
3
+ export declare function applyNewActivityToActiveFeeds(this: Feed, activity: ActivityResponse): void;
4
+ //# sourceMappingURL=apply-new-activity-to-active-feeds.d.ts.map
@@ -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 { ActivityAddedEvent, ActivityResponse, 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, 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.addNewActivitiesTo - 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. Useful for story feeds.
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
- addNewActivitiesTo?: "start" | "end";
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
- addNewActivitiesTo?: "start" | "end";
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":"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"}
1
+ {"version":3,"file":"feeds-client.d.ts","sourceRoot":"","sources":["../../../src/feeds-client/feeds-client.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -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.51",
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 } = { fromResponse: undefined },
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.activityAddedEventFilter = () => false;
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
- { fromWebSocket }: { fromWebSocket: boolean } = { fromWebSocket: false },
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.newActivitiesAdded(newActivitiesDeduplicated, { fromWebSocket });
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
- if (this.activityAddedEventFilter) {
50
- if (!this.activityAddedEventFilter(event)) {
51
- return;
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
- this.currentState.addNewActivitiesTo,
59
- { fromWebSocket: true },
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.client.hydratePollCache([payload.activity]);
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(this, payload),
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] = comment;
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);