@@ -35,7 +35,7 @@ import { type ValueType } from "@cocalc/nats/types";
35
35
import { EventEmitter } from "events" ;
36
36
import {
37
37
type Subscription ,
38
- type Message as Msg ,
38
+ Message ,
39
39
type Headers ,
40
40
messageData ,
41
41
} from "@cocalc/nats/core/client" ;
@@ -54,7 +54,7 @@ import * as persistClient from "@cocalc/nats/persist/client";
54
54
import type { Client } from "@cocalc/nats/core/client" ;
55
55
import jsonStableStringify from "json-stable-stringify" ;
56
56
57
- export interface RawMsg extends Msg {
57
+ export interface RawMsg extends Message {
58
58
timestamp : number ;
59
59
seq : number ;
60
60
sessionId : string ;
@@ -267,7 +267,7 @@ export class CoreStream<T = any> extends EventEmitter {
267
267
if ( done || value == null ) {
268
268
return ;
269
269
}
270
- const m = value as Msg ;
270
+ const m = value as Message ;
271
271
if ( m . headers == null ) {
272
272
throw Error ( "missing header" ) ;
273
273
}
@@ -280,7 +280,7 @@ export class CoreStream<T = any> extends EventEmitter {
280
280
}
281
281
} ;
282
282
283
- private processPersistentMessage = ( m : Msg , noEmit : boolean ) => {
283
+ private processPersistentMessage = ( m : Message , noEmit : boolean ) => {
284
284
if ( m . headers == null ) {
285
285
throw Error ( "missing header" ) ;
286
286
}
@@ -315,7 +315,6 @@ export class CoreStream<T = any> extends EventEmitter {
315
315
} ;
316
316
317
317
private getAllFromLeader = async ( {
318
- maxWait = 30000 ,
319
318
start_seq = 0 ,
320
319
noEmit,
321
320
} : { maxWait ?: number ; start_seq ?: number ; noEmit ?: boolean } = { } ) => {
@@ -332,17 +331,12 @@ export class CoreStream<T = any> extends EventEmitter {
332
331
let d = 250 ;
333
332
while ( this . client != null ) {
334
333
try {
335
- for await ( const raw0 of await this . client . requestMany (
336
- this . subject + ".all" ,
337
- { start_seq } ,
338
- { maxWait } ,
339
- ) ) {
340
- this . lastHeartbeat = Date . now ( ) ;
341
- if ( raw0 . headers ?. done ) {
342
- // done
343
- return ;
344
- }
345
- const raw = getRawMsg ( raw0 ) ;
334
+ const resp = await this . client . request ( this . subject + ".all" , {
335
+ start_seq,
336
+ } ) ;
337
+ this . lastHeartbeat = Date . now ( ) ;
338
+ for ( const x of resp . data ) {
339
+ const raw = getRawMsg ( new Message ( x ) ) ;
346
340
if (
347
341
! this . leader &&
348
342
this . sessionId &&
@@ -396,14 +390,15 @@ export class CoreStream<T = any> extends EventEmitter {
396
390
for await ( const raw of sub ) {
397
391
if ( raw . subject . endsWith ( ".all" ) ) {
398
392
const { start_seq = 0 } = raw . data ?? { } ;
399
- //const payload = this.raw.filter((x)=>x.seq >= start_seq)
400
- for ( const [ m ] of this . raw ) {
401
- if ( m . seq >= start_seq ) {
402
- raw . respond ( m . data , { headers : m . headers } ) ;
403
- }
404
- }
405
- raw . respond ( null , { headers : { done : true } } ) ;
406
- continue ;
393
+
394
+ const payload = this . raw
395
+ . filter ( ( x ) => x [ 0 ] . seq >= start_seq )
396
+ . map ( ( x ) => {
397
+ const { headers, encoding, raw } = x [ 0 ] ;
398
+ return { headers, encoding, raw } ;
399
+ } ) ;
400
+
401
+ raw . respond ( payload ) ;
407
402
} else if ( raw . subject . endsWith ( ".send" ) ) {
408
403
const options = raw . headers ?. [ COCALC_OPTIONS_HEADER ] ;
409
404
let resp ;
@@ -414,7 +409,6 @@ export class CoreStream<T = any> extends EventEmitter {
414
409
return ;
415
410
}
416
411
raw . respond ( resp ) ;
417
- continue ;
418
412
}
419
413
}
420
414
} ;
@@ -828,7 +822,7 @@ export async function cstream<T>(
828
822
return await cache ( options ) ;
829
823
}
830
824
831
- function getRawMsg ( raw : Msg ) : RawMsg {
825
+ function getRawMsg ( raw : Message ) : RawMsg {
832
826
const {
833
827
seq = 0 ,
834
828
timestamp = 0 ,
0 commit comments