@metamask/social-controllers 3.7.0 → 3.9.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structs.d.ts","sourceRoot":"","sources":["../src/structs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,291 @@
1
+ import { array, assign, boolean, enums, is, literal, nullable, number, optional, record, string, type as structType, unknown as unknownStruct, union, } from '@metamask/superstruct';
2
+ import { TRADER_RANKING_TAGS, TradeStruct } from './social-types.js';
3
+ export const SocialHandlesStruct = structType({
4
+ twitter: optional(nullable(string())),
5
+ farcaster: optional(nullable(string())),
6
+ ens: optional(nullable(string())),
7
+ lens: optional(nullable(string())),
8
+ });
9
+ export const ProfileSummaryStruct = structType({
10
+ profileId: string(),
11
+ address: string(),
12
+ name: string(),
13
+ imageUrl: optional(nullable(string())),
14
+ });
15
+ const FeedActorStruct = assign(ProfileSummaryStruct, structType({
16
+ winRate30d: optional(nullable(number())),
17
+ pnl30d: optional(nullable(number())),
18
+ tradeCount30d: optional(nullable(number())),
19
+ followerCount: optional(nullable(number())),
20
+ }));
21
+ export const PositionStruct = structType({
22
+ positionId: string(),
23
+ tokenSymbol: string(),
24
+ tokenName: string(),
25
+ tokenAddress: string(),
26
+ chain: string(),
27
+ positionAmount: number(),
28
+ isOpen: optional(boolean()),
29
+ // Incomplete Clicker metrics serialize these as `null`.
30
+ boughtUsd: nullable(number()),
31
+ soldUsd: nullable(number()),
32
+ realizedPnl: nullable(number()),
33
+ costBasis: nullable(number()),
34
+ trades: array(TradeStruct),
35
+ lastTradeAt: number(),
36
+ tokenImageUrl: optional(nullable(string())),
37
+ currentValueUSD: optional(nullable(number())),
38
+ pnlValueUsd: optional(nullable(number())),
39
+ pnlPercent: optional(nullable(number())),
40
+ copyCount: optional(number()),
41
+ perpPositionType: optional(nullable(enums(['long', 'short']))),
42
+ perpLeverage: optional(nullable(number())),
43
+ positionAmountWithLeverage: optional(nullable(number())),
44
+ });
45
+ export const CommentReactionProfileStruct = structType({
46
+ id: string(),
47
+ name: string(),
48
+ });
49
+ export const CommentEngagementStruct = structType({
50
+ reactions: array(structType({
51
+ emotion: string(),
52
+ count: number(),
53
+ profiles: array(CommentReactionProfileStruct),
54
+ })),
55
+ userReaction: nullable(string()),
56
+ replyCount: optional(number()),
57
+ });
58
+ const AuthorCommentStruct = structType({
59
+ uid: string(),
60
+ text: string(),
61
+ timestamp: number(),
62
+ engagement: CommentEngagementStruct,
63
+ });
64
+ const SwapCommentAuthorStruct = structType({
65
+ id: string(),
66
+ name: string(),
67
+ images: optional(structType({
68
+ raw: nullable(string()),
69
+ xs: nullable(string()),
70
+ sm: nullable(string()),
71
+ })),
72
+ addresses: optional(array(string())),
73
+ externalId: optional(string()),
74
+ });
75
+ export const SwapCommentResponseStruct = structType({
76
+ uid: string(),
77
+ transactionHash: string(),
78
+ chain: string(),
79
+ tokenAddress: string(),
80
+ commentText: string(),
81
+ author: SwapCommentAuthorStruct,
82
+ timestamp: number(),
83
+ isAppUserComment: boolean(),
84
+ metrics: CommentEngagementStruct,
85
+ });
86
+ export const FeedItemStruct = assign(PositionStruct, structType({
87
+ actor: FeedActorStruct,
88
+ timestamp: number(),
89
+ authorComment: optional(nullable(AuthorCommentStruct)),
90
+ commentCount: optional(number()),
91
+ replyCount: optional(number()),
92
+ copyCount: optional(number()),
93
+ firstTradeAt: optional(nullable(number())),
94
+ holdTimeMs: optional(nullable(number())),
95
+ entryPriceUsd: optional(nullable(number())),
96
+ eventId: optional(string()),
97
+ revision: optional(number()),
98
+ occurredAt: optional(string()),
99
+ }));
100
+ const FeedPaginationStruct = structType({
101
+ olderCursor: nullable(string()),
102
+ newerCursor: nullable(string()),
103
+ });
104
+ const FeedResponseStruct = structType({
105
+ items: array(FeedItemStruct),
106
+ pagination: FeedPaginationStruct,
107
+ });
108
+ /**
109
+ * One malformed feed item must not blank the page or a realtime batch.
110
+ * The envelope remains invalid only when its top-level shape is unusable.
111
+ *
112
+ * @param feedData - Parsed JSON response or realtime batch payload.
113
+ * @param invalidMessage - Error message for an unusable response envelope.
114
+ * @returns The validated response with malformed items removed.
115
+ */
116
+ export const parseFeedResponse = (feedData, invalidMessage) => {
117
+ if (is(feedData, FeedResponseStruct)) {
118
+ return feedData;
119
+ }
120
+ if (typeof feedData !== 'object' ||
121
+ feedData === null ||
122
+ !('items' in feedData) ||
123
+ !('pagination' in feedData)) {
124
+ throw new Error(invalidMessage);
125
+ }
126
+ const { items, pagination } = feedData;
127
+ if (!Array.isArray(items) || !is(pagination, FeedPaginationStruct)) {
128
+ throw new Error(invalidMessage);
129
+ }
130
+ return {
131
+ items: items.filter((item) => is(item, FeedItemStruct)),
132
+ pagination,
133
+ };
134
+ };
135
+ const RealtimeFeedTradeStruct = structType({
136
+ intent: enums(['enter', 'exit']),
137
+ comments: array(record(string(), unknownStruct())),
138
+ });
139
+ const RealtimeFeedItemStruct = structType({
140
+ itemId: string(),
141
+ timestamp: number(),
142
+ cardLatestTradeAt: number(),
143
+ actor: structType({
144
+ type: literal('user'),
145
+ address: string(),
146
+ name: string(),
147
+ images: record(string(), unknownStruct()),
148
+ profile: structType({
149
+ id: string(),
150
+ metadata: record(string(), unknownStruct()),
151
+ }),
152
+ }),
153
+ metadata: structType({
154
+ tokenChain: string(),
155
+ tokenAddress: string(),
156
+ trades: array(RealtimeFeedTradeStruct),
157
+ }),
158
+ });
159
+ export const parseSocialRealtimeFeedItem = (value) => is(value, RealtimeFeedItemStruct) ? value : undefined;
160
+ export const TraderProfileStruct = structType({
161
+ profileId: string(),
162
+ address: string(),
163
+ allAddresses: array(string()),
164
+ name: string(),
165
+ imageUrl: optional(nullable(string())),
166
+ createdAt: optional(nullable(string())),
167
+ });
168
+ export const TraderStatsStruct = structType({
169
+ pnl30d: optional(nullable(number())),
170
+ winRate30d: optional(nullable(number())),
171
+ roiPercent30d: optional(nullable(number())),
172
+ tradeCount30d: optional(nullable(number())),
173
+ volumeUsd30d: optional(nullable(number())),
174
+ pnl7d: optional(nullable(number())),
175
+ winRate7d: optional(nullable(number())),
176
+ roiPercent7d: optional(nullable(number())),
177
+ tradeCount7d: optional(nullable(number())),
178
+ medianHoldMinutes: optional(nullable(number())),
179
+ });
180
+ export const PerChainBreakdownStruct = structType({
181
+ perChainPnl: record(string(), number()),
182
+ perChainRoi: record(string(), nullable(number())),
183
+ perChainVolume: record(string(), number()),
184
+ perChainPnl7d: optional(record(string(), number())),
185
+ perChainRoi7d: optional(record(string(), nullable(number()))),
186
+ perChainVolume7d: optional(record(string(), number())),
187
+ });
188
+ export const CopytradedAllTimeStruct = structType({
189
+ count: number(),
190
+ volumeUSD: number(),
191
+ distinctActors: number(),
192
+ });
193
+ export const TraderProfileResponseStruct = structType({
194
+ profile: TraderProfileStruct,
195
+ stats: TraderStatsStruct,
196
+ perChainBreakdown: PerChainBreakdownStruct,
197
+ socialHandles: SocialHandlesStruct,
198
+ followerCount: number(),
199
+ followingCount: number(),
200
+ copytradedAllTime: CopytradedAllTimeStruct,
201
+ rankingTag: optional(nullable(enums(TRADER_RANKING_TAGS))),
202
+ });
203
+ export const PaginationStruct = structType({
204
+ hasMore: boolean(),
205
+ nextPage: optional(number()),
206
+ });
207
+ const LeaderboardEntryStruct = structType({
208
+ rank: number(),
209
+ addresses: array(string()),
210
+ profileId: string(),
211
+ name: string(),
212
+ imageUrl: optional(nullable(string())),
213
+ pnl30d: number(),
214
+ winRate30d: optional(nullable(number())),
215
+ roiPercent30d: optional(nullable(number())),
216
+ tradeCount30d: optional(nullable(number())),
217
+ pnl7d: optional(nullable(number())),
218
+ winRate7d: optional(nullable(number())),
219
+ roiPercent7d: optional(nullable(number())),
220
+ tradeCount7d: optional(nullable(number())),
221
+ pnlPerChain: record(string(), number()),
222
+ followerCount: number(),
223
+ socialHandles: SocialHandlesStruct,
224
+ });
225
+ export const LeaderboardResponseStruct = structType({
226
+ traders: array(LeaderboardEntryStruct),
227
+ });
228
+ const CopyTradeAccountStruct = structType({
229
+ profileId: string(),
230
+ caip10: string(),
231
+ });
232
+ export const CopyTradeIntentResponseStruct = structType({
233
+ id: string(),
234
+ origin: structType({
235
+ kind: literal('comment'),
236
+ id: string(),
237
+ }),
238
+ copierAccount: CopyTradeAccountStruct,
239
+ sourceAccount: nullable(CopyTradeAccountStruct),
240
+ execution: union([
241
+ structType({ product: literal('swaps'), quoteId: string() }),
242
+ structType({ product: literal('perps'), oid: string() }),
243
+ ]),
244
+ payoutEligibility: structType({
245
+ status: enums(['payable', 'non_payable']),
246
+ reason: string(),
247
+ }),
248
+ createdAt: string(),
249
+ });
250
+ export const PositionsResponseStruct = structType({
251
+ positions: array(PositionStruct),
252
+ pagination: PaginationStruct,
253
+ computedAt: optional(nullable(string())),
254
+ });
255
+ export const FollowersResponseStruct = structType({
256
+ followers: array(ProfileSummaryStruct),
257
+ count: number(),
258
+ });
259
+ export const FollowingResponseStruct = structType({
260
+ following: array(ProfileSummaryStruct),
261
+ count: number(),
262
+ });
263
+ export const FollowResponseStruct = structType({
264
+ followed: array(ProfileSummaryStruct),
265
+ });
266
+ export const UnfollowResponseStruct = structType({
267
+ unfollowed: array(ProfileSummaryStruct),
268
+ });
269
+ const BlockedProfileStruct = structType({
270
+ blockedAt: number(),
271
+ reason: nullable(string()),
272
+ profile: ProfileSummaryStruct,
273
+ });
274
+ export const BlockedProfilesResponseStruct = structType({
275
+ items: array(BlockedProfileStruct),
276
+ cursor: nullable(string()),
277
+ });
278
+ const BlockedContentStruct = structType({
279
+ blockedAt: number(),
280
+ reason: nullable(string()),
281
+ type: enums(['comment', 'reply']),
282
+ id: string(),
283
+ text: string(),
284
+ createdAt: number(),
285
+ author: nullable(ProfileSummaryStruct),
286
+ });
287
+ export const BlockedContentResponseStruct = structType({
288
+ items: array(BlockedContentStruct),
289
+ cursor: nullable(string()),
290
+ });
291
+ //# sourceMappingURL=structs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structs.js","sourceRoot":"","sources":["../src/structs.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Infer } from '@metamask/superstruct';\nimport {\n array,\n assign,\n boolean,\n enums,\n is,\n literal,\n nullable,\n number,\n optional,\n record,\n string,\n type as structType,\n unknown as unknownStruct,\n union,\n} from '@metamask/superstruct';\n\nimport { TRADER_RANKING_TAGS, TradeStruct } from './social-types.js';\nimport type { FeedItem, FeedResponse } from './social-types.js';\n\nexport const SocialHandlesStruct = structType({\n twitter: optional(nullable(string())),\n farcaster: optional(nullable(string())),\n ens: optional(nullable(string())),\n lens: optional(nullable(string())),\n});\n\nexport const ProfileSummaryStruct = structType({\n profileId: string(),\n address: string(),\n name: string(),\n imageUrl: optional(nullable(string())),\n});\n\nconst FeedActorStruct = assign(\n ProfileSummaryStruct,\n structType({\n winRate30d: optional(nullable(number())),\n pnl30d: optional(nullable(number())),\n tradeCount30d: optional(nullable(number())),\n followerCount: optional(nullable(number())),\n }),\n);\n\nexport const PositionStruct = structType({\n positionId: string(),\n tokenSymbol: string(),\n tokenName: string(),\n tokenAddress: string(),\n chain: string(),\n positionAmount: number(),\n isOpen: optional(boolean()),\n // Incomplete Clicker metrics serialize these as `null`.\n boughtUsd: nullable(number()),\n soldUsd: nullable(number()),\n realizedPnl: nullable(number()),\n costBasis: nullable(number()),\n trades: array(TradeStruct),\n lastTradeAt: number(),\n tokenImageUrl: optional(nullable(string())),\n currentValueUSD: optional(nullable(number())),\n pnlValueUsd: optional(nullable(number())),\n pnlPercent: optional(nullable(number())),\n copyCount: optional(number()),\n perpPositionType: optional(nullable(enums(['long', 'short']))),\n perpLeverage: optional(nullable(number())),\n positionAmountWithLeverage: optional(nullable(number())),\n});\n\nexport const CommentReactionProfileStruct = structType({\n id: string(),\n name: string(),\n});\n\nexport const CommentEngagementStruct = structType({\n reactions: array(\n structType({\n emotion: string(),\n count: number(),\n profiles: array(CommentReactionProfileStruct),\n }),\n ),\n userReaction: nullable(string()),\n replyCount: optional(number()),\n});\n\nconst AuthorCommentStruct = structType({\n uid: string(),\n text: string(),\n timestamp: number(),\n engagement: CommentEngagementStruct,\n});\n\nconst SwapCommentAuthorStruct = structType({\n id: string(),\n name: string(),\n images: optional(\n structType({\n raw: nullable(string()),\n xs: nullable(string()),\n sm: nullable(string()),\n }),\n ),\n addresses: optional(array(string())),\n externalId: optional(string()),\n});\n\nexport const SwapCommentResponseStruct = structType({\n uid: string(),\n transactionHash: string(),\n chain: string(),\n tokenAddress: string(),\n commentText: string(),\n author: SwapCommentAuthorStruct,\n timestamp: number(),\n isAppUserComment: boolean(),\n metrics: CommentEngagementStruct,\n});\n\nexport const FeedItemStruct = assign(\n PositionStruct,\n structType({\n actor: FeedActorStruct,\n timestamp: number(),\n authorComment: optional(nullable(AuthorCommentStruct)),\n commentCount: optional(number()),\n replyCount: optional(number()),\n copyCount: optional(number()),\n firstTradeAt: optional(nullable(number())),\n holdTimeMs: optional(nullable(number())),\n entryPriceUsd: optional(nullable(number())),\n eventId: optional(string()),\n revision: optional(number()),\n occurredAt: optional(string()),\n }),\n);\n\nconst FeedPaginationStruct = structType({\n olderCursor: nullable(string()),\n newerCursor: nullable(string()),\n});\n\nconst FeedResponseStruct = structType({\n items: array(FeedItemStruct),\n pagination: FeedPaginationStruct,\n});\n\n/**\n * One malformed feed item must not blank the page or a realtime batch.\n * The envelope remains invalid only when its top-level shape is unusable.\n *\n * @param feedData - Parsed JSON response or realtime batch payload.\n * @param invalidMessage - Error message for an unusable response envelope.\n * @returns The validated response with malformed items removed.\n */\nexport const parseFeedResponse = (\n feedData: unknown,\n invalidMessage: string,\n): FeedResponse => {\n if (is(feedData, FeedResponseStruct)) {\n return feedData;\n }\n\n if (\n typeof feedData !== 'object' ||\n feedData === null ||\n !('items' in feedData) ||\n !('pagination' in feedData)\n ) {\n throw new Error(invalidMessage);\n }\n\n const { items, pagination } = feedData;\n\n if (!Array.isArray(items) || !is(pagination, FeedPaginationStruct)) {\n throw new Error(invalidMessage);\n }\n\n return {\n items: items.filter((item): item is FeedItem => is(item, FeedItemStruct)),\n pagination,\n };\n};\n\nconst RealtimeFeedTradeStruct = structType({\n intent: enums(['enter', 'exit']),\n comments: array(record(string(), unknownStruct())),\n});\n\nconst RealtimeFeedItemStruct = structType({\n itemId: string(),\n timestamp: number(),\n cardLatestTradeAt: number(),\n actor: structType({\n type: literal('user'),\n address: string(),\n name: string(),\n images: record(string(), unknownStruct()),\n profile: structType({\n id: string(),\n metadata: record(string(), unknownStruct()),\n }),\n }),\n metadata: structType({\n tokenChain: string(),\n tokenAddress: string(),\n trades: array(RealtimeFeedTradeStruct),\n }),\n});\n\nexport type SocialRealtimeFeedItem = Infer<typeof RealtimeFeedItemStruct>;\n\nexport const parseSocialRealtimeFeedItem = (\n value: unknown,\n): SocialRealtimeFeedItem | undefined =>\n is(value, RealtimeFeedItemStruct) ? value : undefined;\n\nexport const TraderProfileStruct = structType({\n profileId: string(),\n address: string(),\n allAddresses: array(string()),\n name: string(),\n imageUrl: optional(nullable(string())),\n createdAt: optional(nullable(string())),\n});\n\nexport const TraderStatsStruct = structType({\n pnl30d: optional(nullable(number())),\n winRate30d: optional(nullable(number())),\n roiPercent30d: optional(nullable(number())),\n tradeCount30d: optional(nullable(number())),\n volumeUsd30d: optional(nullable(number())),\n pnl7d: optional(nullable(number())),\n winRate7d: optional(nullable(number())),\n roiPercent7d: optional(nullable(number())),\n tradeCount7d: optional(nullable(number())),\n medianHoldMinutes: optional(nullable(number())),\n});\n\nexport const PerChainBreakdownStruct = structType({\n perChainPnl: record(string(), number()),\n perChainRoi: record(string(), nullable(number())),\n perChainVolume: record(string(), number()),\n perChainPnl7d: optional(record(string(), number())),\n perChainRoi7d: optional(record(string(), nullable(number()))),\n perChainVolume7d: optional(record(string(), number())),\n});\n\nexport const CopytradedAllTimeStruct = structType({\n count: number(),\n volumeUSD: number(),\n distinctActors: number(),\n});\n\nexport const TraderProfileResponseStruct = structType({\n profile: TraderProfileStruct,\n stats: TraderStatsStruct,\n perChainBreakdown: PerChainBreakdownStruct,\n socialHandles: SocialHandlesStruct,\n followerCount: number(),\n followingCount: number(),\n copytradedAllTime: CopytradedAllTimeStruct,\n rankingTag: optional(nullable(enums(TRADER_RANKING_TAGS))),\n});\n\nexport const PaginationStruct = structType({\n hasMore: boolean(),\n nextPage: optional(number()),\n});\n\nconst LeaderboardEntryStruct = structType({\n rank: number(),\n addresses: array(string()),\n profileId: string(),\n name: string(),\n imageUrl: optional(nullable(string())),\n pnl30d: number(),\n winRate30d: optional(nullable(number())),\n roiPercent30d: optional(nullable(number())),\n tradeCount30d: optional(nullable(number())),\n pnl7d: optional(nullable(number())),\n winRate7d: optional(nullable(number())),\n roiPercent7d: optional(nullable(number())),\n tradeCount7d: optional(nullable(number())),\n pnlPerChain: record(string(), number()),\n followerCount: number(),\n socialHandles: SocialHandlesStruct,\n});\n\nexport const LeaderboardResponseStruct = structType({\n traders: array(LeaderboardEntryStruct),\n});\n\nconst CopyTradeAccountStruct = structType({\n profileId: string(),\n caip10: string(),\n});\n\nexport const CopyTradeIntentResponseStruct = structType({\n id: string(),\n origin: structType({\n kind: literal('comment'),\n id: string(),\n }),\n copierAccount: CopyTradeAccountStruct,\n sourceAccount: nullable(CopyTradeAccountStruct),\n execution: union([\n structType({ product: literal('swaps'), quoteId: string() }),\n structType({ product: literal('perps'), oid: string() }),\n ]),\n payoutEligibility: structType({\n status: enums(['payable', 'non_payable']),\n reason: string(),\n }),\n createdAt: string(),\n});\n\nexport const PositionsResponseStruct = structType({\n positions: array(PositionStruct),\n pagination: PaginationStruct,\n computedAt: optional(nullable(string())),\n});\n\nexport const FollowersResponseStruct = structType({\n followers: array(ProfileSummaryStruct),\n count: number(),\n});\n\nexport const FollowingResponseStruct = structType({\n following: array(ProfileSummaryStruct),\n count: number(),\n});\n\nexport const FollowResponseStruct = structType({\n followed: array(ProfileSummaryStruct),\n});\n\nexport const UnfollowResponseStruct = structType({\n unfollowed: array(ProfileSummaryStruct),\n});\n\nconst BlockedProfileStruct = structType({\n blockedAt: number(),\n reason: nullable(string()),\n profile: ProfileSummaryStruct,\n});\n\nexport const BlockedProfilesResponseStruct = structType({\n items: array(BlockedProfileStruct),\n cursor: nullable(string()),\n});\n\nconst BlockedContentStruct = structType({\n blockedAt: number(),\n reason: nullable(string()),\n type: enums(['comment', 'reply']),\n id: string(),\n text: string(),\n createdAt: number(),\n author: nullable(ProfileSummaryStruct),\n});\n\nexport const BlockedContentResponseStruct = structType({\n items: array(BlockedContentStruct),\n cursor: nullable(string()),\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/social-controllers",
3
- "version": "3.7.0",
3
+ "version": "3.9.0",
4
4
  "description": "A collection of social related controllers",
5
5
  "keywords": [
6
6
  "Ethereum",
@@ -50,12 +50,12 @@
50
50
  "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
51
51
  },
52
52
  "dependencies": {
53
- "@metamask/base-controller": "^10.0.0",
53
+ "@metamask/base-controller": "^10.1.0",
54
54
  "@metamask/base-data-service": "^2.1.0",
55
55
  "@metamask/controller-utils": "^13.0.0",
56
- "@metamask/core-backend": "^12.0.1",
56
+ "@metamask/core-backend": "^12.3.0",
57
57
  "@metamask/messenger": "^3.0.0",
58
- "@metamask/profile-sync-controller": "^34.0.3",
58
+ "@metamask/profile-sync-controller": "^35.0.0",
59
59
  "@metamask/superstruct": "^3.4.1"
60
60
  },
61
61
  "devDependencies": {