@@ -48,6 +48,14 @@ export class Service<E extends Emitter = Emitter> extends Root {
4848 * de-duplication within the configured Duplicate Window
4949 */
5050 private readonly UNIQ_ID_HEADER = 'Nats-Msg-Id' ;
51+ /**
52+ * Nats-Rollup header indicating all prior messages should be purged
53+ */
54+ private readonly ROLLUP_HEADER = 'Nats-Rollup' ;
55+ /**
56+ * Roll-up only same subject message in the stream
57+ */
58+ private readonly ROLLUP_STRATEGY = 'sub' ;
5159
5260 constructor ( private options : ServiceOptions < E > ) {
5361 super ( options . brokerConnection , options . loggerOutputFormatter ) ;
@@ -57,7 +65,7 @@ export class Service<E extends Emitter = Emitter> extends Root {
5765 if ( options . events ) {
5866 const events = Object . keys ( options . events . list ) as [ keyof E ] ;
5967 this . emitter = events . reduce ( ( result , eventName ) => {
60- result [ eventName ] = ( ( params : unknown , uniqId ?: string ) => {
68+ result [ eventName ] = ( ( params : unknown , uniqId ?: string , rollupId ?: string ) => {
6169 const subject : string [ ] = [ options . name ] ;
6270
6371 const eventOptions = options . events ?. list [ eventName ] ;
@@ -79,6 +87,11 @@ export class Service<E extends Emitter = Emitter> extends Root {
7987 settings = { headers : headers ( ) } ;
8088 settings . headers . append ( this . UNIQ_ID_HEADER , uniqId ) ;
8189 }
90+ if ( rollupId ) {
91+ settings = settings ?? { headers : headers ( ) } ;
92+ settings . headers . append ( this . ROLLUP_HEADER , this . ROLLUP_STRATEGY ) ;
93+ subject . push ( rollupId ) ;
94+ }
8295
8396 this . broker . publish ( subject . join ( '.' ) , this . buildMessage ( params ) , settings ) ;
8497 } ) as E [ keyof E ] ;
0 commit comments