@@ -3,6 +3,7 @@ import { TYPES } from 'core/app/types'
3
3
import { BotService } from 'core/bots'
4
4
import { BotpressConfig , ConfigProvider } from 'core/config'
5
5
import { SessionRepository , createExpiry , SessionIdFactory , DialogSession } from 'core/dialog/sessions'
6
+ import { StateManager } from 'core/dialog/state-manager'
6
7
import { JobService } from 'core/distributed'
7
8
import { Event , EventRepository } from 'core/events'
8
9
import { EventCollector } from 'core/events/event-collector'
@@ -38,7 +39,8 @@ export class DialogJanitor extends Janitor {
38
39
@inject ( TYPES . UserRepository ) private userRepo : ChannelUserRepository ,
39
40
@inject ( TYPES . JobService ) private jobService : JobService ,
40
41
@inject ( TYPES . EventCollector ) private eventCollector : EventCollector ,
41
- @inject ( TYPES . EventRepository ) private eventRepository : EventRepository
42
+ @inject ( TYPES . EventRepository ) private eventRepository : EventRepository ,
43
+ @inject ( TYPES . StateManager ) private stateManager : StateManager
42
44
) {
43
45
super ( logger )
44
46
}
@@ -113,16 +115,14 @@ export class DialogJanitor extends Janitor {
113
115
// Store the timeout event so we can detect loops
114
116
this . eventCollector . storeEvent ( InternalEvent )
115
117
116
- const { result : user } = await this . userRepo . getOrCreate ( channel , target , botId )
118
+ // Restore the state for the timeout event
119
+ await this . stateManager . restore ( InternalEvent )
117
120
118
121
// We clean the queue because that processTimeout will return the same event context
119
122
// if there is no jump, so we don't want the timeout event to process the previous queue
120
123
// The reason to return the event is to persist any changes made to session state or context
121
124
// in the session timeout hook
122
125
InternalEvent . state . context = { ...session . context , queue : undefined } as IO . DialogContext
123
- InternalEvent . state . session = session . session_data as IO . CurrentSession
124
- InternalEvent . state . user = user . attributes
125
- InternalEvent . state . temp = session . temp_data
126
126
127
127
update . event = await this . dialogEngine . processTimeout ( botId , sessionId , InternalEvent )
128
128
0 commit comments