Skip to content

Commit

Permalink
feat: reactions and new getCastWithReactions action
Browse files Browse the repository at this point in the history
  • Loading branch information
dalechyn committed Oct 25, 2024
1 parent 7482189 commit 5019d44
Show file tree
Hide file tree
Showing 17 changed files with 423 additions and 78 deletions.
32 changes: 21 additions & 11 deletions playground/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,26 @@ const client = Client.create(
// hash: '880700eca6c454facaa9bd05ef15fa0b6996a0d2' as any,
// }).then((res) => console.log(res))

console.time('casts')
const casts = await Actions.Cast.getCastsByFid(client, {
fid: 3n,
pageSize: 2,
})
console.timeEnd('casts')
console.dir(casts, { depth: null })
// console.time('casts')
// const casts = await Actions.Cast.getCastsByFid(client, {
// fid: 3n,
// pageSize: 2,
// })
// console.timeEnd('casts')
// console.dir(casts, { depth: null })
//
// console.time('bio')
// const myBio = await Actions.UserData.getUserDataBio(client, { fid: 11517n })
// // biome-ignore lint/suspicious/noConsoleLog: <explanation>
// console.log(myBio)
// console.timeEnd('bio')

console.time('bio')
const myBio = await Actions.UserData.getUserDataBio(client, { fid: 11517n })
const castWithReactions = await Actions.Cast.getCastWithReactions(client, {
hash: '0xc87c75ab61c15b38ec72be6d6fd6d08c73d39155',
fid: 11517n,
})
console.dir(castWithReactions, { depth: null })
// biome-ignore lint/suspicious/noConsoleLog: <explanation>
console.log('likes', castWithReactions.likes.length)
// biome-ignore lint/suspicious/noConsoleLog: <explanation>
console.log(myBio)
console.timeEnd('bio')
console.log('recasts', castWithReactions.recasts.length)
5 changes: 5 additions & 0 deletions src/Actions/Cast.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ export {
type Actions_Cast_GetCast as GetCast,
} from '../Internal/Actions/Cast/getCast.js'

export {
Actions_Cast_getCastWithReactions as getCastWithReactions,
type Actions_Cast_GetCastWithReactions as GetCastWithReactions,
} from '../Internal/Actions/Cast/getCastWithReactions.js'

export {
Actions_Cast_getCastsByFid as getCastsByFid,
type Actions_Cast_GetCastsByFid as GetCastsByFid,
Expand Down
12 changes: 8 additions & 4 deletions src/Internal/Actions/Cast/getAllCastMessagesByFid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export declare namespace Actions_Cast_GetAllCastMessagesByFid {
| { type: 'casted'; cast: Cast }
| { type: 'removed'; hash: Types.Hex }
)[]
nextPageToken: Types.Hex | undefined
nextPageToken: Types.Hex | null
}
type ErrorType = Cast_fromMessage.ErrorType | GlobalErrorType
}
Expand All @@ -38,6 +38,12 @@ export async function Actions_Cast_getAllCastMessagesByFid(
options,
)

const nextPageToken = (() => {
if (!message.nextPageToken) return null
const hex = Hex.fromBytes(message.nextPageToken)
if (hex === '0x') return null
return hex
})()
return {
messages: message.messages.map((message) => {
if (
Expand All @@ -50,9 +56,7 @@ export async function Actions_Cast_getAllCastMessagesByFid(
}
return { type: 'casted', cast: Cast_fromMessage(message) }
}),
nextPageToken: message.nextPageToken
? Hex.fromBytes(message.nextPageToken)
: undefined,
nextPageToken,
}
}
Actions_Cast_getAllCastMessagesByFid.parseError = (error: unknown) =>
Expand Down
44 changes: 44 additions & 0 deletions src/Internal/Actions/Cast/getCastWithReactions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import type { Types } from 'ox'
import type { Cast_fromMessage } from '../../Cast/fromMessage.js'
import type { Cast } from '../../Cast/types.js'
import type { GlobalErrorType } from '../../Errors/error.js'
import type { Reaction } from '../../Reaction/types.js'
import { Actions_Reaction_getReactionsByCast } from '../Reaction/getReactionsByCast.js'
import { Actions_Cast_getCast } from './getCast.js'

export declare namespace Actions_Cast_GetCastWithReactions {
type ReturnType = {
cast: Cast
recasts: Reaction[]
likes: Reaction[]
}
type ErrorType = Cast_fromMessage.ErrorType | GlobalErrorType
}
export async function Actions_Cast_getCastWithReactions(
...[client, parameters, options]: Parameters<typeof Actions_Cast_getCast>
): Promise<Actions_Cast_GetCastWithReactions.ReturnType> {
const cast = await Actions_Cast_getCast(client, parameters, options)

const reactions = await (async () => {
const reactions: Reaction[] = []
let reactionsPageToken: Types.Hex | null = null
do {
const { nextPageToken, messages } =
await Actions_Reaction_getReactionsByCast(client, {
...parameters,
pageToken: reactionsPageToken ? reactionsPageToken : undefined,
})
reactionsPageToken = nextPageToken as any
reactions.push(...messages)
} while (reactionsPageToken)
return reactions
})()

const likes = reactions.filter((reaction) => reaction.type === 'like')
const recasts = reactions.filter((reaction) => reaction.type === 'recast')

return { cast, likes, recasts }
}

Actions_Cast_getCastWithReactions.parseError = (error: unknown) =>
error as Actions_Cast_GetCastWithReactions.ErrorType
12 changes: 8 additions & 4 deletions src/Internal/Actions/Cast/getCastsByFid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import type { GlobalErrorType } from '../../Errors/error.js'
export declare namespace Actions_Cast_GetCastsByFid {
type ReturnType = {
casts: Cast[]
nextPageToken: Types.Hex | undefined
nextPageToken: Types.Hex | null
}
type ErrorType = Cast_fromMessage.ErrorType | GlobalErrorType
}
Expand Down Expand Up @@ -41,11 +41,15 @@ export async function Actions_Cast_getCastsByFid(
},
options,
)
const nextPageToken = (() => {
if (!message.nextPageToken) return null
const hex = Hex.fromBytes(message.nextPageToken)
if (hex === '0x') return null
return hex
})()
return {
casts: message.messages.map(Cast_fromMessage),
nextPageToken: message.nextPageToken
? Hex.fromBytes(message.nextPageToken)
: undefined,
nextPageToken,
}
}
Actions_Cast_getCastsByFid.parseError = (error: unknown) =>
Expand Down
13 changes: 9 additions & 4 deletions src/Internal/Actions/Cast/getCastsByMention.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import type { GlobalErrorType } from '../../Errors/error.js'
export declare namespace Actions_Cast_GetCastsByMention {
type ReturnType = {
casts: Cast[]
nextPageToken: Types.Hex | undefined
nextPageToken: Types.Hex | null
}
type ErrorType = Cast_fromMessage.ErrorType | GlobalErrorType
}
Expand All @@ -33,11 +33,16 @@ export async function Actions_Cast_getCastsByMention(
},
options,
)

const nextPageToken = (() => {
if (!message.nextPageToken) return null
const hex = Hex.fromBytes(message.nextPageToken)
if (hex === '0x') return null
return hex
})()
return {
casts: message.messages.map(Cast_fromMessage),
nextPageToken: message.nextPageToken
? Hex.fromBytes(message.nextPageToken)
: undefined,
nextPageToken,
}
}
Actions_Cast_getCastsByMention.parseError = (error: unknown) =>
Expand Down
12 changes: 8 additions & 4 deletions src/Internal/Actions/Cast/getCastsByParent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import type { Parent } from '../../Parent/types.js'
export declare namespace Actions_Cast_GetCastsByParent {
type ReturnType = {
casts: Cast[]
nextPageToken: Types.Hex | undefined
nextPageToken: Types.Hex | null
}
type ErrorType =
| Cast_fromMessage.ErrorType
Expand Down Expand Up @@ -38,11 +38,15 @@ export async function Actions_Cast_getCastsByParent(
},
options,
)
const nextPageToken = (() => {
if (!message.nextPageToken) return null
const hex = Hex.fromBytes(message.nextPageToken)
if (hex === '0x') return null
return hex
})()
return {
casts: message.messages.map(Cast_fromMessage),
nextPageToken: message.nextPageToken
? Hex.fromBytes(message.nextPageToken)
: undefined,
nextPageToken,
}
}
Actions_Cast_getCastsByParent.parseError = (error: unknown) =>
Expand Down
42 changes: 32 additions & 10 deletions src/Internal/Actions/Reaction/getAllReactionMessagesByFid.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,50 @@
import { type MessageJsonType, fromJson, toJson } from '@bufbuild/protobuf'
import type { CallOptions } from '@connectrpc/connect'
import { Hex, type Types } from 'ox'
import type { Client } from '../../Client/types.js'
import type { GlobalErrorType } from '../../Errors/error.js'
import {
type FidTimestampRequestJson,
FidTimestampRequestSchema,
MessagesResponseSchema,
} from '../../Protobufs/request_response_pb.js'
import { Reaction_fromMessage } from '../../Reaction/fromMessage.js'
import type { Reaction } from '../../Reaction/types.js'

export declare namespace Actions_Reaction_GetAllReactionMessagesByFid {
type ReturnType = MessageJsonType<typeof MessagesResponseSchema>
type ReturnType = {
messages: Reaction[]
nextPageToken: Types.Hex | null
}
// @TODO: proper error handling
type ErrorType = GlobalErrorType
}
export async function Actions_Reaction_getAllReactionMessagesByFid(
client: Client,
parameters: Required<FidTimestampRequestJson>,
parameters: {
fid: bigint
pageSize?: number | undefined
pageToken?: Types.Hex | undefined
reverse?: boolean | undefined
},
options?: CallOptions,
): Promise<Actions_Reaction_GetAllReactionMessagesByFid.ReturnType> {
const message = await client.connectRpcClient.getAllReactionMessagesByFid(
fromJson(FidTimestampRequestSchema, parameters),
{
fid: parameters.fid,
...(parameters.pageSize ? { pageSize: parameters.pageSize } : {}),
...(parameters.pageToken
? { pageToken: Hex.toBytes(parameters.pageToken) }
: {}),
...(parameters.reverse ? { reverse: parameters.reverse } : {}),
},
options,
)
return toJson(MessagesResponseSchema, message)

const nextPageToken = (() => {
if (!message.nextPageToken) return null
const hex = Hex.fromBytes(message.nextPageToken)
if (hex === '0x') return null
return hex
})()
return {
messages: message.messages.map(Reaction_fromMessage),
nextPageToken,
}
}

Actions_Reaction_getAllReactionMessagesByFid.parseError = (error: unknown) =>
Expand Down
30 changes: 21 additions & 9 deletions src/Internal/Actions/Reaction/getReaction.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,40 @@
import { type MessageJsonType, fromJson, toJson } from '@bufbuild/protobuf'
import type { CallOptions } from '@connectrpc/connect'
import type { Client } from '../../Client/types.js'
import type { GlobalErrorType } from '../../Errors/error.js'
import { MessageSchema } from '../../Protobufs/message_pb.js'
import { Reaction_fromMessage } from '../../Reaction/fromMessage.js'
import {
type ReactionRequestJson,
ReactionRequestSchema,
} from '../../Protobufs/request_response_pb.js'
ReactionTarget_toMessage,
ReactionType_toMessage,
} from '../../Reaction/toMessage.js'
import type {
Reaction,
ReactionTarget,
ReactionType,
} from '../../Reaction/types.js'

export declare namespace Actions_Reaction_GetReaction {
type ReturnType = MessageJsonType<typeof MessageSchema>
type ReturnType = Reaction
// @TODO: proper error handling
type ErrorType = GlobalErrorType
}
export async function Actions_Reaction_getReaction(
client: Client,
parameters: Required<ReactionRequestJson>,
parameters: {
fid: bigint
reactionType: ReactionType
target: ReactionTarget
},
options?: CallOptions,
): Promise<Actions_Reaction_GetReaction.ReturnType> {
const message = await client.connectRpcClient.getReaction(
fromJson(ReactionRequestSchema, parameters),
{
fid: parameters.fid,
reactionType: ReactionType_toMessage(parameters.reactionType),
target: ReactionTarget_toMessage(parameters.target),
},
options,
)
return toJson(MessageSchema, message)
return Reaction_fromMessage(message)
}

Actions_Reaction_getReaction.parseError = (error: unknown) =>
Expand Down
43 changes: 33 additions & 10 deletions src/Internal/Actions/Reaction/getReactionsByCast.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,51 @@
import { type MessageJsonType, fromJson, toJson } from '@bufbuild/protobuf'
import type { CallOptions } from '@connectrpc/connect'
import { Hex, type Types } from 'ox'
import type { CastId } from '../../CastId/types.js'
import type { Client } from '../../Client/types.js'
import type { GlobalErrorType } from '../../Errors/error.js'
import {
MessagesResponseSchema,
type ReactionsByTargetRequestJson,
ReactionsByTargetRequestSchema,
} from '../../Protobufs/request_response_pb.js'
import { Reaction_fromMessage } from '../../Reaction/fromMessage.js'
import { ReactionTarget_toMessage } from '../../Reaction/toMessage.js'
import type { Reaction } from '../../Reaction/types.js'

export declare namespace Actions_Reaction_GetReactionsByCast {
type ReturnType = MessageJsonType<typeof MessagesResponseSchema>
type ReturnType = {
messages: Reaction[]
nextPageToken: Types.Hex | null
}
// @TODO: proper error handling
type ErrorType = GlobalErrorType
}
export async function Actions_Reaction_getReactionsByCast(
client: Client,
parameters: Required<ReactionsByTargetRequestJson>,
parameters: CastId & {
pageSize?: number | undefined
pageToken?: Types.Hex | undefined
reverse?: boolean | undefined
},
options?: CallOptions,
): Promise<Actions_Reaction_GetReactionsByCast.ReturnType> {
const message = await client.connectRpcClient.getReactionsByCast(
fromJson(ReactionsByTargetRequestSchema, parameters),
{
target: ReactionTarget_toMessage({ type: 'cast', ...parameters }),
...(parameters.pageSize ? { pageSize: parameters.pageSize } : {}),
...(parameters.pageToken
? { pageToken: Hex.toBytes(parameters.pageToken) }
: {}),
...(parameters.reverse ? { reverse: parameters.reverse } : {}),
},
options,
)
return toJson(MessagesResponseSchema, message)

const nextPageToken = (() => {
if (!message.nextPageToken) return null
const hex = Hex.fromBytes(message.nextPageToken)
if (hex === '0x') return null
return hex
})()
return {
messages: message.messages.map(Reaction_fromMessage),
nextPageToken,
}
}

Actions_Reaction_getReactionsByCast.parseError = (error: unknown) =>
Expand Down
Loading

0 comments on commit 5019d44

Please sign in to comment.