@@ -547,18 +547,20 @@ export namespace MessageV2 {
547547 and ( eq ( MessageTable . time_created , row . time ) , lt ( MessageTable . id , row . id ) ) ,
548548 )
549549
550- function hydrate ( rows : ( typeof MessageTable . $inferSelect ) [ ] ) {
550+ function resolve ( sid : SessionID ) {
551+ return Database . resolveSession ( sid )
552+ }
553+
554+ function hydrate ( db : Database . TxOrDb , rows : ( typeof MessageTable . $inferSelect ) [ ] ) {
551555 const ids = rows . map ( ( row ) => row . id )
552556 const partByMessage = new Map < string , MessageV2 . Part [ ] > ( )
553557 if ( ids . length > 0 ) {
554- const partRows = Database . use ( ( db ) =>
555- db
556- . select ( )
557- . from ( PartTable )
558- . where ( inArray ( PartTable . message_id , ids ) )
559- . orderBy ( PartTable . message_id , PartTable . id )
560- . all ( ) ,
561- )
558+ const partRows = db
559+ . select ( )
560+ . from ( PartTable )
561+ . where ( inArray ( PartTable . message_id , ids ) )
562+ . orderBy ( PartTable . message_id , PartTable . id )
563+ . all ( )
562564 for ( const row of partRows ) {
563565 const next = part ( row )
564566 const list = partByMessage . get ( row . message_id )
@@ -831,15 +833,14 @@ export namespace MessageV2 {
831833 const where = before
832834 ? and ( eq ( MessageTable . session_id , input . sessionID ) , older ( before ) )
833835 : eq ( MessageTable . session_id , input . sessionID )
834- const rows = Database . use ( ( db ) =>
835- db
836- . select ( )
837- . from ( MessageTable )
838- . where ( where )
839- . orderBy ( desc ( MessageTable . time_created ) , desc ( MessageTable . id ) )
840- . limit ( input . limit + 1 )
841- . all ( ) ,
842- )
836+ const db = resolve ( input . sessionID )
837+ const rows = db
838+ . select ( )
839+ . from ( MessageTable )
840+ . where ( where )
841+ . orderBy ( desc ( MessageTable . time_created ) , desc ( MessageTable . id ) )
842+ . limit ( input . limit + 1 )
843+ . all ( )
843844 if ( rows . length === 0 ) {
844845 const row = Database . use ( ( db ) =>
845846 db . select ( { id : SessionTable . id } ) . from ( SessionTable ) . where ( eq ( SessionTable . id , input . sessionID ) ) . get ( ) ,
@@ -853,7 +854,7 @@ export namespace MessageV2 {
853854
854855 const more = rows . length > input . limit
855856 const slice = more ? rows . slice ( 0 , input . limit ) : rows
856- const items = hydrate ( slice )
857+ const items = hydrate ( db , slice )
857858 items . reverse ( )
858859 const tail = slice . at ( - 1 )
859860 return {
@@ -877,33 +878,28 @@ export namespace MessageV2 {
877878 }
878879 }
879880
880- export function parts ( message_id : MessageID ) {
881- const rows = Database . use ( ( db ) =>
882- db . select ( ) . from ( PartTable ) . where ( eq ( PartTable . message_id , message_id ) ) . orderBy ( PartTable . id ) . all ( ) ,
883- )
884- return rows . map (
885- ( row ) =>
886- ( {
887- ...row . data ,
888- id : row . id ,
889- sessionID : row . session_id ,
890- messageID : row . message_id ,
891- } ) as MessageV2 . Part ,
892- )
881+ export function parts ( mid : MessageID , sid ?: SessionID ) {
882+ const db = sid ? resolve ( sid ) : Database . Client ( )
883+ return db . select ( ) . from ( PartTable ) . where ( eq ( PartTable . message_id , mid ) ) . orderBy ( PartTable . id ) . all ( ) . map ( part )
893884 }
894885
895886 export function get ( input : { sessionID : SessionID ; messageID : MessageID } ) : WithParts {
896- const row = Database . use ( ( db ) =>
897- db
898- . select ( )
899- . from ( MessageTable )
900- . where ( and ( eq ( MessageTable . id , input . messageID ) , eq ( MessageTable . session_id , input . sessionID ) ) )
901- . get ( ) ,
902- )
887+ const db = resolve ( input . sessionID )
888+ const row = db
889+ . select ( )
890+ . from ( MessageTable )
891+ . where ( and ( eq ( MessageTable . id , input . messageID ) , eq ( MessageTable . session_id , input . sessionID ) ) )
892+ . get ( )
903893 if ( ! row ) throw new NotFoundError ( { message : `Message not found: ${ input . messageID } ` } )
904894 return {
905895 info : info ( row ) ,
906- parts : parts ( input . messageID ) ,
896+ parts : db
897+ . select ( )
898+ . from ( PartTable )
899+ . where ( eq ( PartTable . message_id , input . messageID ) )
900+ . orderBy ( PartTable . id )
901+ . all ( )
902+ . map ( part ) ,
907903 }
908904 }
909905
@@ -925,9 +921,7 @@ export namespace MessageV2 {
925921 return result
926922 }
927923
928- export const filterCompactedEffect = Effect . fnUntraced ( function * ( sessionID : SessionID ) {
929- return filterCompacted ( stream ( sessionID ) )
930- } )
924+ export const filterCompactedEffect = ( sessionID : SessionID ) => Effect . succeed ( filterCompacted ( stream ( sessionID ) ) )
931925
932926 export function fromError (
933927 e : unknown ,
@@ -979,7 +973,7 @@ export namespace MessageV2 {
979973 } ,
980974 { cause : e } ,
981975 ) . toObject ( )
982- case APICallError . isInstance ( e ) :
976+ case APICallError . isInstance ( e ) : {
983977 const parsed = ProviderError . parseAPICallError ( {
984978 providerID : ctx . providerID ,
985979 error : e ,
@@ -1005,6 +999,7 @@ export namespace MessageV2 {
1005999 } ,
10061000 { cause : e } ,
10071001 ) . toObject ( )
1002+ }
10081003 case e instanceof Error :
10091004 return new NamedError . Unknown ( { message : errorMessage ( e ) } , { cause : e } ) . toObject ( )
10101005 default :
0 commit comments