@hostwebhook/node-types 1.50.1 → 1.52.0

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.
@@ -11,7 +11,7 @@
11
11
  * extending this list, bumping the package, and re-installing in
12
12
  * consumers — same pattern as Gmail / Calendar / Drive.
13
13
  */
14
- export declare const TELEGRAM_OPERATIONS: readonly ["sendMessage", "replyToMessage", "sendPhoto", "sendDocument", "sendVoice", "editMessageText", "deleteMessage", "answerCallbackQuery", "forwardMessage", "sendPoll"];
14
+ export declare const TELEGRAM_OPERATIONS: readonly ["sendMessage", "replyToMessage", "sendPhoto", "sendDocument", "sendVoice", "sendAndWaitForResponse", "editMessageText", "deleteMessage", "answerCallbackQuery", "forwardMessage", "sendPoll"];
15
15
  export type TelegramOperation = (typeof TELEGRAM_OPERATIONS)[number];
16
16
  /** Type guard — useful when validating untrusted input (DTOs, tool calls). */
17
17
  export declare function isTelegramOperation(value: unknown): value is TelegramOperation;
@@ -21,6 +21,17 @@ exports.TELEGRAM_OPERATIONS = [
21
21
  'sendPhoto',
22
22
  'sendDocument',
23
23
  'sendVoice',
24
+ // Pause-the-pipeline op — sends a Telegram message with Approve /
25
+ // (optional) Disapprove inline buttons and waits for the recipient to
26
+ // tap one. When `allowFreeText` is on, a text reply in the same chat
27
+ // also resolves the wait. Backed by the same shared PendingApproval +
28
+ // send-and-wait infra emailAction uses, with a Telegram-specific
29
+ // resume path through service-triggers.processTelegramPush (intercepts
30
+ // callback_query.data === "swat:{token}:a|r" before normal dispatch).
31
+ // Output of the node carries `payload._waitResponse = { approved,
32
+ // decidedAt, ipAddress, comment?, responseText?, timedOut? }` for
33
+ // downstream Conditional nodes.
34
+ 'sendAndWaitForResponse',
24
35
  'editMessageText',
25
36
  'deleteMessage',
26
37
  'answerCallbackQuery',
package/dist/ui.js CHANGED
@@ -28,7 +28,15 @@ exports.NODE_UI = {
28
28
  aggregator: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
29
29
  cache: { fromNodes: true, toNodes: true },
30
30
  code: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
31
- ai: { fromNodes: true, toNodes: true },
31
+ // AI Node: in classifier mode (entity.outputMode === 'classifier') the
32
+ // node fans out to N output handles — one per category in
33
+ // `entity.categories[]` plus an optional synthesized "Other" handle
34
+ // (controlled by `entity.includeOtherBranch`). Wiring lives in
35
+ // `categories[].outputNodes` + `otherOutputNodes`, mirroring
36
+ // ConditionalNode's `branches[]` + `elseOutputNodes`. In any other
37
+ // outputMode the node falls back to the single right-out handle
38
+ // NodeShell renders when no dynamic outputs materialize.
39
+ ai: { fromNodes: true, toNodes: true, outputHandles: ['right'], special: { loopBackAllowed: true, connectModal: 'output-group', outputGroups: { field: 'categories', nameField: 'name', summaryField: 'description', label: 'category', elseField: 'otherOutputNodes' } } },
32
40
  markdown: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
33
41
  fileTransform: { fromNodes: true, toNodes: true },
34
42
  limit: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostwebhook/node-types",
3
- "version": "1.50.1",
3
+ "version": "1.52.0",
4
4
  "description": "Shared node type definitions, connection rules, and dispatch config for HostWebhook",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",