From 4358f1d51c588e76d03aa677f9b7deabbbc1af9d Mon Sep 17 00:00:00 2001 From: RomanDavydchuk Date: Wed, 29 Apr 2026 16:57:52 +0300 Subject: [PATCH] fix(Telegram Trigger Node): Drop pending updates when creating a new webhook (#29103) --- .../nodes/Telegram/TelegramTrigger.node.ts | 7 ++- .../tests/TelegramTrigger.node.test.ts | 45 ++++++++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/packages/nodes-base/nodes/Telegram/TelegramTrigger.node.ts b/packages/nodes-base/nodes/Telegram/TelegramTrigger.node.ts index 2df8701e3f1..db6ba8f2122 100644 --- a/packages/nodes-base/nodes/Telegram/TelegramTrigger.node.ts +++ b/packages/nodes-base/nodes/Telegram/TelegramTrigger.node.ts @@ -19,8 +19,8 @@ export class TelegramTrigger implements INodeType { name: 'telegramTrigger', icon: 'file:telegram.svg', group: ['trigger'], - version: [1, 1.1, 1.2], - defaultVersion: 1.2, + version: [1, 1.1, 1.2, 1.3], + defaultVersion: 1.3, subtitle: '=Updates: {{$parameter["updates"].join(", ")}}', description: 'Starts the workflow on a Telegram update', defaults: { @@ -226,10 +226,13 @@ export class TelegramTrigger implements INodeType { const secret_token = getSecretToken.call(this); + const drop_pending_updates = this.getNode().typeVersion >= 1.3; + const body = { url: webhookUrl, allowed_updates: allowedUpdates, secret_token, + drop_pending_updates, }; await apiRequest.call(this, 'POST', endpoint, body); diff --git a/packages/nodes-base/nodes/Telegram/tests/TelegramTrigger.node.test.ts b/packages/nodes-base/nodes/Telegram/tests/TelegramTrigger.node.test.ts index c926544b44d..165a6fb55ed 100644 --- a/packages/nodes-base/nodes/Telegram/tests/TelegramTrigger.node.test.ts +++ b/packages/nodes-base/nodes/Telegram/tests/TelegramTrigger.node.test.ts @@ -1,8 +1,9 @@ import { mock } from 'jest-mock-extended'; -import { type INode, type Workflow } from 'n8n-workflow'; +import type { IHookFunctions, INode, Workflow } from 'n8n-workflow'; import { testWebhookTriggerNode } from '@test/nodes/TriggerHelpers'; +import { apiRequest } from '../GenericFunctions'; import { TelegramTrigger } from '../TelegramTrigger.node'; jest.mock('../GenericFunctions', () => { @@ -173,4 +174,46 @@ describe('TelegramTrigger', () => { expect(responseData).toEqual({ workflowData: [[{ json: mockResult }]] }); }); }); + + describe('create', () => { + test('should set drop_pending_updates for version 1.3', async () => { + const telegramTrigger = new TelegramTrigger(); + const mockHookFunctions = mock({ + getNodeWebhookUrl: jest.fn().mockReturnValue('https://example.com/webhook'), + getNodeParameter: jest.fn().mockReturnValue(['message']), + getNode: jest.fn().mockReturnValue({ id: '2', typeVersion: 1.3 }), + getWorkflow: jest.fn().mockReturnValue({ id: '1' }), + }); + + await telegramTrigger.webhookMethods.default.create.call(mockHookFunctions); + + expect(jest.mocked(apiRequest)).toHaveBeenCalledWith( + 'POST', + 'setWebhook', + expect.objectContaining({ + drop_pending_updates: true, + }), + ); + }); + + test('should not set drop_pending_updates for version 1.2', async () => { + const telegramTrigger = new TelegramTrigger(); + const mockHookFunctions = mock({ + getNodeWebhookUrl: jest.fn().mockReturnValue('https://example.com/webhook'), + getNodeParameter: jest.fn().mockReturnValue(['*']), + getNode: jest.fn().mockReturnValue({ id: '2', typeVersion: 1.2 }), + getWorkflow: jest.fn().mockReturnValue({ id: '1' }), + }); + + await telegramTrigger.webhookMethods.default.create.call(mockHookFunctions); + + expect(jest.mocked(apiRequest)).toHaveBeenCalledWith( + 'POST', + 'setWebhook', + expect.objectContaining({ + drop_pending_updates: false, + }), + ); + }); + }); });