@@ -16,6 +16,16 @@ const MAX_AUTH_RETRIES = 2;
16
16
const MAX_CONNECT_RETRIES = 5 ;
17
17
let eventEmitter ;
18
18
let creationInProgress = false ;
19
+ let timeoutRef ;
20
+
21
+ const saveSnapshot = ( ) => {
22
+ if ( timeoutRef ) clearTimeout ( timeoutRef ) ;
23
+ timeoutRef = setTimeout ( async ( ) => {
24
+ context . logger . debug ( `Saving snapshot with nextStartReplayId: ${ nextStartReplayId } ` ) ;
25
+ await context . emit ( 'snapshot' , { nextStartReplayId } ) ;
26
+ context . logger . debug ( 'Snapshot saved' ) ;
27
+ } , 2000 ) ;
28
+ } ;
19
29
20
30
const reconnectHandler = async ( reconnectSleepTime , cfg ) => {
21
31
context . logger . warn ( `Restarting in ${ Math . round ( reconnectSleepTime / 1000 ) } seconds` ) ;
@@ -92,7 +102,7 @@ async function processTrigger(msg, cfg, snapshot) {
92
102
const { credentials } = await getSecret ( this , secretId , msg . id ) ;
93
103
const accessToken = credentials . access_token ;
94
104
const instanceUrl = credentials . undefined_params . instance_url ;
95
- nextStartReplayId = snapshot ?. nextStartReplayId || initialReplayId ;
105
+ nextStartReplayId = nextStartReplayId || snapshot ?. nextStartReplayId || initialReplayId ;
96
106
97
107
let emittedOrAlive = false ;
98
108
const timeOut = async ( t ) => {
@@ -126,18 +136,18 @@ async function processTrigger(msg, cfg, snapshot) {
126
136
}
127
137
context . logger . info ( 'SalesForce connected' ) ;
128
138
129
- eventEmitter = await client . subscribe ( eventCountPerRequest , snapshot ?. nextStartReplayId || initialReplayId ) ;
139
+ eventEmitter = await client . subscribe ( eventCountPerRequest , nextStartReplayId ) ;
130
140
context . logger . info ( 'Streaming client created' ) ;
131
141
132
142
eventEmitter . on ( 'data' , async ( event ) => {
133
- context . logger . info ( ' Got new message, emitting' ) ;
143
+ context . logger . info ( ` Got new message, replayId: ${ event . event . replayId } , emitting` ) ;
134
144
await context . emit ( 'data' , messages . newMessageWithBody ( event ) ) ;
135
- nextStartReplayId = event . replayId ;
145
+ nextStartReplayId = event . event . replayId ;
136
146
emittedOrAlive = true ;
137
- await this . emit ( 'snapshot' , { nextStartReplayId } ) ;
147
+ saveSnapshot ( ) ;
138
148
} ) ;
139
149
140
- eventEmitter . once ( 'keepalive' , ( data ) => { context . logger . info ( ' Got keepalive message' ) ; } ) ;
150
+ eventEmitter . once ( 'keepalive' , ( data ) => { context . logger . info ( ` Got keepalive message, replayId: ${ data . latestReplayId } ` ) ; } ) ;
141
151
142
152
try {
143
153
await Promise . race ( [
@@ -147,7 +157,7 @@ async function processTrigger(msg, cfg, snapshot) {
147
157
keepaliveFailureRetry = 1 ;
148
158
emittedOrAlive = true ;
149
159
nextStartReplayId = data . latestReplayId ;
150
- await this . emit ( 'snapshot' , { nextStartReplayId } ) ;
160
+ saveSnapshot ( ) ;
151
161
resolve ( ) ;
152
162
} ) ;
153
163
eventEmitter . on ( 'error' , ( error ) => {
0 commit comments