@@ -3511,9 +3511,24 @@ export class BaileysStartupService extends ChannelStartupService {
35113511 users : { number : string ; jid : string ; name ?: string } [ ] ;
35123512 } = { groups : [ ] , broadcast : [ ] , users : [ ] } ;
35133513
3514+ const onWhatsapp : OnWhatsAppDto [ ] = [ ] ;
3515+
35143516 data . numbers . forEach ( ( number ) => {
35153517 const jid = createJid ( number ) ;
35163518
3519+ if ( isJidNewsletter ( jid ) ) {
3520+ onWhatsapp . push (
3521+ new OnWhatsAppDto (
3522+ jid ,
3523+ true , // Newsletters are always valid
3524+ number ,
3525+ undefined , // Can be fetched later if needed
3526+ 'newsletter' , // Indicate it's a newsletter type
3527+ ) ,
3528+ ) ;
3529+ return ;
3530+ }
3531+
35173532 if ( isJidGroup ( jid ) ) {
35183533 jids . groups . push ( { number, jid } ) ;
35193534 } else if ( jid === 'status@broadcast' ) {
@@ -3523,8 +3538,6 @@ export class BaileysStartupService extends ChannelStartupService {
35233538 }
35243539 } ) ;
35253540
3526- const onWhatsapp : OnWhatsAppDto [ ] = [ ] ;
3527-
35283541 // BROADCAST
35293542 onWhatsapp . push ( ...jids . broadcast . map ( ( { jid, number } ) => new OnWhatsAppDto ( jid , false , number ) ) ) ;
35303543
@@ -4700,6 +4713,10 @@ export class BaileysStartupService extends ChannelStartupService {
47004713 }
47014714 }
47024715
4716+ if ( isJidNewsletter ( message . key . remoteJid ) && message . key . fromMe ) {
4717+ messageRaw . status = status [ 3 ] ; // DELIVERED MESSAGE TO NEWSLETTER CHANNEL
4718+ }
4719+
47034720 return messageRaw ;
47044721 }
47054722
@@ -5119,4 +5136,52 @@ export class BaileysStartupService extends ChannelStartupService {
51195136 } ,
51205137 } ;
51215138 }
5139+
5140+ public async fetchChannels ( query : Query < Contact > ) {
5141+ const page = Number ( ( query as any ) ?. page ?? 1 ) ;
5142+ const limit = Number ( ( query as any ) ?. limit ?? ( query as any ) ?. rows ?? 50 ) ;
5143+ const skip = ( page - 1 ) * limit ;
5144+
5145+ const messages = await this . prismaRepository . message . findMany ( {
5146+ where : {
5147+ instanceId : this . instanceId ,
5148+ AND : [ { key : { path : [ 'remoteJid' ] , not : null } } ] ,
5149+ } ,
5150+ orderBy : { messageTimestamp : 'desc' } ,
5151+ select : {
5152+ key : true ,
5153+ messageTimestamp : true ,
5154+ } ,
5155+ } ) ;
5156+
5157+ const channelMap = new Map < string , { remoteJid : string ; pushName : undefined ; lastMessageTimestamp : number } > ( ) ;
5158+
5159+ for ( const msg of messages ) {
5160+ const key = msg . key as any ;
5161+ const remoteJid = key ?. remoteJid as string | undefined ;
5162+ if ( ! remoteJid || ! isJidNewsletter ( remoteJid ) ) continue ;
5163+
5164+ if ( ! channelMap . has ( remoteJid ) ) {
5165+ channelMap . set ( remoteJid , {
5166+ remoteJid,
5167+ pushName : undefined , // Push name is never stored for channels, so we set it as undefined
5168+ lastMessageTimestamp : msg . messageTimestamp ,
5169+ } ) ;
5170+ }
5171+ }
5172+
5173+ const allChannels = Array . from ( channelMap . values ( ) ) ;
5174+
5175+ const total = allChannels . length ;
5176+ const pages = Math . ceil ( total / limit ) ;
5177+ const records = allChannels . slice ( skip , skip + limit ) ;
5178+
5179+ return {
5180+ total,
5181+ pages,
5182+ currentPage : page ,
5183+ limit,
5184+ records,
5185+ } ;
5186+ }
51225187}
0 commit comments