@@ -28,6 +28,12 @@ import type { TelegramBotDeps } from "./bot-deps.js";
2828import { registerTelegramHandlers } from "./bot-handlers.runtime.js" ;
2929import { createTelegramMessageProcessor } from "./bot-message.js" ;
3030import { registerTelegramNativeCommands } from "./bot-native-commands.js" ;
31+ import {
32+ getTelegramSpooledReplayDeferredParticipant ,
33+ isTelegramSpooledReplayUpdate ,
34+ runWithTelegramUpdateProcessingFrame ,
35+ TelegramSpooledReplayProcessingError ,
36+ } from "./bot-processing-outcome.js" ;
3137import { createTelegramUpdateTracker } from "./bot-update-tracker.js" ;
3238import type { TelegramUpdateKeyContext } from "./bot-updates.js" ;
3339import { resolveDefaultAgentId } from "./bot.agent.runtime.js" ;
@@ -212,7 +218,29 @@ export function createTelegramBotCore(
212218 return ;
213219 }
214220 try {
215- await next ( ) ;
221+ const { result } = await runWithTelegramUpdateProcessingFrame ( async ( ) => {
222+ await next ( ) ;
223+ } ) ;
224+ const deferredWork = getTelegramSpooledReplayDeferredParticipant ( ) ;
225+ if ( deferredWork ) {
226+ void deferredWork . task
227+ . then ( ( deferredResult ) => {
228+ updateTracker . finishUpdate ( begin . update , {
229+ completed : deferredResult . kind !== "failed-retryable" ,
230+ } ) ;
231+ } )
232+ . catch ( ( ) => {
233+ updateTracker . finishUpdate ( begin . update , { completed : false } ) ;
234+ } ) ;
235+ return ;
236+ }
237+ if ( result ?. kind === "failed-retryable" ) {
238+ if ( isTelegramSpooledReplayUpdate ( ctx . update ) ) {
239+ throw new TelegramSpooledReplayProcessingError ( result . error ) ;
240+ }
241+ updateTracker . finishUpdate ( begin . update , { completed : true } ) ;
242+ return ;
243+ }
216244 updateTracker . finishUpdate ( begin . update , { completed : true } ) ;
217245 } catch ( error ) {
218246 updateTracker . finishUpdate ( begin . update , { completed : false } ) ;
0 commit comments