@catalogicus-international/n8n-nodes-telegram-advance 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +30 -40
  2. package/dist/nodes/TelegramAdvance/TelegramAdvance.node.d.ts +1 -2
  3. package/dist/nodes/TelegramAdvance/TelegramAdvance.node.js +126 -59
  4. package/dist/nodes/TelegramAdvance/TelegramAdvance.node.js.map +1 -1
  5. package/dist/nodes/matchResponse.d.ts +16 -0
  6. package/dist/nodes/matchResponse.js +60 -0
  7. package/dist/nodes/matchResponse.js.map +1 -0
  8. package/dist/nodes/pendingStore.d.ts +0 -22
  9. package/dist/nodes/pendingStore.js +0 -4
  10. package/dist/nodes/pendingStore.js.map +1 -1
  11. package/dist/nodes/shared.d.ts +5 -4
  12. package/dist/nodes/shared.js +2 -5
  13. package/dist/nodes/shared.js.map +1 -1
  14. package/package.json +2 -3
  15. package/dist/nodes/TelegramAdvanceTrigger/TelegramAdvanceTrigger.node.d.ts +0 -5
  16. package/dist/nodes/TelegramAdvanceTrigger/TelegramAdvanceTrigger.node.js +0 -105
  17. package/dist/nodes/TelegramAdvanceTrigger/TelegramAdvanceTrigger.node.js.map +0 -1
  18. package/dist/nodes/TelegramAdvanceTrigger/TelegramAdvanceTrigger.node.json +0 -22
  19. package/dist/nodes/pendingStoreFactory.d.ts +0 -5
  20. package/dist/nodes/pendingStoreFactory.js +0 -8
  21. package/dist/nodes/pendingStoreFactory.js.map +0 -1
  22. package/dist/nodes/processUpdate.d.ts +0 -7
  23. package/dist/nodes/processUpdate.js +0 -147
  24. package/dist/nodes/processUpdate.js.map +0 -1
  25. package/dist/nodes/staticDataPendingStore.d.ts +0 -17
  26. package/dist/nodes/staticDataPendingStore.js +0 -66
  27. package/dist/nodes/staticDataPendingStore.js.map +0 -1
  28. package/dist/nodes/wait.d.ts +0 -2
  29. package/dist/nodes/wait.js +0 -15
  30. package/dist/nodes/wait.js.map +0 -1
package/README.md CHANGED
@@ -1,15 +1,18 @@
1
1
  # @catalogicus-international/n8n-nodes-telegram-advance
2
2
 
3
3
  An n8n community package for Telegram-native human-in-the-loop workflows.
4
- It sends a question and pauses the current execution until the user responds
5
- inside Telegram. No n8n approval page or external response form is opened.
4
+ It sends a question and waits for the user to respond inside Telegram with an
5
+ inline button or a reply. No n8n approval page, redirect link, or external
6
+ response form is opened, and no separate trigger node is required.
6
7
 
7
8
  ## Nodes
8
9
 
9
10
  ### Telegram Advance
10
11
 
11
- Use this node to send a regular Telegram message or pause a workflow until a
12
- human responds. The send-and-wait operation supports:
12
+ Use this node to send a regular Telegram message or wait until a human responds.
13
+ When asking a question, the node sends the message and then polls Telegram
14
+ (`getUpdates`) itself until the user answers or the wait limit is reached — all
15
+ within a single execution. The send-and-wait operation supports:
13
16
 
14
17
  - **Approval** — approve and decline inline buttons;
15
18
  - **Choice** — custom inline buttons, for example a product or delivery option;
@@ -39,55 +42,42 @@ The node resumes with data shaped like:
39
42
  Approval responses also contain `approved: true` or `approved: false`.
40
43
  Free-text responses contain `text` and return the same value in `value`.
41
44
 
42
- ### Telegram Advance Trigger
45
+ #### Wait settings
43
46
 
44
- Add exactly one trigger for the bot to the **same workflow** as the waiting
45
- Telegram Advance nodes, then activate the workflow. The trigger polls Telegram
46
- with long polling (`getUpdates`) and routes button clicks or message replies to
47
- the correct waiting execution. Because it polls, n8n needs no public URL or
48
- inbound HTTPS only outbound access to `api.telegram.org`. This is the more
49
- reliable transport when inbound webhook delivery is blocked or filtered.
50
-
51
- The trigger emits a small internal event with `telegramAdvanceRouted: true`
52
- after a response is routed. Leaving the trigger disconnected is the simplest
53
- setup. If you connect it to other nodes, filter out routed events unless you
54
- intentionally want to process them.
55
-
56
- The trigger can also emit Telegram messages and callbacks that do not belong
57
- to a waiting question. Disable **Emit Unmatched Updates** if the workflow only
58
- uses the trigger as an internal response router.
47
+ - **Wait Limit Amount / Unit** how long the node keeps polling before giving
48
+ up. The node holds the execution open for this whole time, so prefer minutes
49
+ for interactive approvals.
50
+ - **Poll Interval (Seconds)** how long each `getUpdates` long-poll waits for
51
+ Telegram before reconnecting (Telegram returns early as soon as an update
52
+ arrives).
53
+ - **On Timeout** — return a `{ "timedOut": true }` item so you can branch on it,
54
+ or throw an error.
59
55
 
60
56
  ## Setup
61
57
 
62
58
  1. Create a bot with [BotFather](https://t.me/BotFather) and copy its token.
63
59
  2. Create `Telegram Advance API` credentials in n8n.
64
- 3. Add `Telegram Advance Trigger` to the workflow and select the credentials.
65
- 4. Add `Telegram Advance` where the workflow should send a message or pause for
66
- a response.
67
- 5. Activate the workflow.
60
+ 3. Add `Telegram Advance` where the workflow should send a message or ask a
61
+ question, and select the credentials.
68
62
 
69
- Telegram permits only one `getUpdates` consumer per bot. Do not use the same bot
70
- with another Telegram Trigger in a different active workflow, and do not run a
71
- webhook on the same bot. On activation the trigger clears any existing webhook so
72
- polling can take over.
63
+ No public URL, inbound HTTPS, or separate trigger is required only outbound
64
+ access to `api.telegram.org`.
73
65
 
74
66
  For free-text questions, the user must reply to the bot's question message.
75
- This lets the trigger distinguish several concurrent pending questions in the
76
- same chat.
67
+ This lets the node distinguish its own awaited answer from unrelated chat
68
+ messages.
77
69
 
78
70
  ## Reliability notes
79
71
 
80
- Pending response routes are stored in the workflow's global static data.
81
- Responses are claimed before an execution is resumed, which makes a duplicate
82
- delivery of the same update harmless. The polling offset is persisted in the
83
- node's static data, so a restart resumes from the last acknowledged update.
84
-
85
- This storage mode is intended for a single n8n instance running in regular
86
- execution mode. Queue mode and multiple workers are not supported because
87
- workflow static data is not a distributed, atomic store.
72
+ While a question is waiting, the node polls `getUpdates` from inside the running
73
+ execution, so the execution stays active (and holds a worker) until the user
74
+ answers or the wait limit elapses. Keep wait limits short for interactive
75
+ approvals.
88
76
 
89
- Expired routes are removed when the store is accessed. Routes without a
90
- timeout remain until the user responds.
77
+ Telegram permits only one `getUpdates` consumer per bot. Do not run a Telegram
78
+ webhook or another poller (including another waiting Telegram Advance question)
79
+ on the same bot at the same time. Before polling, the node clears any existing
80
+ webhook so `getUpdates` can take over.
91
81
 
92
82
  ## Development
93
83
 
@@ -1,6 +1,5 @@
1
- import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription, IWebhookFunctions, IWebhookResponseData } from 'n8n-workflow';
1
+ import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
2
  export declare class TelegramAdvance implements INodeType {
3
3
  description: INodeTypeDescription;
4
- webhook(this: IWebhookFunctions): Promise<IWebhookResponseData>;
5
4
  execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
6
5
  }
@@ -3,10 +3,46 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TelegramAdvance = void 0;
4
4
  const crypto_1 = require("crypto");
5
5
  const n8n_workflow_1 = require("n8n-workflow");
6
+ const matchResponse_1 = require("../matchResponse");
6
7
  const question_1 = require("../question");
7
- const pendingStoreFactory_1 = require("../pendingStoreFactory");
8
8
  const shared_1 = require("../shared");
9
- const wait_1 = require("../wait");
9
+ function getWaitLimitMs(amount, unit) {
10
+ const multipliers = {
11
+ minutes: 60 * 1000,
12
+ hours: 60 * 60 * 1000,
13
+ days: 24 * 60 * 60 * 1000,
14
+ };
15
+ return Math.max(0, amount) * multipliers[unit];
16
+ }
17
+ async function bestEffort(operation) {
18
+ try {
19
+ await operation();
20
+ }
21
+ catch {
22
+ }
23
+ }
24
+ async function pollForResponse(context, pending, waitLimitMs, pollSeconds) {
25
+ const deadline = Date.now() + waitLimitMs;
26
+ let offset = 0;
27
+ while (Date.now() < deadline) {
28
+ const remainingMs = deadline - Date.now();
29
+ const timeout = Math.max(1, Math.min(pollSeconds, Math.ceil(remainingMs / 1000)));
30
+ const updates = await (0, shared_1.telegramApiRequest)(context, 'getUpdates', {
31
+ offset,
32
+ timeout,
33
+ allowed_updates: ['callback_query', 'message'],
34
+ }, { timeoutMs: (timeout + 10) * 1000 });
35
+ for (const update of updates) {
36
+ offset = update.update_id + 1;
37
+ const matched = (0, matchResponse_1.matchResponse)(pending, update);
38
+ if (matched) {
39
+ await bestEffort(() => (0, shared_1.telegramApiRequest)(context, 'getUpdates', { offset, timeout: 0 }));
40
+ return matched;
41
+ }
42
+ }
43
+ }
44
+ return undefined;
45
+ }
10
46
  class TelegramAdvance {
11
47
  constructor() {
12
48
  this.description = {
@@ -28,18 +64,6 @@ class TelegramAdvance {
28
64
  required: true,
29
65
  },
30
66
  ],
31
- waitingNodeTooltip: "Execution will continue after the user's Telegram response",
32
- webhooks: [
33
- {
34
- name: 'default',
35
- httpMethod: 'POST',
36
- responseMode: 'onReceived',
37
- responseData: '',
38
- path: '={{ $nodeId }}',
39
- restartWebhook: true,
40
- isFullPath: true,
41
- },
42
- ],
43
67
  properties: [
44
68
  {
45
69
  displayName: 'Operation',
@@ -63,11 +87,11 @@ class TelegramAdvance {
63
87
  default: 'sendAndWait',
64
88
  },
65
89
  {
66
- displayName: 'Telegram Advance Trigger Required',
67
- name: 'triggerNotice',
90
+ displayName: 'Self-Contained Wait',
91
+ name: 'waitNotice',
68
92
  type: 'notice',
69
93
  default: '',
70
- description: 'Add and activate Telegram Advance Trigger in this same workflow. It polls Telegram (getUpdates) for button clicks and message replies for all waiting executions, so no public URL is required. Pending questions are kept in workflow static data, so this requires a single-instance n8n (regular execution mode).',
94
+ description: 'This node sends the question and then polls Telegram (getUpdates) itself until the user answers with an inline button or a reply, or the wait limit is reached. No public URL, separate trigger, or external store is required. Telegram allows only one getUpdates consumer per bot, so do not run a Telegram webhook or another poller on the same bot while a question is waiting.',
71
95
  displayOptions: { show: { operation: ['sendAndWait'] } },
72
96
  },
73
97
  {
@@ -300,23 +324,16 @@ class TelegramAdvance {
300
324
  ],
301
325
  },
302
326
  {
303
- displayName: 'Limit Wait Time',
304
- name: 'limitWaitTime',
305
- type: 'boolean',
306
- default: false,
307
- description: 'Whether to resume automatically if nobody responds',
308
- displayOptions: { show: { operation: ['sendAndWait'] } },
309
- },
310
- {
311
- displayName: 'Wait Amount',
327
+ displayName: 'Wait Limit Amount',
312
328
  name: 'waitAmount',
313
329
  type: 'number',
314
330
  typeOptions: { minValue: 0.1, numberPrecision: 2 },
315
- default: 1,
316
- displayOptions: { show: { operation: ['sendAndWait'], limitWaitTime: [true] } },
331
+ default: 5,
332
+ description: 'How long to keep polling Telegram for an answer before giving up. The node holds the execution open for this whole time, so prefer minutes for human-in-the-loop approvals.',
333
+ displayOptions: { show: { operation: ['sendAndWait'] } },
317
334
  },
318
335
  {
319
- displayName: 'Wait Unit',
336
+ displayName: 'Wait Limit Unit',
320
337
  name: 'waitUnit',
321
338
  type: 'options',
322
339
  options: [
@@ -324,19 +341,40 @@ class TelegramAdvance {
324
341
  { name: 'Hours', value: 'hours' },
325
342
  { name: 'Minutes', value: 'minutes' },
326
343
  ],
327
- default: 'hours',
328
- displayOptions: { show: { operation: ['sendAndWait'], limitWaitTime: [true] } },
344
+ default: 'minutes',
345
+ displayOptions: { show: { operation: ['sendAndWait'] } },
346
+ },
347
+ {
348
+ displayName: 'Poll Interval (Seconds)',
349
+ name: 'pollInterval',
350
+ type: 'number',
351
+ typeOptions: { minValue: 1, maxValue: 50 },
352
+ default: 25,
353
+ description: 'How long each getUpdates long-poll waits for Telegram before reconnecting. Telegram holds the request open until an update arrives or this timeout elapses, so a higher value means fewer reconnects.',
354
+ displayOptions: { show: { operation: ['sendAndWait'] } },
355
+ },
356
+ {
357
+ displayName: 'On Timeout',
358
+ name: 'onTimeout',
359
+ type: 'options',
360
+ options: [
361
+ {
362
+ name: 'Return Timeout Item',
363
+ value: 'return',
364
+ description: 'Continue the workflow with a timed-out item so you can branch on it',
365
+ },
366
+ {
367
+ name: 'Throw Error',
368
+ value: 'error',
369
+ description: 'Fail the node if nobody answers within the wait limit',
370
+ },
371
+ ],
372
+ default: 'return',
373
+ displayOptions: { show: { operation: ['sendAndWait'] } },
329
374
  },
330
375
  ],
331
376
  };
332
377
  }
333
- async webhook() {
334
- const response = this.getBodyData();
335
- return {
336
- webhookResponse: { ok: true },
337
- workflowData: [[{ json: response }]],
338
- };
339
- }
340
378
  async execute() {
341
379
  var _a;
342
380
  const operation = this.getNodeParameter('operation', 0);
@@ -372,30 +410,59 @@ class TelegramAdvance {
372
410
  };
373
411
  if (parseMode !== 'none')
374
412
  body.parse_mode = parseMode;
413
+ await (0, shared_1.telegramApiRequest)(this, 'deleteWebhook', { drop_pending_updates: false });
375
414
  const sentMessage = await (0, shared_1.telegramApiRequest)(this, 'sendMessage', body);
376
- const limitWaitTime = this.getNodeParameter('limitWaitTime', 0, false);
377
- const waitTill = (0, wait_1.getWaitTill)(limitWaitTime, this.getNodeParameter('waitAmount', 0, 1), this.getNodeParameter('waitUnit', 0, 'hours'));
378
- const store = await (0, pendingStoreFactory_1.createPendingStore)(this);
379
- try {
380
- await store.save({
381
- token,
382
- resumeUrl: this.getSignedResumeUrl(),
383
- chatId,
384
- messageId: sentMessage.message_id,
385
- responseType,
386
- options: responseOptions,
387
- allowedUserIds: (0, question_1.parseUserIds)(options.allowedUserIds),
388
- acknowledgementText: String((_a = options.acknowledgementText) !== null && _a !== void 0 ? _a : 'Response recorded'),
389
- removeButtons: options.removeButtons !== false,
390
- createdAt: new Date().toISOString(),
391
- ...(limitWaitTime ? { expiresAt: waitTill.toISOString() } : {}),
392
- });
415
+ const pending = {
416
+ token,
417
+ chatId,
418
+ messageId: sentMessage.message_id,
419
+ responseType,
420
+ options: responseOptions,
421
+ allowedUserIds: (0, question_1.parseUserIds)(options.allowedUserIds),
422
+ };
423
+ const acknowledgementText = String((_a = options.acknowledgementText) !== null && _a !== void 0 ? _a : 'Response recorded');
424
+ const removeButtons = options.removeButtons !== false;
425
+ const waitLimitMs = getWaitLimitMs(this.getNodeParameter('waitAmount', 0, 5), this.getNodeParameter('waitUnit', 0, 'minutes'));
426
+ const pollSeconds = Math.max(1, Math.min(50, this.getNodeParameter('pollInterval', 0, 25)));
427
+ const matched = await pollForResponse(this, pending, waitLimitMs, pollSeconds);
428
+ if (!matched) {
429
+ if (this.getNodeParameter('onTimeout', 0, 'return') === 'error') {
430
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No Telegram response received before the wait limit');
431
+ }
432
+ return [
433
+ [
434
+ {
435
+ json: {
436
+ timedOut: true,
437
+ questionMessageId: sentMessage.message_id,
438
+ chat: { id: chatId },
439
+ },
440
+ pairedItem: { item: 0 },
441
+ },
442
+ ],
443
+ ];
444
+ }
445
+ if (matched.callbackQueryId) {
446
+ await bestEffort(() => (0, shared_1.telegramApiRequest)(this, 'answerCallbackQuery', {
447
+ callback_query_id: matched.callbackQueryId,
448
+ ...(acknowledgementText ? { text: acknowledgementText.slice(0, 200) } : {}),
449
+ }));
450
+ if (removeButtons) {
451
+ await bestEffort(() => (0, shared_1.telegramApiRequest)(this, 'editMessageReplyMarkup', {
452
+ chat_id: chatId,
453
+ message_id: sentMessage.message_id,
454
+ reply_markup: { inline_keyboard: [] },
455
+ }));
456
+ }
393
457
  }
394
- finally {
395
- store.close();
458
+ else if (acknowledgementText) {
459
+ await bestEffort(() => (0, shared_1.telegramApiRequest)(this, 'sendMessage', {
460
+ chat_id: chatId,
461
+ text: acknowledgementText,
462
+ reply_parameters: { message_id: matched.response.responseMessageId },
463
+ }));
396
464
  }
397
- await this.putExecutionToWait(waitTill);
398
- return [inputData];
465
+ return [[{ json: { response: matched.response }, pairedItem: { item: 0 } }]];
399
466
  }
400
467
  catch (error) {
401
468
  if (this.continueOnFail()) {
@@ -1 +1 @@
1
- {"version":3,"file":"TelegramAdvance.node.js","sourceRoot":"","sources":["../../../nodes/TelegramAdvance/TelegramAdvance.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TelegramAdvance.node.js","sourceRoot":"","sources":["../../../nodes/TelegramAdvance/TelegramAdvance.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { IDataObject } from 'n8n-workflow';
2
+ import type { PendingOption, PendingResponseType } from './pendingStore';
3
+ import type { TelegramUpdate } from './shared';
4
+ export interface PendingQuestion {
5
+ token: string;
6
+ chatId: string;
7
+ messageId: number;
8
+ responseType: PendingResponseType;
9
+ options: PendingOption[];
10
+ allowedUserIds: string[];
11
+ }
12
+ export interface MatchedResponse {
13
+ response: IDataObject;
14
+ callbackQueryId?: string;
15
+ }
16
+ export declare function matchResponse(pending: PendingQuestion, update: TelegramUpdate): MatchedResponse | undefined;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.matchResponse = matchResponse;
4
+ const pendingStore_1 = require("./pendingStore");
5
+ function isAllowedUser(pending, user) {
6
+ if (pending.allowedUserIds.length === 0)
7
+ return true;
8
+ return user !== undefined && pending.allowedUserIds.includes(String(user.id));
9
+ }
10
+ function matchResponse(pending, update) {
11
+ var _a, _b, _c, _d;
12
+ const callback = update.callback_query;
13
+ const parsed = (0, pendingStore_1.parseCallbackData)(callback === null || callback === void 0 ? void 0 : callback.data);
14
+ if (callback && parsed && parsed.token === pending.token) {
15
+ const selected = pending.options[parsed.optionIndex];
16
+ if (!selected ||
17
+ String((_a = callback.message) === null || _a === void 0 ? void 0 : _a.chat.id) !== pending.chatId ||
18
+ ((_b = callback.message) === null || _b === void 0 ? void 0 : _b.message_id) !== pending.messageId ||
19
+ !isAllowedUser(pending, callback.from)) {
20
+ return undefined;
21
+ }
22
+ return {
23
+ callbackQueryId: callback.id,
24
+ response: {
25
+ type: pending.responseType,
26
+ value: selected.value,
27
+ label: selected.label,
28
+ ...(selected.approved === undefined ? {} : { approved: selected.approved }),
29
+ user: callback.from,
30
+ chat: (_c = callback.message) === null || _c === void 0 ? void 0 : _c.chat,
31
+ questionMessageId: pending.messageId,
32
+ callbackQueryId: callback.id,
33
+ receivedAt: new Date().toISOString(),
34
+ },
35
+ };
36
+ }
37
+ const message = update.message;
38
+ const repliedMessageId = (_d = message === null || message === void 0 ? void 0 : message.reply_to_message) === null || _d === void 0 ? void 0 : _d.message_id;
39
+ if (pending.responseType === 'text' &&
40
+ message &&
41
+ repliedMessageId === pending.messageId &&
42
+ String(message.chat.id) === pending.chatId &&
43
+ isAllowedUser(pending, message.from) &&
44
+ typeof message.text === 'string') {
45
+ return {
46
+ response: {
47
+ type: 'text',
48
+ value: message.text,
49
+ text: message.text,
50
+ user: message.from,
51
+ chat: message.chat,
52
+ questionMessageId: pending.messageId,
53
+ responseMessageId: message.message_id,
54
+ receivedAt: new Date().toISOString(),
55
+ },
56
+ };
57
+ }
58
+ return undefined;
59
+ }
60
+ //# sourceMappingURL=matchResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchResponse.js","sourceRoot":"","sources":["../../nodes/matchResponse.ts"],"names":[],"mappings":"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"}
@@ -5,28 +5,6 @@ export interface PendingOption {
5
5
  value: string;
6
6
  approved?: boolean;
7
7
  }
8
- export interface PendingRequest {
9
- token: string;
10
- resumeUrl: string;
11
- chatId: string;
12
- messageId: number;
13
- responseType: PendingResponseType;
14
- options: PendingOption[];
15
- allowedUserIds: string[];
16
- acknowledgementText: string;
17
- removeButtons: boolean;
18
- createdAt: string;
19
- expiresAt?: string;
20
- }
21
- export declare function replyKey(chatId: string | number, messageId: string | number): string;
22
- export interface PendingStore {
23
- save(pending: PendingRequest): Promise<void>;
24
- getByToken(token: string): Promise<PendingRequest | undefined>;
25
- getByReply(chatId: string | number, messageId: string | number): Promise<PendingRequest | undefined>;
26
- claimByToken(token: string): Promise<PendingRequest | undefined>;
27
- claimByReply(chatId: string | number, messageId: string | number): Promise<PendingRequest | undefined>;
28
- close(): void;
29
- }
30
8
  export declare function buildCallbackData(token: string, optionIndex: number): string;
31
9
  export declare function parseCallbackData(value: string | undefined): {
32
10
  token: string;
@@ -1,13 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CALLBACK_PREFIX = void 0;
4
- exports.replyKey = replyKey;
5
4
  exports.buildCallbackData = buildCallbackData;
6
5
  exports.parseCallbackData = parseCallbackData;
7
6
  exports.CALLBACK_PREFIX = 'ta';
8
- function replyKey(chatId, messageId) {
9
- return `${chatId}:${messageId}`;
10
- }
11
7
  function buildCallbackData(token, optionIndex) {
12
8
  return `${exports.CALLBACK_PREFIX}:${token}:${optionIndex}`;
13
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pendingStore.js","sourceRoot":"","sources":["../../nodes/pendingStore.ts"],"names":[],"mappings":";;;AAwBA,4BAEC;AAkBD,8CAEC;AAED,8CAYC;AA5DY,QAAA,eAAe,GAAG,IAAI,CAAC;AAwBpC,SAAgB,QAAQ,CAAC,MAAuB,EAAE,SAA0B;IAC3E,OAAO,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC;AACjC,CAAC;AAkBD,SAAgB,iBAAiB,CAAC,KAAa,EAAE,WAAmB;IACnE,OAAO,GAAG,uBAAe,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;AACrD,CAAC;AAED,SAAgB,iBAAiB,CAChC,KAAyB;IAEzB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,uBAAe,yBAAyB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnF,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,OAAO;QACN,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACf,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC7B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"pendingStore.js","sourceRoot":"","sources":["../../nodes/pendingStore.ts"],"names":[],"mappings":";;;AAUA,8CAEC;AAED,8CAYC;AA1BY,QAAA,eAAe,GAAG,IAAI,CAAC;AAUpC,SAAgB,iBAAiB,CAAC,KAAa,EAAE,WAAmB;IACnE,OAAO,GAAG,uBAAe,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;AACrD,CAAC;AAED,SAAgB,iBAAiB,CAChC,KAAyB;IAEzB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,uBAAe,yBAAyB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnF,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,OAAO;QACN,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACf,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC7B,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
- import type { IDataObject, IExecuteFunctions, IHookFunctions, ITriggerFunctions, IWebhookFunctions } from 'n8n-workflow';
2
- export type TelegramContext = IExecuteFunctions | IHookFunctions | ITriggerFunctions | IWebhookFunctions;
1
+ import type { IDataObject, IExecuteFunctions } from 'n8n-workflow';
2
+ export type TelegramContext = IExecuteFunctions;
3
3
  export interface TelegramUser {
4
4
  id: number;
5
5
  is_bot?: boolean;
@@ -33,5 +33,6 @@ export interface TelegramUpdate extends IDataObject {
33
33
  callback_query?: TelegramCallbackQuery;
34
34
  }
35
35
  export declare function normalizeBaseUrl(value: unknown): string;
36
- export declare function telegramApiRequest<T>(context: TelegramContext, method: string, body?: IDataObject): Promise<T>;
37
- export declare function getTelegramSecret(context: IHookFunctions | IWebhookFunctions): string;
36
+ export declare function telegramApiRequest<T>(context: TelegramContext, method: string, body?: IDataObject, options?: {
37
+ timeoutMs?: number;
38
+ }): Promise<T>;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeBaseUrl = normalizeBaseUrl;
4
4
  exports.telegramApiRequest = telegramApiRequest;
5
- exports.getTelegramSecret = getTelegramSecret;
6
5
  const n8n_workflow_1 = require("n8n-workflow");
7
6
  function normalizeBaseUrl(value) {
8
7
  const baseUrl = String(value !== null && value !== void 0 ? value : '').trim().replace(/\/+$/, '');
@@ -11,7 +10,7 @@ function normalizeBaseUrl(value) {
11
10
  }
12
11
  return baseUrl;
13
12
  }
14
- async function telegramApiRequest(context, method, body = {}) {
13
+ async function telegramApiRequest(context, method, body = {}, options = {}) {
15
14
  const credentials = await context.getCredentials('telegramAdvanceApi');
16
15
  const baseUrl = normalizeBaseUrl(credentials.baseUrl);
17
16
  try {
@@ -20,6 +19,7 @@ async function telegramApiRequest(context, method, body = {}) {
20
19
  url: `${baseUrl}/bot${credentials.accessToken}/${method}`,
21
20
  body,
22
21
  json: true,
22
+ ...(options.timeoutMs ? { timeout: options.timeoutMs } : {}),
23
23
  });
24
24
  if (!response.ok) {
25
25
  throw new Error(response.description || `Telegram API method ${method} failed`);
@@ -30,7 +30,4 @@ async function telegramApiRequest(context, method, body = {}) {
30
30
  throw new n8n_workflow_1.NodeApiError(context.getNode(), error);
31
31
  }
32
32
  }
33
- function getTelegramSecret(context) {
34
- return `${context.getWorkflow().id}_${context.getNode().id}`.replace(/[^a-zA-Z0-9_-]+/g, '');
35
- }
36
33
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../nodes/shared.ts"],"names":[],"mappings":";;AA2DA,4CAMC;AAED,gDAwBC;AAED,8CAEC;AAvFD,+CAA4C;AAmD5C,SAAgB,gBAAgB,CAAC,KAAc;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACvC,OAAwB,EACxB,MAAc,EACd,OAAoB,EAAE;IAEtB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEtD,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YAClD,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG,OAAO,OAAO,WAAW,CAAC,WAAW,IAAI,MAAM,EAAE;YACzD,IAAI;YACJ,IAAI,EAAE,IAAI;SACV,CAA2B,CAAC;QAE7B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,uBAAuB,MAAM,SAAS,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,2BAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAmB,CAAC,CAAC;IAChE,CAAC;AACF,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAA2C;IAC5E,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAC9F,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../nodes/shared.ts"],"names":[],"mappings":";;AAgDA,4CAMC;AAED,gDA6BC;AApFD,+CAA4C;AA+C5C,SAAgB,gBAAgB,CAAC,KAAc;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACvC,OAAwB,EACxB,MAAc,EACd,OAAoB,EAAE,EACtB,UAAkC,EAAE;IAEpC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEtD,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YAClD,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG,OAAO,OAAO,WAAW,CAAC,WAAW,IAAI,MAAM,EAAE;YACzD,IAAI;YACJ,IAAI,EAAE,IAAI;YAIV,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAA2B,CAAC;QAE7B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,uBAAuB,MAAM,SAAS,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,2BAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAmB,CAAC,CAAC;IAChE,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@catalogicus-international/n8n-nodes-telegram-advance",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Native Telegram approval, choice, and reply workflows for n8n without external response pages",
5
5
  "license": "MIT",
6
6
  "packageManager": "pnpm@9.15.0",
@@ -44,8 +44,7 @@
44
44
  "dist/credentials/TelegramAdvanceApi.credentials.js"
45
45
  ],
46
46
  "nodes": [
47
- "dist/nodes/TelegramAdvance/TelegramAdvance.node.js",
48
- "dist/nodes/TelegramAdvanceTrigger/TelegramAdvanceTrigger.node.js"
47
+ "dist/nodes/TelegramAdvance/TelegramAdvance.node.js"
49
48
  ]
50
49
  },
51
50
  "devDependencies": {
@@ -1,5 +0,0 @@
1
- import type { INodeType, INodeTypeDescription, ITriggerFunctions, ITriggerResponse } from 'n8n-workflow';
2
- export declare class TelegramAdvanceTrigger implements INodeType {
3
- description: INodeTypeDescription;
4
- trigger(this: ITriggerFunctions): Promise<ITriggerResponse>;
5
- }
@@ -1,105 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TelegramAdvanceTrigger = void 0;
4
- const n8n_workflow_1 = require("n8n-workflow");
5
- const processUpdate_1 = require("../processUpdate");
6
- const pendingStoreFactory_1 = require("../pendingStoreFactory");
7
- const shared_1 = require("../shared");
8
- const LONG_POLL_TIMEOUT_SECONDS = 50;
9
- const ERROR_BACKOFF_MS = 3000;
10
- class TelegramAdvanceTrigger {
11
- constructor() {
12
- this.description = {
13
- displayName: 'Telegram Advance Trigger',
14
- name: 'telegramAdvanceTrigger',
15
- icon: 'file:../../icons/telegram.svg',
16
- group: ['trigger'],
17
- version: 1,
18
- subtitle: 'Routes replies to waiting executions',
19
- description: 'Receives Telegram updates via long polling and resumes Telegram Advance questions',
20
- defaults: {
21
- name: 'Telegram Advance Trigger',
22
- },
23
- inputs: [],
24
- outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
25
- credentials: [
26
- {
27
- name: 'telegramAdvanceApi',
28
- required: true,
29
- },
30
- ],
31
- properties: [
32
- {
33
- displayName: 'This trigger polls Telegram (getUpdates) and needs no public URL. Telegram allows only one getUpdates consumer per bot, so use a single Telegram Advance Trigger per bot and do not run a webhook on the same bot.',
34
- name: 'telegramPollingNotice',
35
- type: 'notice',
36
- default: '',
37
- },
38
- {
39
- displayName: 'Emit Unmatched Updates',
40
- name: 'emitUnmatchedUpdates',
41
- type: 'boolean',
42
- default: true,
43
- description: 'Whether messages and callbacks that do not belong to a waiting question should start the workflow',
44
- },
45
- ],
46
- };
47
- }
48
- async trigger() {
49
- const emitUnmatched = this.getNodeParameter('emitUnmatchedUpdates', true);
50
- await (0, shared_1.telegramApiRequest)(this, 'deleteWebhook', { drop_pending_updates: false });
51
- let running = true;
52
- const staticData = this.getWorkflowStaticData('node');
53
- let offset = typeof staticData.offset === 'number' ? staticData.offset : 0;
54
- const pollOnce = async () => {
55
- const updates = await (0, shared_1.telegramApiRequest)(this, 'getUpdates', {
56
- offset,
57
- timeout: LONG_POLL_TIMEOUT_SECONDS,
58
- allowed_updates: ['callback_query', 'message'],
59
- });
60
- for (const update of updates) {
61
- const store = await (0, pendingStoreFactory_1.createPendingStore)(this);
62
- try {
63
- const routed = await (0, processUpdate_1.processUpdate)(this, store, update, emitUnmatched);
64
- if (routed)
65
- this.emit([[{ json: routed.json }]]);
66
- }
67
- finally {
68
- store.close();
69
- }
70
- offset = update.update_id + 1;
71
- staticData.offset = offset;
72
- }
73
- };
74
- const loop = async () => {
75
- var _a;
76
- while (running) {
77
- try {
78
- await pollOnce();
79
- }
80
- catch (error) {
81
- if (!running)
82
- break;
83
- (_a = this.logger) === null || _a === void 0 ? void 0 : _a.warn(`Telegram Advance Trigger polling error: ${error instanceof Error ? error.message : String(error)}`);
84
- await (0, n8n_workflow_1.sleep)(ERROR_BACKOFF_MS);
85
- }
86
- }
87
- };
88
- const manualTriggerFunction = async () => {
89
- await pollOnce().catch((error) => {
90
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), error);
91
- });
92
- };
93
- const polling = loop();
94
- const closeFunction = async () => {
95
- running = false;
96
- await polling.catch(() => { });
97
- };
98
- return {
99
- closeFunction,
100
- manualTriggerFunction,
101
- };
102
- }
103
- }
104
- exports.TelegramAdvanceTrigger = TelegramAdvanceTrigger;
105
- //# sourceMappingURL=TelegramAdvanceTrigger.node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TelegramAdvanceTrigger.node.js","sourceRoot":"","sources":["../../../nodes/TelegramAdvanceTrigger/TelegramAdvanceTrigger.node.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- {
2
- "node": "@catalogicus-international/n8n-nodes-telegram-advance.telegramAdvanceTrigger",
3
- "nodeVersion": "1.0",
4
- "codexVersion": "1.0",
5
- "categories": ["Communication", "HITL"],
6
- "subcategories": {
7
- "HITL": ["Human in the Loop"]
8
- },
9
- "alias": ["telegram", "trigger", "approval", "callback", "reply"],
10
- "resources": {
11
- "credentialDocumentation": [
12
- {
13
- "url": "https://core.telegram.org/bots/features#creating-a-new-bot"
14
- }
15
- ],
16
- "primaryDocumentation": [
17
- {
18
- "url": "https://github.com/catalogicus-international/n8n-nodes-telegram-advance#readme"
19
- }
20
- ]
21
- }
22
- }
@@ -1,5 +0,0 @@
1
- import type { IExecuteFunctions, ITriggerFunctions, IWebhookFunctions } from 'n8n-workflow';
2
- import type { PendingStore } from './pendingStore';
3
- type StoreContext = IExecuteFunctions | ITriggerFunctions | IWebhookFunctions;
4
- export declare function createPendingStore(context: StoreContext): Promise<PendingStore>;
5
- export {};
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createPendingStore = createPendingStore;
4
- const staticDataPendingStore_1 = require("./staticDataPendingStore");
5
- async function createPendingStore(context) {
6
- return new staticDataPendingStore_1.StaticDataPendingStore(context);
7
- }
8
- //# sourceMappingURL=pendingStoreFactory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pendingStoreFactory.js","sourceRoot":"","sources":["../../nodes/pendingStoreFactory.ts"],"names":[],"mappings":";;AAWA,gDAEC;AAXD,qEAAkE;AAS3D,KAAK,UAAU,kBAAkB,CAAC,OAAqB;IAC7D,OAAO,IAAI,+CAAsB,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { IDataObject } from 'n8n-workflow';
2
- import { type PendingStore } from './pendingStore';
3
- import { type TelegramContext, type TelegramUpdate } from './shared';
4
- export interface RoutedResult {
5
- json: IDataObject;
6
- }
7
- export declare function processUpdate(context: TelegramContext, store: PendingStore, update: TelegramUpdate, emitUnmatched: boolean): Promise<RoutedResult | undefined>;
@@ -1,147 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processUpdate = processUpdate;
4
- const n8n_workflow_1 = require("n8n-workflow");
5
- const pendingStore_1 = require("./pendingStore");
6
- const shared_1 = require("./shared");
7
- function isAllowedUser(pending, user) {
8
- if (pending.allowedUserIds.length === 0)
9
- return true;
10
- return user !== undefined && pending.allowedUserIds.includes(String(user.id));
11
- }
12
- function matchesMessage(pending, message) {
13
- return Boolean(message &&
14
- String(message.chat.id) === pending.chatId &&
15
- message.message_id === pending.messageId);
16
- }
17
- async function answerCallback(context, callback, text) {
18
- await (0, shared_1.telegramApiRequest)(context, 'answerCallbackQuery', {
19
- callback_query_id: callback.id,
20
- ...(text ? { text: text.slice(0, 200) } : {}),
21
- });
22
- }
23
- async function removeButtons(context, pending) {
24
- if (!pending.removeButtons)
25
- return;
26
- await (0, shared_1.telegramApiRequest)(context, 'editMessageReplyMarkup', {
27
- chat_id: pending.chatId,
28
- message_id: pending.messageId,
29
- reply_markup: { inline_keyboard: [] },
30
- });
31
- }
32
- async function resumeExecution(context, pending, response) {
33
- await context.helpers.httpRequest({
34
- method: 'POST',
35
- url: pending.resumeUrl,
36
- body: response,
37
- json: true,
38
- });
39
- }
40
- async function bestEffort(operation) {
41
- try {
42
- await operation();
43
- }
44
- catch {
45
- }
46
- }
47
- async function processUpdate(context, store, update, emitUnmatched) {
48
- var _a, _b;
49
- const callback = update.callback_query;
50
- const parsedCallback = (0, pendingStore_1.parseCallbackData)(callback === null || callback === void 0 ? void 0 : callback.data);
51
- if (callback && parsedCallback) {
52
- const pending = await store.getByToken(parsedCallback.token);
53
- const selected = pending === null || pending === void 0 ? void 0 : pending.options[parsedCallback.optionIndex];
54
- if (!pending ||
55
- !selected ||
56
- !matchesMessage(pending, callback.message) ||
57
- !isAllowedUser(pending, callback.from)) {
58
- await bestEffort(() => answerCallback(context, callback, 'This request is no longer active'));
59
- return undefined;
60
- }
61
- const claimed = await store.claimByToken(pending.token);
62
- if (!claimed) {
63
- await bestEffort(() => answerCallback(context, callback, 'This request is no longer active'));
64
- return undefined;
65
- }
66
- try {
67
- await resumeExecution(context, claimed, {
68
- response: {
69
- type: claimed.responseType,
70
- value: selected.value,
71
- label: selected.label,
72
- ...(selected.approved === undefined ? {} : { approved: selected.approved }),
73
- user: callback.from,
74
- chat: (_a = callback.message) === null || _a === void 0 ? void 0 : _a.chat,
75
- questionMessageId: claimed.messageId,
76
- callbackQueryId: callback.id,
77
- receivedAt: new Date().toISOString(),
78
- },
79
- });
80
- }
81
- catch (error) {
82
- await store.save(claimed);
83
- throw new n8n_workflow_1.NodeApiError(context.getNode(), error);
84
- }
85
- await Promise.all([
86
- bestEffort(() => answerCallback(context, callback, claimed.acknowledgementText)),
87
- bestEffort(() => removeButtons(context, claimed)),
88
- ]);
89
- return {
90
- json: {
91
- telegramAdvanceRouted: true,
92
- responseType: claimed.responseType,
93
- token: claimed.token,
94
- update: update,
95
- },
96
- };
97
- }
98
- const message = update.message;
99
- const repliedMessageId = (_b = message === null || message === void 0 ? void 0 : message.reply_to_message) === null || _b === void 0 ? void 0 : _b.message_id;
100
- if (message && repliedMessageId !== undefined) {
101
- const pending = await store.getByReply(message.chat.id, repliedMessageId);
102
- if ((pending === null || pending === void 0 ? void 0 : pending.responseType) === 'text' &&
103
- isAllowedUser(pending, message.from) &&
104
- typeof message.text === 'string') {
105
- const claimed = await store.claimByReply(message.chat.id, repliedMessageId);
106
- if (!claimed)
107
- return undefined;
108
- try {
109
- await resumeExecution(context, claimed, {
110
- response: {
111
- type: 'text',
112
- value: message.text,
113
- text: message.text,
114
- user: message.from,
115
- chat: message.chat,
116
- questionMessageId: claimed.messageId,
117
- responseMessageId: message.message_id,
118
- receivedAt: new Date().toISOString(),
119
- },
120
- });
121
- }
122
- catch (error) {
123
- await store.save(claimed);
124
- throw new n8n_workflow_1.NodeApiError(context.getNode(), error);
125
- }
126
- if (claimed.acknowledgementText) {
127
- await bestEffort(() => (0, shared_1.telegramApiRequest)(context, 'sendMessage', {
128
- chat_id: claimed.chatId,
129
- text: claimed.acknowledgementText,
130
- reply_parameters: { message_id: message.message_id },
131
- }));
132
- }
133
- return {
134
- json: {
135
- telegramAdvanceRouted: true,
136
- responseType: claimed.responseType,
137
- token: claimed.token,
138
- update: update,
139
- },
140
- };
141
- }
142
- }
143
- if (!emitUnmatched)
144
- return undefined;
145
- return { json: update };
146
- }
147
- //# sourceMappingURL=processUpdate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"processUpdate.js","sourceRoot":"","sources":["../../nodes/processUpdate.ts"],"names":[],"mappings":";;AAuFA,sCAyHC;AA/MD,+CAA4C;AAC5C,iDAIwB;AACxB,qCAOkB;AAOlB,SAAS,aAAa,CAAC,OAAuB,EAAE,IAA8B;IAC7E,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,cAAc,CACtB,OAAuB,EACvB,OAAoC;IAEpC,OAAO,OAAO,CACb,OAAO;QACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM;QAC1C,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CACzC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC5B,OAAwB,EACxB,QAA+B,EAC/B,IAAY;IAEZ,MAAM,IAAA,2BAAkB,EAAC,OAAO,EAAE,qBAAqB,EAAE;QACxD,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAwB,EAAE,OAAuB;IAC7E,IAAI,CAAC,OAAO,CAAC,aAAa;QAAE,OAAO;IAEnC,MAAM,IAAA,2BAAkB,EAAC,OAAO,EAAE,wBAAwB,EAAE;QAC3D,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,YAAY,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;KACrC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAC7B,OAAwB,EACxB,OAAuB,EACvB,QAAqB;IAErB,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QACjC,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,OAAO,CAAC,SAAS;QACtB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,IAAI;KACV,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,SAA8B;IACvD,IAAI,CAAC;QACJ,MAAM,SAAS,EAAE,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;AACF,CAAC;AAUM,KAAK,UAAU,aAAa,CAClC,OAAwB,EACxB,KAAmB,EACnB,MAAsB,EACtB,aAAsB;;IAEtB,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;IACvC,MAAM,cAAc,GAAG,IAAA,gCAAiB,EAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,CAAC;IACzD,IAAI,QAAQ,IAAI,cAAc,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAE9D,IACC,CAAC,OAAO;YACR,CAAC,QAAQ;YACT,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;YAC1C,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EACrC,CAAC;YACF,MAAM,UAAU,CAAC,GAAG,EAAE,CACrB,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,kCAAkC,CAAC,CACrE,CAAC;YACF,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,UAAU,CAAC,GAAG,EAAE,CACrB,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,kCAAkC,CAAC,CACrE,CAAC;YACF,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE;gBACvC,QAAQ,EAAE;oBACT,IAAI,EAAE,OAAO,CAAC,YAAY;oBAC1B,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBAC3E,IAAI,EAAE,QAAQ,CAAC,IAA8B;oBAC7C,IAAI,EAAE,MAAA,QAAQ,CAAC,OAAO,0CAAE,IAA8B;oBACtD,iBAAiB,EAAE,OAAO,CAAC,SAAS;oBACpC,eAAe,EAAE,QAAQ,CAAC,EAAE;oBAC5B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;aACD,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,IAAI,2BAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAmB,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC;YACjB,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAChF,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACjD,CAAC,CAAC;QAEH,OAAO;YACN,IAAI,EAAE;gBACL,qBAAqB,EAAE,IAAI;gBAC3B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,MAAgC;aACxC;SACD,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,MAAM,gBAAgB,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,0CAAE,UAAU,CAAC;IAC/D,IAAI,OAAO,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAE1E,IACC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,MAAK,MAAM;YAChC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;YACpC,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAC/B,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAC5E,IAAI,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAC;YAE/B,IAAI,CAAC;gBACJ,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE;oBACvC,QAAQ,EAAE;wBACT,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,OAAO,CAAC,IAAI;wBACnB,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,IAAI,EAAE,OAAO,CAAC,IAA8B;wBAC5C,IAAI,EAAE,OAAO,CAAC,IAA8B;wBAC5C,iBAAiB,EAAE,OAAO,CAAC,SAAS;wBACpC,iBAAiB,EAAE,OAAO,CAAC,UAAU;wBACrC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBACpC;iBACD,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1B,MAAM,IAAI,2BAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAmB,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBACjC,MAAM,UAAU,CAAC,GAAG,EAAE,CACrB,IAAA,2BAAkB,EAAC,OAAO,EAAE,aAAa,EAAE;oBAC1C,OAAO,EAAE,OAAO,CAAC,MAAM;oBACvB,IAAI,EAAE,OAAO,CAAC,mBAAmB;oBACjC,gBAAgB,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE;iBACpD,CAAC,CACF,CAAC;YACH,CAAC;YAED,OAAO;gBACN,IAAI,EAAE;oBACL,qBAAqB,EAAE,IAAI;oBAC3B,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM,EAAE,MAAgC;iBACxC;aACD,CAAC;QACH,CAAC;IACF,CAAC;IAED,IAAI,CAAC,aAAa;QAAE,OAAO,SAAS,CAAC;IAErC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC"}
@@ -1,17 +0,0 @@
1
- import type { IExecuteFunctions, ITriggerFunctions, IWebhookFunctions } from 'n8n-workflow';
2
- import { type PendingRequest, type PendingStore } from './pendingStore';
3
- type StoreContext = IExecuteFunctions | ITriggerFunctions | IWebhookFunctions;
4
- export declare class StaticDataPendingStore implements PendingStore {
5
- private readonly context;
6
- private readonly data;
7
- constructor(context: StoreContext);
8
- save(pending: PendingRequest): Promise<void>;
9
- getByToken(token: string): Promise<PendingRequest | undefined>;
10
- getByReply(chatId: string | number, messageId: string | number): Promise<PendingRequest | undefined>;
11
- claimByToken(token: string): Promise<PendingRequest | undefined>;
12
- claimByReply(chatId: string | number, messageId: string | number): Promise<PendingRequest | undefined>;
13
- close(): void;
14
- private remove;
15
- private purgeExpired;
16
- }
17
- export {};
@@ -1,66 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StaticDataPendingStore = void 0;
4
- const pendingStore_1 = require("./pendingStore");
5
- const STATIC_DATA_KEY = 'telegramAdvancePending';
6
- function isExpired(pending) {
7
- return pending.expiresAt !== undefined && Date.parse(pending.expiresAt) <= Date.now();
8
- }
9
- class StaticDataPendingStore {
10
- constructor(context) {
11
- this.context = context;
12
- const staticData = this.context.getWorkflowStaticData('global');
13
- if (!staticData[STATIC_DATA_KEY]) {
14
- staticData[STATIC_DATA_KEY] = { pending: {}, replies: {} };
15
- }
16
- this.data = staticData[STATIC_DATA_KEY];
17
- this.purgeExpired();
18
- }
19
- async save(pending) {
20
- const responseKey = (0, pendingStore_1.replyKey)(pending.chatId, pending.messageId);
21
- if (isExpired(pending)) {
22
- delete this.data.pending[pending.token];
23
- delete this.data.replies[responseKey];
24
- return;
25
- }
26
- this.data.pending[pending.token] = pending;
27
- this.data.replies[responseKey] = pending.token;
28
- }
29
- async getByToken(token) {
30
- const pending = this.data.pending[token];
31
- if (pending && isExpired(pending)) {
32
- this.remove(pending);
33
- return undefined;
34
- }
35
- return pending;
36
- }
37
- async getByReply(chatId, messageId) {
38
- const token = this.data.replies[(0, pendingStore_1.replyKey)(chatId, messageId)];
39
- return token ? this.getByToken(token) : undefined;
40
- }
41
- async claimByToken(token) {
42
- const pending = await this.getByToken(token);
43
- if (pending)
44
- this.remove(pending);
45
- return pending;
46
- }
47
- async claimByReply(chatId, messageId) {
48
- const pending = await this.getByReply(chatId, messageId);
49
- if (pending)
50
- this.remove(pending);
51
- return pending;
52
- }
53
- close() { }
54
- remove(pending) {
55
- delete this.data.pending[pending.token];
56
- delete this.data.replies[(0, pendingStore_1.replyKey)(pending.chatId, pending.messageId)];
57
- }
58
- purgeExpired() {
59
- for (const pending of Object.values(this.data.pending)) {
60
- if (isExpired(pending))
61
- this.remove(pending);
62
- }
63
- }
64
- }
65
- exports.StaticDataPendingStore = StaticDataPendingStore;
66
- //# sourceMappingURL=staticDataPendingStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"staticDataPendingStore.js","sourceRoot":"","sources":["../../nodes/staticDataPendingStore.ts"],"names":[],"mappings":";;;AACA,iDAIwB;AAIxB,MAAM,eAAe,GAAG,wBAAwB,CAAC;AASjD,SAAS,SAAS,CAAC,OAAuB;IACzC,OAAO,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AACvF,CAAC;AAOD,MAAa,sBAAsB;IAGlC,YAA6B,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAE7D,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAClC,UAAU,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAuB;QACjC,MAAM,WAAW,GAAG,IAAA,uBAAQ,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACtC,OAAO;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU,CACf,MAAuB,EACvB,SAA0B;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAA,uBAAQ,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa;QAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,OAAO;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,YAAY,CACjB,MAAuB,EACvB,SAA0B;QAE1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,OAAO;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,KAAU,CAAC;IAER,MAAM,CAAC,OAAuB;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAA,uBAAQ,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACvE,CAAC;IAEO,YAAY;QACnB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxD,IAAI,SAAS,CAAC,OAAO,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC;CACD;AArED,wDAqEC"}
@@ -1,2 +0,0 @@
1
- export type WaitUnit = 'minutes' | 'hours' | 'days';
2
- export declare function getWaitTill(limitWaitTime: boolean, amount: number, unit: WaitUnit, now?: number): Date;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getWaitTill = getWaitTill;
4
- const n8n_workflow_1 = require("n8n-workflow");
5
- function getWaitTill(limitWaitTime, amount, unit, now = Date.now()) {
6
- if (!limitWaitTime)
7
- return n8n_workflow_1.WAIT_INDEFINITELY;
8
- const multipliers = {
9
- minutes: 60 * 1000,
10
- hours: 60 * 60 * 1000,
11
- days: 24 * 60 * 60 * 1000,
12
- };
13
- return new Date(now + amount * multipliers[unit]);
14
- }
15
- //# sourceMappingURL=wait.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../nodes/wait.ts"],"names":[],"mappings":";;AAIA,kCAeC;AAnBD,+CAAiD;AAIjD,SAAgB,WAAW,CAC1B,aAAsB,EACtB,MAAc,EACd,IAAc,EACd,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,IAAI,CAAC,aAAa;QAAE,OAAO,gCAAiB,CAAC;IAE7C,MAAM,WAAW,GAA6B;QAC7C,OAAO,EAAE,EAAE,GAAG,IAAI;QAClB,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;QACrB,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;KACzB,CAAC;IAEF,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,CAAC"}