@stream-io/feeds-client 0.2.0 → 0.2.1
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 +8 -0
- package/dist/index-react-bindings.browser.cjs +365 -207
- package/dist/index-react-bindings.browser.cjs.map +1 -1
- package/dist/index-react-bindings.browser.js +365 -207
- package/dist/index-react-bindings.browser.js.map +1 -1
- package/dist/index-react-bindings.node.cjs +365 -207
- package/dist/index-react-bindings.node.cjs.map +1 -1
- package/dist/index-react-bindings.node.js +365 -207
- package/dist/index-react-bindings.node.js.map +1 -1
- package/dist/index.browser.cjs +366 -207
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +366 -208
- package/dist/index.browser.js.map +1 -1
- package/dist/index.node.cjs +366 -207
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +366 -208
- package/dist/index.node.js.map +1 -1
- package/dist/src/feed/event-handlers/activity/handle-activity-deleted.d.ts +12 -3
- package/dist/src/feed/event-handlers/activity/handle-activity-pinned.d.ts +3 -0
- package/dist/src/feed/event-handlers/activity/handle-activity-reaction-added.d.ts +10 -6
- package/dist/src/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts +10 -6
- package/dist/src/feed/event-handlers/activity/handle-activity-unpinned.d.ts +3 -0
- package/dist/src/feed/event-handlers/activity/handle-activity-updated.d.ts +7 -3
- package/dist/src/feed/event-handlers/bookmark/handle-bookmark-added.d.ts +10 -6
- package/dist/src/feed/event-handlers/bookmark/handle-bookmark-deleted.d.ts +10 -6
- package/dist/src/feed/event-handlers/bookmark/handle-bookmark-updated.d.ts +10 -6
- package/dist/src/gen/models/index.d.ts +36 -1
- package/dist/src/test-utils/response-generators.d.ts +46 -1
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/update-entity-in-array.d.ts +27 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/feed/event-handlers/activity/activity-reaction-utils.test.ts +108 -96
- package/src/feed/event-handlers/activity/activity-utils.test.ts +84 -122
- package/src/feed/event-handlers/activity/handle-activity-deleted.ts +43 -10
- package/src/feed/event-handlers/activity/handle-activity-pinned.test.ts +60 -0
- package/src/feed/event-handlers/activity/handle-activity-pinned.ts +30 -0
- package/src/feed/event-handlers/activity/handle-activity-reaction-added.test.ts +157 -0
- package/src/feed/event-handlers/activity/handle-activity-reaction-added.ts +82 -40
- package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.test.ts +200 -0
- package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.ts +89 -51
- package/src/feed/event-handlers/activity/handle-activity-unpinned.test.ts +94 -0
- package/src/feed/event-handlers/activity/handle-activity-unpinned.ts +30 -0
- package/src/feed/event-handlers/activity/handle-activity-updated.test.ts +115 -0
- package/src/feed/event-handlers/activity/handle-activity-updated.ts +73 -35
- package/src/feed/event-handlers/bookmark/bookmark-utils.test.ts +121 -109
- package/src/feed/event-handlers/bookmark/handle-bookmark-added.test.ts +178 -0
- package/src/feed/event-handlers/bookmark/handle-bookmark-added.ts +82 -39
- package/src/feed/event-handlers/bookmark/handle-bookmark-deleted.test.ts +188 -0
- package/src/feed/event-handlers/bookmark/handle-bookmark-deleted.ts +86 -48
- package/src/feed/event-handlers/bookmark/handle-bookmark-updated.test.ts +196 -0
- package/src/feed/event-handlers/bookmark/handle-bookmark-updated.ts +83 -44
- package/src/gen/model-decoders/decoders.ts +13 -0
- package/src/gen/models/index.ts +73 -2
- package/src/gen/moderation/ModerationApi.ts +1 -0
- package/src/test-utils/response-generators.ts +260 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/update-entity-in-array.ts +51 -0
|
@@ -1,76 +1,115 @@
|
|
|
1
1
|
import type { Feed } from '../../../feed';
|
|
2
2
|
import type {
|
|
3
|
+
ActivityPinResponse,
|
|
3
4
|
ActivityResponse,
|
|
4
5
|
BookmarkUpdatedEvent,
|
|
5
6
|
} from '../../../gen/models';
|
|
6
|
-
import type { EventPayload
|
|
7
|
+
import type { EventPayload } from '../../../types-internal';
|
|
8
|
+
import { updateEntityInArray } from '../../../utils';
|
|
7
9
|
|
|
8
|
-
import { updateActivityInState } from '../activity';
|
|
9
10
|
import { isSameBookmark } from './handle-bookmark-deleted';
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
const sharedUpdateActivity = ({
|
|
13
|
+
currentActivity,
|
|
14
|
+
event,
|
|
15
|
+
eventBelongsToCurrentUser,
|
|
16
|
+
}: {
|
|
17
|
+
currentActivity: ActivityResponse;
|
|
18
|
+
event: BookmarkUpdatedEvent;
|
|
19
|
+
eventBelongsToCurrentUser: boolean;
|
|
20
|
+
}): ActivityResponse => {
|
|
21
|
+
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
22
|
+
|
|
23
|
+
if (eventBelongsToCurrentUser) {
|
|
24
|
+
const bookmarkIndex = newOwnBookmarks.findIndex((bookmark) =>
|
|
20
25
|
isSameBookmark(bookmark, event.bookmark),
|
|
21
26
|
);
|
|
27
|
+
|
|
22
28
|
if (bookmarkIndex !== -1) {
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
newOwnBookmarks = [...newOwnBookmarks];
|
|
30
|
+
newOwnBookmarks[bookmarkIndex] = event.bookmark;
|
|
25
31
|
}
|
|
26
32
|
}
|
|
27
33
|
|
|
28
34
|
return {
|
|
29
|
-
...activity,
|
|
30
|
-
own_bookmarks:
|
|
31
|
-
|
|
35
|
+
...event.bookmark.activity,
|
|
36
|
+
own_bookmarks: newOwnBookmarks,
|
|
37
|
+
own_reactions: currentActivity.own_reactions,
|
|
32
38
|
};
|
|
33
39
|
};
|
|
34
40
|
|
|
35
41
|
export const updateBookmarkInActivities = (
|
|
36
42
|
event: BookmarkUpdatedEvent,
|
|
37
43
|
activities: ActivityResponse[] | undefined,
|
|
38
|
-
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
eventBelongsToCurrentUser: boolean,
|
|
45
|
+
) =>
|
|
46
|
+
updateEntityInArray({
|
|
47
|
+
entities: activities,
|
|
48
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
49
|
+
updater: (matchedActivity) =>
|
|
50
|
+
sharedUpdateActivity({
|
|
51
|
+
currentActivity: matchedActivity,
|
|
52
|
+
event,
|
|
53
|
+
eventBelongsToCurrentUser,
|
|
54
|
+
}),
|
|
55
|
+
});
|
|
43
56
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
57
|
+
export const updateBookmarkInPinnedActivities = (
|
|
58
|
+
event: BookmarkUpdatedEvent,
|
|
59
|
+
pinnedActivities: ActivityPinResponse[] | undefined,
|
|
60
|
+
eventBelongsToCurrentUser: boolean,
|
|
61
|
+
) =>
|
|
62
|
+
updateEntityInArray({
|
|
63
|
+
entities: pinnedActivities,
|
|
64
|
+
matcher: (pinnedActivity) =>
|
|
65
|
+
pinnedActivity.activity.id === event.bookmark.activity.id,
|
|
66
|
+
updater: (matchedPinnedActivity) => {
|
|
67
|
+
const newActivity = sharedUpdateActivity({
|
|
68
|
+
currentActivity: matchedPinnedActivity.activity,
|
|
69
|
+
event,
|
|
70
|
+
eventBelongsToCurrentUser,
|
|
71
|
+
});
|
|
50
72
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
};
|
|
73
|
+
if (newActivity === matchedPinnedActivity.activity) {
|
|
74
|
+
return matchedPinnedActivity;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
...matchedPinnedActivity,
|
|
79
|
+
activity: newActivity,
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
});
|
|
59
83
|
|
|
60
84
|
export function handleBookmarkUpdated(
|
|
61
85
|
this: Feed,
|
|
62
86
|
event: EventPayload<'feeds.bookmark.updated'>,
|
|
63
87
|
) {
|
|
64
|
-
const
|
|
88
|
+
const {
|
|
89
|
+
activities: currentActivities,
|
|
90
|
+
pinned_activities: currentPinnedActivities,
|
|
91
|
+
} = this.currentState;
|
|
65
92
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
66
|
-
const
|
|
93
|
+
const eventBelongsToCurrentUser =
|
|
94
|
+
event.bookmark.user.id === connectedUser?.id;
|
|
95
|
+
|
|
96
|
+
const [result1, result2] = [
|
|
97
|
+
updateBookmarkInActivities(
|
|
98
|
+
event,
|
|
99
|
+
currentActivities,
|
|
100
|
+
eventBelongsToCurrentUser,
|
|
101
|
+
),
|
|
102
|
+
updateBookmarkInPinnedActivities(
|
|
103
|
+
event,
|
|
104
|
+
currentPinnedActivities,
|
|
105
|
+
eventBelongsToCurrentUser,
|
|
106
|
+
),
|
|
107
|
+
];
|
|
67
108
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if (result.changed) {
|
|
74
|
-
this.state.partialNext({ activities: result.activities });
|
|
109
|
+
if (result1.changed || result2.changed) {
|
|
110
|
+
this.state.partialNext({
|
|
111
|
+
activities: result1.entities,
|
|
112
|
+
pinned_activities: result2.entities,
|
|
113
|
+
});
|
|
75
114
|
}
|
|
76
115
|
}
|
|
@@ -469,6 +469,8 @@ decoders.Channel = (input?: Record<string, any>) => {
|
|
|
469
469
|
|
|
470
470
|
last_message_at: { type: 'DatetimeType', isSingle: true },
|
|
471
471
|
|
|
472
|
+
message_count_updated_at: { type: 'DatetimeType', isSingle: true },
|
|
473
|
+
|
|
472
474
|
active_live_locations: { type: 'SharedLocation', isSingle: false },
|
|
473
475
|
|
|
474
476
|
invites: { type: 'ChannelMember', isSingle: false },
|
|
@@ -857,6 +859,8 @@ decoders.FeedMemberResponse = (input?: Record<string, any>) => {
|
|
|
857
859
|
invite_accepted_at: { type: 'DatetimeType', isSingle: true },
|
|
858
860
|
|
|
859
861
|
invite_rejected_at: { type: 'DatetimeType', isSingle: true },
|
|
862
|
+
|
|
863
|
+
membership_level: { type: 'MembershipLevelResponse', isSingle: true },
|
|
860
864
|
};
|
|
861
865
|
return decode(typeMappings, input);
|
|
862
866
|
};
|
|
@@ -1091,6 +1095,15 @@ decoders.ListDevicesResponse = (input?: Record<string, any>) => {
|
|
|
1091
1095
|
return decode(typeMappings, input);
|
|
1092
1096
|
};
|
|
1093
1097
|
|
|
1098
|
+
decoders.MembershipLevelResponse = (input?: Record<string, any>) => {
|
|
1099
|
+
const typeMappings: TypeMapping = {
|
|
1100
|
+
created_at: { type: 'DatetimeType', isSingle: true },
|
|
1101
|
+
|
|
1102
|
+
updated_at: { type: 'DatetimeType', isSingle: true },
|
|
1103
|
+
};
|
|
1104
|
+
return decode(typeMappings, input);
|
|
1105
|
+
};
|
|
1106
|
+
|
|
1094
1107
|
decoders.Message = (input?: Record<string, any>) => {
|
|
1095
1108
|
const typeMappings: TypeMapping = {
|
|
1096
1109
|
created_at: { type: 'DatetimeType', isSingle: true },
|
package/src/gen/models/index.ts
CHANGED
|
@@ -672,6 +672,8 @@ export interface AggregatedActivityResponse {
|
|
|
672
672
|
|
|
673
673
|
export interface AggregationConfig {
|
|
674
674
|
format?: string;
|
|
675
|
+
|
|
676
|
+
group_size?: number;
|
|
675
677
|
}
|
|
676
678
|
|
|
677
679
|
export interface AppEventResponse {
|
|
@@ -1516,6 +1518,10 @@ export interface Channel {
|
|
|
1516
1518
|
|
|
1517
1519
|
member_count?: number;
|
|
1518
1520
|
|
|
1521
|
+
message_count?: number;
|
|
1522
|
+
|
|
1523
|
+
message_count_updated_at?: Date;
|
|
1524
|
+
|
|
1519
1525
|
team?: string;
|
|
1520
1526
|
|
|
1521
1527
|
active_live_locations?: SharedLocation[];
|
|
@@ -1540,6 +1546,8 @@ export interface ChannelConfig {
|
|
|
1540
1546
|
|
|
1541
1547
|
connect_events: boolean;
|
|
1542
1548
|
|
|
1549
|
+
count_messages: boolean;
|
|
1550
|
+
|
|
1543
1551
|
created_at: Date;
|
|
1544
1552
|
|
|
1545
1553
|
custom_events: boolean;
|
|
@@ -1606,6 +1614,8 @@ export interface ChannelConfigWithInfo {
|
|
|
1606
1614
|
|
|
1607
1615
|
connect_events: boolean;
|
|
1608
1616
|
|
|
1617
|
+
count_messages: boolean;
|
|
1618
|
+
|
|
1609
1619
|
created_at: Date;
|
|
1610
1620
|
|
|
1611
1621
|
custom_events: boolean;
|
|
@@ -1704,6 +1714,8 @@ export interface ChannelMember {
|
|
|
1704
1714
|
|
|
1705
1715
|
user_id?: string;
|
|
1706
1716
|
|
|
1717
|
+
deleted_messages?: string[];
|
|
1718
|
+
|
|
1707
1719
|
user?: UserResponse;
|
|
1708
1720
|
}
|
|
1709
1721
|
|
|
@@ -1796,6 +1808,8 @@ export interface ChannelResponse {
|
|
|
1796
1808
|
|
|
1797
1809
|
member_count?: number;
|
|
1798
1810
|
|
|
1811
|
+
message_count?: number;
|
|
1812
|
+
|
|
1799
1813
|
mute_expires_at?: Date;
|
|
1800
1814
|
|
|
1801
1815
|
muted?: boolean;
|
|
@@ -2006,6 +2020,8 @@ export interface ConfigOverrides {
|
|
|
2006
2020
|
|
|
2007
2021
|
blocklist_behavior?: 'flag' | 'block';
|
|
2008
2022
|
|
|
2023
|
+
count_messages?: boolean;
|
|
2024
|
+
|
|
2009
2025
|
max_message_length?: number;
|
|
2010
2026
|
|
|
2011
2027
|
quotes?: boolean;
|
|
@@ -2050,6 +2066,8 @@ export interface ConfigResponse {
|
|
|
2050
2066
|
|
|
2051
2067
|
block_list_config?: BlockListConfig;
|
|
2052
2068
|
|
|
2069
|
+
llm_config?: LLMConfig;
|
|
2070
|
+
|
|
2053
2071
|
rule_builder_config?: RuleBuilderConfig;
|
|
2054
2072
|
|
|
2055
2073
|
velocity_filter_config?: VelocityFilterConfig;
|
|
@@ -2743,6 +2761,8 @@ export interface FeedMemberResponse {
|
|
|
2743
2761
|
invite_rejected_at?: Date;
|
|
2744
2762
|
|
|
2745
2763
|
custom?: Record<string, any>;
|
|
2764
|
+
|
|
2765
|
+
membership_level?: MembershipLevelResponse;
|
|
2746
2766
|
}
|
|
2747
2767
|
|
|
2748
2768
|
export interface FeedMemberUpdatedEvent {
|
|
@@ -3533,6 +3553,33 @@ export interface IngressVideoLayerResponse {
|
|
|
3533
3553
|
min_dimension: number;
|
|
3534
3554
|
}
|
|
3535
3555
|
|
|
3556
|
+
export interface LLMConfig {
|
|
3557
|
+
enabled: boolean;
|
|
3558
|
+
|
|
3559
|
+
rules: LLMRule[];
|
|
3560
|
+
|
|
3561
|
+
async?: boolean;
|
|
3562
|
+
|
|
3563
|
+
severity_descriptions?: Record<string, string>;
|
|
3564
|
+
}
|
|
3565
|
+
|
|
3566
|
+
export interface LLMRule {
|
|
3567
|
+
action:
|
|
3568
|
+
| 'flag'
|
|
3569
|
+
| 'shadow'
|
|
3570
|
+
| 'remove'
|
|
3571
|
+
| 'bounce'
|
|
3572
|
+
| 'bounce_flag'
|
|
3573
|
+
| 'bounce_remove'
|
|
3574
|
+
| 'keep';
|
|
3575
|
+
|
|
3576
|
+
description: string;
|
|
3577
|
+
|
|
3578
|
+
label: string;
|
|
3579
|
+
|
|
3580
|
+
severity_rules: BodyguardSeverityRule[];
|
|
3581
|
+
}
|
|
3582
|
+
|
|
3536
3583
|
export interface LabelThresholds {
|
|
3537
3584
|
block?: number;
|
|
3538
3585
|
|
|
@@ -3605,6 +3652,24 @@ export interface MemberLookup {
|
|
|
3605
3652
|
limit: number;
|
|
3606
3653
|
}
|
|
3607
3654
|
|
|
3655
|
+
export interface MembershipLevelResponse {
|
|
3656
|
+
created_at: Date;
|
|
3657
|
+
|
|
3658
|
+
id: string;
|
|
3659
|
+
|
|
3660
|
+
name: string;
|
|
3661
|
+
|
|
3662
|
+
priority: number;
|
|
3663
|
+
|
|
3664
|
+
updated_at: Date;
|
|
3665
|
+
|
|
3666
|
+
tags: string[];
|
|
3667
|
+
|
|
3668
|
+
description?: string;
|
|
3669
|
+
|
|
3670
|
+
custom?: Record<string, any>;
|
|
3671
|
+
}
|
|
3672
|
+
|
|
3608
3673
|
export interface Message {
|
|
3609
3674
|
cid: string;
|
|
3610
3675
|
|
|
@@ -3654,6 +3719,8 @@ export interface Message {
|
|
|
3654
3719
|
|
|
3655
3720
|
deleted_at?: Date;
|
|
3656
3721
|
|
|
3722
|
+
deleted_for_me?: boolean;
|
|
3723
|
+
|
|
3657
3724
|
message_text_updated_at?: Date;
|
|
3658
3725
|
|
|
3659
3726
|
mml?: string;
|
|
@@ -3760,6 +3827,8 @@ export interface MessageResponse {
|
|
|
3760
3827
|
|
|
3761
3828
|
deleted_at?: Date;
|
|
3762
3829
|
|
|
3830
|
+
deleted_for_me?: boolean;
|
|
3831
|
+
|
|
3763
3832
|
message_text_updated_at?: Date;
|
|
3764
3833
|
|
|
3765
3834
|
mml?: string;
|
|
@@ -3838,6 +3907,8 @@ export interface ModerationFlagResponse {
|
|
|
3838
3907
|
|
|
3839
3908
|
user_id: string;
|
|
3840
3909
|
|
|
3910
|
+
result: Array<Record<string, any>>;
|
|
3911
|
+
|
|
3841
3912
|
entity_creator_id?: string;
|
|
3842
3913
|
|
|
3843
3914
|
reason?: string;
|
|
@@ -3846,8 +3917,6 @@ export interface ModerationFlagResponse {
|
|
|
3846
3917
|
|
|
3847
3918
|
labels?: string[];
|
|
3848
3919
|
|
|
3849
|
-
result?: Array<Record<string, any>>;
|
|
3850
|
-
|
|
3851
3920
|
custom?: Record<string, any>;
|
|
3852
3921
|
|
|
3853
3922
|
moderation_payload?: ModerationPayload;
|
|
@@ -5872,6 +5941,8 @@ export interface UpsertConfigRequest {
|
|
|
5872
5941
|
|
|
5873
5942
|
google_vision_config?: GoogleVisionConfig;
|
|
5874
5943
|
|
|
5944
|
+
llm_config?: LLMConfig;
|
|
5945
|
+
|
|
5875
5946
|
rule_builder_config?: RuleBuilderConfig;
|
|
5876
5947
|
|
|
5877
5948
|
velocity_filter_config?: VelocityFilterConfig;
|
|
@@ -69,6 +69,7 @@ export class ModerationApi {
|
|
|
69
69
|
block_list_config: request?.block_list_config,
|
|
70
70
|
bodyguard_config: request?.bodyguard_config,
|
|
71
71
|
google_vision_config: request?.google_vision_config,
|
|
72
|
+
llm_config: request?.llm_config,
|
|
72
73
|
rule_builder_config: request?.rule_builder_config,
|
|
73
74
|
velocity_filter_config: request?.velocity_filter_config,
|
|
74
75
|
video_call_rule_config: request?.video_call_rule_config,
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ActivityPinResponse,
|
|
3
|
+
ActivityResponse,
|
|
4
|
+
BookmarkFolderResponse,
|
|
5
|
+
BookmarkResponse,
|
|
2
6
|
FeedResponse,
|
|
7
|
+
FeedsReactionResponse,
|
|
3
8
|
FollowResponse,
|
|
4
9
|
OwnUser,
|
|
5
10
|
OwnUserResponse,
|
|
11
|
+
PinActivityResponse,
|
|
6
12
|
UserResponse,
|
|
7
13
|
} from '../gen/models';
|
|
8
14
|
import { humanId } from 'human-id';
|
|
15
|
+
import { EventPayload } from '../types-internal';
|
|
9
16
|
|
|
10
17
|
export const getHumanId = () => humanId({ capitalize: false, separator: '-' });
|
|
11
18
|
|
|
@@ -99,3 +106,256 @@ export const generateFollowResponse = (
|
|
|
99
106
|
...overrides,
|
|
100
107
|
};
|
|
101
108
|
};
|
|
109
|
+
|
|
110
|
+
export const generateActivityResponse = (
|
|
111
|
+
overrides: Omit<Partial<ActivityResponse>, 'user'> & {
|
|
112
|
+
user?: Partial<UserResponse>;
|
|
113
|
+
} = {},
|
|
114
|
+
): ActivityResponse => {
|
|
115
|
+
return {
|
|
116
|
+
id: getHumanId(),
|
|
117
|
+
type: 'test',
|
|
118
|
+
created_at: new Date(),
|
|
119
|
+
updated_at: new Date(),
|
|
120
|
+
visibility: 'public',
|
|
121
|
+
bookmark_count: 0,
|
|
122
|
+
comment_count: 0,
|
|
123
|
+
reaction_count: 0,
|
|
124
|
+
share_count: 0,
|
|
125
|
+
attachments: [],
|
|
126
|
+
comments: [],
|
|
127
|
+
feeds: [],
|
|
128
|
+
filter_tags: [],
|
|
129
|
+
interest_tags: [],
|
|
130
|
+
latest_reactions: [],
|
|
131
|
+
mentioned_users: [],
|
|
132
|
+
own_bookmarks: [],
|
|
133
|
+
own_reactions: [],
|
|
134
|
+
custom: {},
|
|
135
|
+
reaction_groups: {},
|
|
136
|
+
search_data: {},
|
|
137
|
+
popularity: 0,
|
|
138
|
+
score: 0,
|
|
139
|
+
...overrides,
|
|
140
|
+
user: generateUserResponse(overrides.user),
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
export const generateFeedReactionResponse = (
|
|
145
|
+
overrides: Omit<Partial<FeedsReactionResponse>, 'user'> & {
|
|
146
|
+
user?: Partial<UserResponse>;
|
|
147
|
+
} = {},
|
|
148
|
+
): FeedsReactionResponse => {
|
|
149
|
+
const user = generateUserResponse(overrides.user);
|
|
150
|
+
return {
|
|
151
|
+
type: 'like',
|
|
152
|
+
activity_id: getHumanId(),
|
|
153
|
+
created_at: new Date(),
|
|
154
|
+
updated_at: new Date(),
|
|
155
|
+
...overrides,
|
|
156
|
+
user,
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
export const generateActivityPinResponse = (
|
|
161
|
+
overrides: Omit<Partial<ActivityPinResponse>, 'activity' | 'user'> & {
|
|
162
|
+
activity?: Partial<ActivityResponse>;
|
|
163
|
+
user?: Partial<UserResponse>;
|
|
164
|
+
} = {},
|
|
165
|
+
): ActivityPinResponse => {
|
|
166
|
+
return {
|
|
167
|
+
created_at: new Date(),
|
|
168
|
+
updated_at: new Date(),
|
|
169
|
+
feed: getHumanId(),
|
|
170
|
+
...overrides,
|
|
171
|
+
activity: generateActivityResponse(overrides.activity),
|
|
172
|
+
user: generateUserResponse(overrides.user),
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
export const generateBookmarkFolderResponse = (
|
|
177
|
+
overrides: Partial<BookmarkFolderResponse> = {},
|
|
178
|
+
): BookmarkFolderResponse => ({
|
|
179
|
+
id: `bookmark-folder-${getHumanId()}`,
|
|
180
|
+
name: humanId(),
|
|
181
|
+
created_at: new Date(),
|
|
182
|
+
updated_at: new Date(),
|
|
183
|
+
...overrides,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
export const generateBookmarkResponse = (
|
|
187
|
+
overrides: Omit<Partial<BookmarkResponse>, 'activity' | 'user'> & {
|
|
188
|
+
activity?: Partial<ActivityResponse>;
|
|
189
|
+
user?: Partial<UserResponse>;
|
|
190
|
+
} = {},
|
|
191
|
+
): BookmarkResponse => ({
|
|
192
|
+
created_at: new Date(),
|
|
193
|
+
updated_at: new Date(),
|
|
194
|
+
...overrides,
|
|
195
|
+
activity: generateActivityResponse(overrides.activity),
|
|
196
|
+
user: generateUserResponse(overrides.user),
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
// event generators
|
|
200
|
+
export function generateActivityReactionAddedEvent(
|
|
201
|
+
overrides: Omit<
|
|
202
|
+
Partial<EventPayload<'feeds.activity.reaction.added'>>,
|
|
203
|
+
'activity' | 'type' | 'reaction' | 'user'
|
|
204
|
+
> & {
|
|
205
|
+
activity?: Parameters<typeof generateActivityResponse>[0];
|
|
206
|
+
reaction?: Parameters<typeof generateFeedReactionResponse>[0];
|
|
207
|
+
user?: Parameters<typeof generateUserResponse>[0];
|
|
208
|
+
} = {},
|
|
209
|
+
): EventPayload<'feeds.activity.reaction.added'> {
|
|
210
|
+
const activity = generateActivityResponse(overrides.activity);
|
|
211
|
+
const reaction = generateFeedReactionResponse(overrides.reaction);
|
|
212
|
+
const user = generateUserResponse(overrides.user);
|
|
213
|
+
|
|
214
|
+
return {
|
|
215
|
+
type: 'feeds.activity.reaction.added',
|
|
216
|
+
created_at: new Date(),
|
|
217
|
+
fid: '',
|
|
218
|
+
custom: {},
|
|
219
|
+
...overrides,
|
|
220
|
+
user,
|
|
221
|
+
reaction,
|
|
222
|
+
activity,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export function generateActivityReactionDeletedEvent(
|
|
227
|
+
overrides: Omit<
|
|
228
|
+
Partial<EventPayload<'feeds.activity.reaction.deleted'>>,
|
|
229
|
+
'user' | 'activity' | 'reaction'
|
|
230
|
+
> & {
|
|
231
|
+
activity?: Parameters<typeof generateActivityResponse>[0];
|
|
232
|
+
reaction?: Parameters<typeof generateFeedReactionResponse>[0];
|
|
233
|
+
user?: Parameters<typeof generateUserResponse>[0];
|
|
234
|
+
} = {},
|
|
235
|
+
): EventPayload<'feeds.activity.reaction.deleted'> {
|
|
236
|
+
const activity = generateActivityResponse(overrides.activity);
|
|
237
|
+
const reaction = generateFeedReactionResponse(overrides.reaction);
|
|
238
|
+
const user = generateUserResponse(overrides.user);
|
|
239
|
+
return {
|
|
240
|
+
type: 'feeds.activity.reaction.deleted',
|
|
241
|
+
created_at: new Date(),
|
|
242
|
+
fid: '',
|
|
243
|
+
custom: {},
|
|
244
|
+
...overrides,
|
|
245
|
+
user,
|
|
246
|
+
reaction,
|
|
247
|
+
activity,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export function generateActivityUpdatedEvent(
|
|
252
|
+
overrides: Omit<
|
|
253
|
+
Partial<EventPayload<'feeds.activity.updated'>>,
|
|
254
|
+
'activity' | 'type'
|
|
255
|
+
> & {
|
|
256
|
+
activity?: Parameters<typeof generateActivityResponse>[0];
|
|
257
|
+
} = {},
|
|
258
|
+
): EventPayload<'feeds.activity.updated'> {
|
|
259
|
+
const activity = generateActivityResponse(overrides.activity);
|
|
260
|
+
return {
|
|
261
|
+
type: 'feeds.activity.updated',
|
|
262
|
+
created_at: new Date(),
|
|
263
|
+
fid: '',
|
|
264
|
+
custom: {},
|
|
265
|
+
...overrides,
|
|
266
|
+
activity,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export function generateBookmarkAddedEvent(
|
|
271
|
+
overrides: Omit<
|
|
272
|
+
Partial<EventPayload<'feeds.bookmark.added'>>,
|
|
273
|
+
'bookmark' | 'user'
|
|
274
|
+
> & {
|
|
275
|
+
bookmark?: Parameters<typeof generateBookmarkResponse>[0];
|
|
276
|
+
user?: Parameters<typeof generateUserResponse>[0];
|
|
277
|
+
} = {},
|
|
278
|
+
): EventPayload<'feeds.bookmark.added'> {
|
|
279
|
+
const bookmark = generateBookmarkResponse(overrides.bookmark);
|
|
280
|
+
const user = generateUserResponse(overrides.user);
|
|
281
|
+
return {
|
|
282
|
+
type: 'feeds.bookmark.added',
|
|
283
|
+
created_at: new Date(),
|
|
284
|
+
custom: {},
|
|
285
|
+
...overrides,
|
|
286
|
+
bookmark,
|
|
287
|
+
user,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export function generateBookmarkDeletedEvent(
|
|
292
|
+
overrides: Omit<
|
|
293
|
+
Partial<EventPayload<'feeds.bookmark.deleted'>>,
|
|
294
|
+
'bookmark' | 'user'
|
|
295
|
+
> & {
|
|
296
|
+
bookmark?: Parameters<typeof generateBookmarkResponse>[0];
|
|
297
|
+
user?: Parameters<typeof generateUserResponse>[0];
|
|
298
|
+
} = {},
|
|
299
|
+
): EventPayload<'feeds.bookmark.deleted'> {
|
|
300
|
+
const bookmark = generateBookmarkResponse(overrides.bookmark);
|
|
301
|
+
const user = generateUserResponse(overrides.user);
|
|
302
|
+
return {
|
|
303
|
+
type: 'feeds.bookmark.deleted',
|
|
304
|
+
created_at: new Date(),
|
|
305
|
+
custom: {},
|
|
306
|
+
...overrides,
|
|
307
|
+
bookmark,
|
|
308
|
+
user,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export function generateBookmarkUpdatedEvent(
|
|
313
|
+
overrides: Omit<
|
|
314
|
+
Partial<EventPayload<'feeds.bookmark.updated'>>,
|
|
315
|
+
'bookmark' | 'user'
|
|
316
|
+
> & {
|
|
317
|
+
bookmark?: Parameters<typeof generateBookmarkResponse>[0];
|
|
318
|
+
user?: Parameters<typeof generateUserResponse>[0];
|
|
319
|
+
} = {},
|
|
320
|
+
): EventPayload<'feeds.bookmark.updated'> {
|
|
321
|
+
const bookmark = generateBookmarkResponse(overrides.bookmark);
|
|
322
|
+
const user = generateUserResponse(overrides.user);
|
|
323
|
+
return {
|
|
324
|
+
type: 'feeds.bookmark.updated',
|
|
325
|
+
created_at: new Date(),
|
|
326
|
+
custom: {},
|
|
327
|
+
...overrides,
|
|
328
|
+
bookmark,
|
|
329
|
+
user,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export function generateActivityPinnedEvent(
|
|
334
|
+
overrides: Omit<
|
|
335
|
+
Partial<EventPayload<'feeds.activity.pinned'>>,
|
|
336
|
+
'pinned_activity' | 'user'
|
|
337
|
+
> & {
|
|
338
|
+
pinned_activity?: Parameters<typeof generateActivityPinResponse>[0];
|
|
339
|
+
user?: Parameters<typeof generateUserResponse>[0];
|
|
340
|
+
} = {},
|
|
341
|
+
): EventPayload<'feeds.activity.pinned'> {
|
|
342
|
+
const pinnedActivity = generateActivityPinResponse(overrides.pinned_activity);
|
|
343
|
+
const user = generateUserResponse(overrides.user);
|
|
344
|
+
|
|
345
|
+
// FIXME(TEMPORARY): re-map ActivityPinResponse to PinActivityResponse
|
|
346
|
+
const typeAdjustedPinnedActivity: PinActivityResponse = {
|
|
347
|
+
...pinnedActivity,
|
|
348
|
+
user_id: pinnedActivity.user.id,
|
|
349
|
+
duration: '0',
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
return {
|
|
353
|
+
type: 'feeds.activity.pinned',
|
|
354
|
+
created_at: pinnedActivity.created_at,
|
|
355
|
+
fid: pinnedActivity.feed,
|
|
356
|
+
custom: {},
|
|
357
|
+
...overrides,
|
|
358
|
+
pinned_activity: typeAdjustedPinnedActivity,
|
|
359
|
+
user,
|
|
360
|
+
};
|
|
361
|
+
}
|
package/src/utils/index.ts
CHANGED