@stream-io/feeds-client 0.2.9 → 0.2.10

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 (87) hide show
  1. package/CHANGELOG.md +7 -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 +3 -2
  6. package/dist/es/react-bindings.mjs +1 -1
  7. package/dist/{index-B0Mm2xFU.js → index-C49kZoN7.js} +273 -51
  8. package/dist/index-C49kZoN7.js.map +1 -0
  9. package/dist/{index-rSXIDTdA.mjs → index-EeFSq3sq.mjs} +273 -51
  10. package/dist/index-EeFSq3sq.mjs.map +1 -0
  11. package/dist/tsconfig.tsbuildinfo +1 -1
  12. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-added.d.ts +4 -5
  13. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-added.d.ts.map +1 -1
  14. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts +1 -2
  15. package/dist/types/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts.map +1 -1
  16. package/dist/types/feed/event-handlers/activity/handle-activity-updated.d.ts +6 -5
  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-added.d.ts +4 -3
  19. package/dist/types/feed/event-handlers/comment/handle-comment-added.d.ts.map +1 -1
  20. package/dist/types/feed/event-handlers/comment/handle-comment-deleted.d.ts +4 -3
  21. package/dist/types/feed/event-handlers/comment/handle-comment-deleted.d.ts.map +1 -1
  22. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-added.d.ts +5 -0
  23. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-added.d.ts.map +1 -0
  24. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-deleted.d.ts +5 -0
  25. package/dist/types/feed/event-handlers/comment/handle-comment-reaction-deleted.d.ts.map +1 -0
  26. package/dist/types/feed/event-handlers/comment/handle-comment-updated.d.ts +4 -3
  27. package/dist/types/feed/event-handlers/comment/handle-comment-updated.d.ts.map +1 -1
  28. package/dist/types/feed/event-handlers/comment/index.d.ts +2 -1
  29. package/dist/types/feed/event-handlers/comment/index.d.ts.map +1 -1
  30. package/dist/types/feed/event-handlers/comment/utils/index.d.ts +2 -0
  31. package/dist/types/feed/event-handlers/comment/utils/index.d.ts.map +1 -0
  32. package/dist/types/feed/event-handlers/comment/utils/update-comment-count.d.ts +8 -0
  33. package/dist/types/feed/event-handlers/comment/utils/update-comment-count.d.ts.map +1 -0
  34. package/dist/types/feed/feed.d.ts.map +1 -1
  35. package/dist/types/feeds-client/feeds-client.d.ts +19 -1
  36. package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
  37. package/dist/types/types-internal.d.ts +4 -2
  38. package/dist/types/types-internal.d.ts.map +1 -1
  39. package/dist/types/utils/ensure-exhausted.d.ts +2 -0
  40. package/dist/types/utils/ensure-exhausted.d.ts.map +1 -0
  41. package/dist/types/utils/event-triggered-by-connected-user.d.ts +6 -0
  42. package/dist/types/utils/event-triggered-by-connected-user.d.ts.map +1 -0
  43. package/dist/types/utils/index.d.ts +1 -0
  44. package/dist/types/utils/index.d.ts.map +1 -1
  45. package/dist/types/utils/logger.d.ts +10 -1
  46. package/dist/types/utils/logger.d.ts.map +1 -1
  47. package/dist/types/utils/state-update-queue.d.ts +22 -2
  48. package/dist/types/utils/state-update-queue.d.ts.map +1 -1
  49. package/dist/types/utils/type-assertions.d.ts +2 -5
  50. package/dist/types/utils/type-assertions.d.ts.map +1 -1
  51. package/package.json +1 -1
  52. package/src/feed/event-handlers/activity/handle-activity-reaction-added.ts +15 -10
  53. package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.test.ts +1 -1
  54. package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.ts +1 -1
  55. package/src/feed/event-handlers/activity/handle-activity-updated.test.ts +131 -1
  56. package/src/feed/event-handlers/activity/handle-activity-updated.ts +38 -15
  57. package/src/feed/event-handlers/comment/handle-comment-added.test.ts +131 -7
  58. package/src/feed/event-handlers/comment/handle-comment-added.ts +24 -4
  59. package/src/feed/event-handlers/comment/handle-comment-deleted.test.ts +124 -2
  60. package/src/feed/event-handlers/comment/handle-comment-deleted.ts +29 -3
  61. package/src/feed/event-handlers/comment/{handle-comment-reaction.test.ts → handle-comment-reaction-added.test.ts} +152 -138
  62. package/src/feed/event-handlers/comment/handle-comment-reaction-added.ts +72 -0
  63. package/src/feed/event-handlers/comment/handle-comment-reaction-deleted.test.ts +343 -0
  64. package/src/feed/event-handlers/comment/handle-comment-reaction-deleted.ts +74 -0
  65. package/src/feed/event-handlers/comment/handle-comment-updated.test.ts +137 -1
  66. package/src/feed/event-handlers/comment/handle-comment-updated.ts +29 -4
  67. package/src/feed/event-handlers/comment/index.ts +3 -1
  68. package/src/feed/event-handlers/comment/utils/index.ts +1 -0
  69. package/src/feed/event-handlers/comment/utils/update-comment-count.test.ts +320 -0
  70. package/src/feed/event-handlers/comment/utils/update-comment-count.ts +51 -0
  71. package/src/feed/event-handlers/follow/handle-follow-deleted.ts +1 -1
  72. package/src/feed/feed.ts +4 -3
  73. package/src/feeds-client/feeds-client.ts +104 -0
  74. package/src/test-utils/response-generators.ts +18 -1
  75. package/src/types-internal.ts +4 -4
  76. package/src/utils/ensure-exhausted.ts +5 -0
  77. package/src/utils/event-triggered-by-connected-user.test.ts +73 -0
  78. package/src/utils/event-triggered-by-connected-user.ts +15 -0
  79. package/src/utils/index.ts +2 -1
  80. package/src/utils/logger.ts +2 -1
  81. package/src/utils/state-update-queue.ts +89 -25
  82. package/src/utils/type-assertions.ts +2 -3
  83. package/dist/index-B0Mm2xFU.js.map +0 -1
  84. package/dist/index-rSXIDTdA.mjs.map +0 -1
  85. package/dist/types/feed/event-handlers/comment/handle-comment-reaction.d.ts +0 -4
  86. package/dist/types/feed/event-handlers/comment/handle-comment-reaction.d.ts.map +0 -1
  87. package/src/feed/event-handlers/comment/handle-comment-reaction.ts +0 -61
@@ -4,4 +4,5 @@ export * from './constants';
4
4
  export * from './type-assertions';
5
5
  export * from './state-update-queue';
6
6
  export * from './update-entity-in-array';
7
- export * from './logger';
7
+ export * from './logger';
8
+ export * from './ensure-exhausted';
@@ -4,7 +4,8 @@ type AvailableScopes =
4
4
  | 'api-client'
5
5
  | 'event-dispatcher'
6
6
  | 'token-manager'
7
- | 'stable-ws-connection';
7
+ | 'stable-ws-connection'
8
+ | 'helpers';
8
9
 
9
10
  export type ConfigureLoggersOptions =
10
11
  loggerInternal.ConfigureLoggersOptions<AvailableScopes>;
@@ -1,5 +1,49 @@
1
- import { isFollowResponse, isReactionResponse } from './type-assertions';
2
- import { AddCommentReactionResponse, AddReactionResponse } from '../gen/models';
1
+ import {
2
+ FollowResponse,
3
+ } from '../gen/models';
4
+ import {
5
+ ActivityReactionAddedPayload,
6
+ ActivityReactionDeletedPayload,
7
+ ActivityUpdatedPayload,
8
+ CommentAddedPayload,
9
+ CommentDeletedPayload,
10
+ CommentReactionAddedPayload,
11
+ CommentReactionDeletedPayload,
12
+ CommentUpdatedPayload,
13
+ } from '../feed';
14
+ import { ensureExhausted } from './ensure-exhausted';
15
+
16
+ export type StateUpdateQueuePrefix =
17
+ | 'activity-updated'
18
+ | 'activity-reaction-created'
19
+ | 'activity-reaction-deleted'
20
+ | 'comment-reaction-created'
21
+ | 'comment-reaction-deleted'
22
+ | 'follow-created'
23
+ | 'follow-deleted'
24
+ | 'follow-updated'
25
+ | 'comment-created'
26
+ | 'comment-deleted'
27
+ | 'comment-updated';
28
+
29
+ type StateUpdateQueuePayloadByPrefix = {
30
+ 'activity-updated': ActivityUpdatedPayload;
31
+ 'activity-reaction-created': ActivityReactionAddedPayload;
32
+ 'activity-reaction-deleted': ActivityReactionDeletedPayload;
33
+ 'comment-reaction-created': CommentReactionAddedPayload;
34
+ 'comment-reaction-deleted': CommentReactionDeletedPayload;
35
+ 'follow-created': FollowResponse;
36
+ 'follow-deleted': FollowResponse;
37
+ 'follow-updated': FollowResponse;
38
+ 'comment-created': CommentAddedPayload;
39
+ 'comment-deleted': CommentDeletedPayload;
40
+ 'comment-updated': CommentUpdatedPayload;
41
+ };
42
+
43
+ // Union of ([payload, prefix]) tuples:
44
+ export type StateUpdateQueuePairTuples = {
45
+ [K in StateUpdateQueuePrefix]: [StateUpdateQueuePayloadByPrefix[K], K];
46
+ }[StateUpdateQueuePrefix];
3
47
 
4
48
  /**
5
49
  * Decide whether to apply a state update that may arrive twice (HTTP + WS)
@@ -82,13 +126,13 @@ export const shouldUpdateState = ({
82
126
  fromWs = true,
83
127
  isTriggeredByConnectedUser = false,
84
128
  }: {
85
- stateUpdateQueueId: string;
129
+ stateUpdateQueueId?: string;
86
130
  stateUpdateQueue: Set<string>;
87
131
  watch: boolean;
88
132
  fromWs?: boolean;
89
133
  isTriggeredByConnectedUser: boolean;
90
134
  }): boolean => {
91
- if (!watch || !isTriggeredByConnectedUser) {
135
+ if (!watch || !isTriggeredByConnectedUser || !stateUpdateQueueId) {
92
136
  return true;
93
137
  }
94
138
 
@@ -109,27 +153,47 @@ export const shouldUpdateState = ({
109
153
  };
110
154
 
111
155
  export function getStateUpdateQueueId(
112
- data: object,
113
- prefix?: 'deleted' | 'updated' | 'created' | (string & {}),
156
+ ...args: StateUpdateQueuePairTuples
114
157
  ) {
115
- const toJoin = prefix ? [prefix] : [];
116
- if (isFollowResponse(data)) {
117
- return toJoin
118
- .concat([data.source_feed.feed, data.target_feed.feed])
119
- .join('-');
120
- } else if (isReactionResponse(data)) {
121
- return toJoin
122
- .concat([
123
- (data as AddReactionResponse).activity.id ??
124
- (data as AddCommentReactionResponse).comment.id,
125
- data.reaction.type,
126
- ])
127
- .join('-');
128
- }
129
- // else if (isMemberResponse(data)) {
130
- // }
158
+ const [data, prefix] = args;
159
+ const toJoin = [prefix as string];
131
160
 
132
- throw new Error(
133
- `Cannot create state update queueId for data: ${JSON.stringify(data)}`,
134
- );
161
+ switch (prefix) {
162
+ case 'activity-updated': {
163
+ return toJoin.concat([data.activity.id]).join('-')
164
+ }
165
+ case 'activity-reaction-created':
166
+ case 'activity-reaction-deleted': {
167
+ return toJoin
168
+ .concat([
169
+ data.activity.id,
170
+ data.reaction.type,
171
+ ])
172
+ .join('-');
173
+ }
174
+ case 'comment-reaction-created':
175
+ case 'comment-reaction-deleted': {
176
+ return toJoin
177
+ .concat([
178
+ data.comment.id,
179
+ data.reaction.type,
180
+ ])
181
+ .join('-');
182
+ }
183
+ case 'comment-created':
184
+ case 'comment-deleted':
185
+ case 'comment-updated': {
186
+ return toJoin.concat([data.comment.id]).join('-')
187
+ }
188
+ case 'follow-created':
189
+ case 'follow-deleted':
190
+ case 'follow-updated': {
191
+ return toJoin
192
+ .concat([data.source_feed.feed, data.target_feed.feed])
193
+ .join('-');
194
+ }
195
+ default: {
196
+ ensureExhausted(data, 'Encountered unknown state update queue prefix.')
197
+ }
198
+ }
135
199
  }
@@ -6,7 +6,6 @@ import {
6
6
  FollowResponse,
7
7
  } from '../gen/models';
8
8
  import { StreamFile } from '../types';
9
- import { CommentParent } from '../types';
10
9
  import { DeleteReactionResponse } from '@stream-io/node-sdk';
11
10
 
12
11
  export const isFollowResponse = (data: object): data is FollowResponse => {
@@ -20,7 +19,7 @@ export const isReactionResponse = (
20
19
  | AddCommentReactionResponse
21
20
  | DeleteReactionResponse
22
21
  | DeleteCommentReactionResponse
23
- ) & { fid: string } => {
22
+ ) => {
24
23
  return (
25
24
  'reaction' in data &&
26
25
  ('activity' in data || 'comment' in data)
@@ -28,7 +27,7 @@ export const isReactionResponse = (
28
27
  };
29
28
 
30
29
  export const isCommentResponse = (
31
- entity: CommentParent,
30
+ entity: object,
32
31
  ): entity is CommentResponse => {
33
32
  return typeof (entity as CommentResponse)?.object_id === 'string';
34
33
  };