@@ -550,18 +550,20 @@ export namespace MessageV2 {
550550 and ( eq ( MessageTable . time_created , row . time ) , lt ( MessageTable . id , row . id ) ) ,
551551 )
552552
553- function hydrate ( rows : ( typeof MessageTable . $inferSelect ) [ ] ) {
553+ function resolve ( sid : SessionID ) {
554+ return Database . resolveSession ( sid )
555+ }
556+
557+ function hydrate ( db : Database . TxOrDb , rows : ( typeof MessageTable . $inferSelect ) [ ] ) {
554558 const ids = rows . map ( ( row ) => row . id )
555559 const partByMessage = new Map < string , MessageV2 . Part [ ] > ( )
556560 if ( ids . length > 0 ) {
557- const partRows = Database . use ( ( db ) =>
558- db
559- . select ( )
560- . from ( PartTable )
561- . where ( inArray ( PartTable . message_id , ids ) )
562- . orderBy ( PartTable . message_id , PartTable . id )
563- . all ( ) ,
564- )
561+ const partRows = db
562+ . select ( )
563+ . from ( PartTable )
564+ . where ( inArray ( PartTable . message_id , ids ) )
565+ . orderBy ( PartTable . message_id , PartTable . id )
566+ . all ( )
565567 for ( const row of partRows ) {
566568 const next = part ( row )
567569 const list = partByMessage . get ( row . message_id )
@@ -850,15 +852,14 @@ export namespace MessageV2 {
850852 const where = before
851853 ? and ( eq ( MessageTable . session_id , input . sessionID ) , older ( before ) )
852854 : eq ( MessageTable . session_id , input . sessionID )
853- const rows = Database . use ( ( db ) =>
854- db
855- . select ( )
856- . from ( MessageTable )
857- . where ( where )
858- . orderBy ( desc ( MessageTable . time_created ) , desc ( MessageTable . id ) )
859- . limit ( input . limit + 1 )
860- . all ( ) ,
861- )
855+ const db = resolve ( input . sessionID )
856+ const rows = db
857+ . select ( )
858+ . from ( MessageTable )
859+ . where ( where )
860+ . orderBy ( desc ( MessageTable . time_created ) , desc ( MessageTable . id ) )
861+ . limit ( input . limit + 1 )
862+ . all ( )
862863 if ( rows . length === 0 ) {
863864 const row = Database . use ( ( db ) =>
864865 db . select ( { id : SessionTable . id } ) . from ( SessionTable ) . where ( eq ( SessionTable . id , input . sessionID ) ) . get ( ) ,
@@ -872,7 +873,7 @@ export namespace MessageV2 {
872873
873874 const more = rows . length > input . limit
874875 const slice = more ? rows . slice ( 0 , input . limit ) : rows
875- const items = hydrate ( slice )
876+ const items = hydrate ( db , slice )
876877 items . reverse ( )
877878 const tail = slice . at ( - 1 )
878879 return {
@@ -896,33 +897,28 @@ export namespace MessageV2 {
896897 }
897898 }
898899
899- export function parts ( message_id : MessageID ) {
900- const rows = Database . use ( ( db ) =>
901- db . select ( ) . from ( PartTable ) . where ( eq ( PartTable . message_id , message_id ) ) . orderBy ( PartTable . id ) . all ( ) ,
902- )
903- return rows . map (
904- ( row ) =>
905- ( {
906- ...row . data ,
907- id : row . id ,
908- sessionID : row . session_id ,
909- messageID : row . message_id ,
910- } ) as MessageV2 . Part ,
911- )
900+ export function parts ( mid : MessageID , sid ?: SessionID ) {
901+ const db = sid ? resolve ( sid ) : Database . Client ( )
902+ return db . select ( ) . from ( PartTable ) . where ( eq ( PartTable . message_id , mid ) ) . orderBy ( PartTable . id ) . all ( ) . map ( part )
912903 }
913904
914905 export function get ( input : { sessionID : SessionID ; messageID : MessageID } ) : WithParts {
915- const row = Database . use ( ( db ) =>
916- db
917- . select ( )
918- . from ( MessageTable )
919- . where ( and ( eq ( MessageTable . id , input . messageID ) , eq ( MessageTable . session_id , input . sessionID ) ) )
920- . get ( ) ,
921- )
906+ const db = resolve ( input . sessionID )
907+ const row = db
908+ . select ( )
909+ . from ( MessageTable )
910+ . where ( and ( eq ( MessageTable . id , input . messageID ) , eq ( MessageTable . session_id , input . sessionID ) ) )
911+ . get ( )
922912 if ( ! row ) throw new NotFoundError ( { message : `Message not found: ${ input . messageID } ` } )
923913 return {
924914 info : info ( row ) ,
925- parts : parts ( input . messageID ) ,
915+ parts : db
916+ . select ( )
917+ . from ( PartTable )
918+ . where ( eq ( PartTable . message_id , input . messageID ) )
919+ . orderBy ( PartTable . id )
920+ . all ( )
921+ . map ( part ) ,
926922 }
927923 }
928924
@@ -944,9 +940,7 @@ export namespace MessageV2 {
944940 return result
945941 }
946942
947- export const filterCompactedEffect = Effect . fnUntraced ( function * ( sessionID : SessionID ) {
948- return filterCompacted ( stream ( sessionID ) )
949- } )
943+ export const filterCompactedEffect = ( sessionID : SessionID ) => Effect . succeed ( filterCompacted ( stream ( sessionID ) ) )
950944
951945 export function fromError (
952946 e : unknown ,
@@ -998,7 +992,7 @@ export namespace MessageV2 {
998992 } ,
999993 { cause : e } ,
1000994 ) . toObject ( )
1001- case APICallError . isInstance ( e ) :
995+ case APICallError . isInstance ( e ) : {
1002996 const parsed = ProviderError . parseAPICallError ( {
1003997 providerID : ctx . providerID ,
1004998 error : e ,
@@ -1024,6 +1018,7 @@ export namespace MessageV2 {
10241018 } ,
10251019 { cause : e } ,
10261020 ) . toObject ( )
1021+ }
10271022 case e instanceof Error :
10281023 return new NamedError . Unknown ( { message : errorMessage ( e ) } , { cause : e } ) . toObject ( )
10291024 default :
0 commit comments