@hostwebhook/node-types 1.53.0 → 1.54.1

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.
@@ -18,7 +18,7 @@ exports.isNodeType = isNodeType;
18
18
  const PROCESSING_OUTPUTS = [
19
19
  'webhook', 'router', 'filter', 'transform', 'cache', 'code', 'rateLimiter',
20
20
  'aggregator', 'conditional', 'delay', 'schemaValidator', 'split', 'markdown', 'fileTransform', 'limit',
21
- 'emailAction', 'httpAction', 'mongoAction', 'postgresAction', 'notificationAction', 'sheetsAction', 'calendarAction', 'docsAction', 'driveAction', 'firecrawlAction', 'telegramAction', 'whatsappAction', 'discordAction', 'slackAction', 'googleContactsAction', 'vectorStore', 'rssAction', 'socialMediaAction', 'loop',
21
+ 'emailAction', 'gmailAction', 'httpAction', 'mongoAction', 'postgresAction', 'notificationAction', 'sheetsAction', 'calendarAction', 'docsAction', 'driveAction', 'firecrawlAction', 'telegramAction', 'whatsappAction', 'discordAction', 'slackAction', 'googleContactsAction', 'vectorStore', 'rssAction', 'socialMediaAction', 'loop',
22
22
  ];
23
23
  /** Standard processing input sources */
24
24
  const STANDARD_INPUTS = [
@@ -63,6 +63,7 @@ exports.NODE_CONNECTIONS = {
63
63
  router: { acceptsInputFrom: ['webhook', 'scheduledWorkflow', 'filter', 'transform'], canOutputTo: PROCESSING_OUTPUTS.filter(t => t !== 'webhook') },
64
64
  // ── Action nodes ──
65
65
  emailAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
66
+ gmailAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
66
67
  httpAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
67
68
  mongoAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
68
69
  postgresAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
package/dist/dispatch.js CHANGED
@@ -39,6 +39,7 @@ exports.NODE_DISPATCH = {
39
39
  router: { service: 'routersService', collection: 'routers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'custom' },
40
40
  // ── Action nodes — fired in onDeliveryResult, excluded from webhook dispatch ──
41
41
  emailAction: { service: 'emailActionsService', collection: 'emailactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
42
+ gmailAction: { service: 'gmailActionsService', collection: 'gmailactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
42
43
  httpAction: { service: 'httpActionsService', collection: 'httpactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
43
44
  mongoAction: { service: 'mongoActionsService', collection: 'mongoactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
44
45
  postgresAction: { service: 'postgresActionsService', collection: 'postgresactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
package/dist/registry.js CHANGED
@@ -154,14 +154,43 @@ exports.NODE_REGISTRY = {
154
154
  color: '#38bdf8', testable: true,
155
155
  },
156
156
  // ── Actions ──
157
+ /**
158
+ * Manda correo por Resend, y sólo por Resend.
159
+ *
160
+ * Tuvo un campo `provider` con Gmail y un Outlook que nunca llegó. Gmail se
161
+ * fue a su propio nodo —ver `gmailAction`— y con él su OAuth, sus dieciséis
162
+ * operaciones y el toolkit de IA, que era suyo: aquí sólo quedan enviar y
163
+ * el modo de IA no tiene dieciséis herramientas que ofrecer.
164
+ */
157
165
  emailAction: {
158
166
  type: 'emailAction', prefix: 'ea', label: 'Email Action',
159
167
  group: 'Actions', detailPath: '/dashboard/email-actions', apiPath: '/email-actions',
160
168
  stateKey: 'emailActions', allStateKey: 'allEmailActions',
161
169
  color: '#f472b6', testable: true,
162
- // AI Toolkit mode wires the node through the upstream AI Node's
163
- // tools[] list, not via canvas edges — hide handles to prevent
164
- // accidental misrouting that would silently fire with empty fields.
170
+ /**
171
+ * Sigue siendo herramienta: hay una ruta native + aiEnabled donde el nodo
172
+ * AI genera el correo y este lo manda por Resend —en produccion existe un
173
+ * «using native email as tool»—. Se la quite al partir Gmail dando por
174
+ * hecho que el toolkit era solo suyo, y sin esto el nodo recupera sus
175
+ * handles en modo herramienta: justo el mal enrutado que este flag evita.
176
+ */
177
+ isToolOnly: (e) => e.aiEnabled === true,
178
+ },
179
+ /**
180
+ * Gmail salio del nodo Email, que ahora manda SOLO por Resend.
181
+ *
182
+ * Estaban juntos bajo un campo `provider`, y eso obligaba a que un nodo de
183
+ * dos operaciones —enviar por Resend— cargara con las dieciseis de Gmail, su
184
+ * OAuth, su toolkit de IA y su send-and-wait. Partidos, cada uno se explica
185
+ * solo y el de Email vuelve a caber en una pantalla.
186
+ */
187
+ gmailAction: {
188
+ type: 'gmailAction', prefix: 'gm', label: 'Gmail',
189
+ group: 'Actions', detailPath: '/dashboard/gmail-actions', apiPath: '/gmail-actions',
190
+ stateKey: 'gmailActions', allStateKey: 'allGmailActions',
191
+ color: '#ea4335', testable: true,
192
+ // El toolkit de IA se vino con Gmail: son sus dieciseis operaciones las
193
+ // que el LLM llama, no las dos de Resend. Ver el comentario de arriba.
165
194
  isToolOnly: (e) => e.aiEnabled === true,
166
195
  },
167
196
  httpAction: {
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** All valid node type identifiers */
2
- export type NodeType = 'webhook' | 'scheduledWorkflow' | 'chatTrigger' | 'trigger' | 'voiceAgent' | 'filter' | 'transform' | 'schemaValidator' | 'conditional' | 'delay' | 'rateLimiter' | 'aggregator' | 'cache' | 'code' | 'ai' | 'merge' | 'approval' | 'split' | 'loop' | 'markdown' | 'fileTransform' | 'limit' | 'router' | 'emailAction' | 'httpAction' | 'mongoAction' | 'postgresAction' | 'notificationAction' | 'sheetsAction' | 'calendarAction' | 'docsAction' | 'driveAction' | 'firecrawlAction' | 'telegramAction' | 'whatsappAction' | 'discordAction' | 'slackAction' | 'googleContactsAction' | 'vectorStore' | 'rssAction' | 'socialMediaAction' | 'stickyNote';
2
+ export type NodeType = 'webhook' | 'scheduledWorkflow' | 'chatTrigger' | 'trigger' | 'voiceAgent' | 'filter' | 'transform' | 'schemaValidator' | 'conditional' | 'delay' | 'rateLimiter' | 'aggregator' | 'cache' | 'code' | 'ai' | 'merge' | 'approval' | 'split' | 'loop' | 'markdown' | 'fileTransform' | 'limit' | 'router' | 'emailAction' | 'gmailAction' | 'httpAction' | 'mongoAction' | 'postgresAction' | 'notificationAction' | 'sheetsAction' | 'calendarAction' | 'docsAction' | 'driveAction' | 'firecrawlAction' | 'telegramAction' | 'whatsappAction' | 'discordAction' | 'slackAction' | 'googleContactsAction' | 'vectorStore' | 'rssAction' | 'socialMediaAction' | 'stickyNote';
3
3
  /** Node role in the pipeline */
4
4
  export type NodeRole = 'source' | 'processing' | 'flowControl' | 'routing' | 'action' | 'monitoring';
5
5
  /** Handle positions on the canvas node */
package/dist/ui.js CHANGED
@@ -50,6 +50,7 @@ exports.NODE_UI = {
50
50
  router: { fromNodes: true, toNodes: true, outputHandles: ['right', 'bottom'], dotHandles: { output: ['right-out', 'bottom-out'] }, special: { connectModal: 'rule' } },
51
51
  // ── Action nodes ──
52
52
  emailAction: { fromNodes: true, toNodes: true, inputHandles: ['left', 'top'], outputHandles: ['right'], dotHandles: { input: ['left-in', 'top-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'email' } },
53
+ gmailAction: { fromNodes: true, toNodes: true, inputHandles: ['left', 'top'], outputHandles: ['right'], dotHandles: { input: ['left-in', 'top-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'gmail' } },
53
54
  httpAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
54
55
  mongoAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
55
56
  postgresAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
@@ -78,6 +79,7 @@ exports.PREFIX_TO_TYPE = [
78
79
  { prefix: 'trg-', type: 'trigger', canvasType: 'trigger' },
79
80
  { prefix: 'va-', type: 'voiceAgent', canvasType: 'voiceAgent' },
80
81
  { prefix: 'ea-', type: 'emailAction', canvasType: 'emailAction' },
82
+ { prefix: 'gm-', type: 'gmailAction', canvasType: 'gmailAction' },
81
83
  { prefix: 'tg-', type: 'telegramAction', canvasType: 'telegramAction' },
82
84
  { prefix: 'wa-', type: 'whatsappAction', canvasType: 'whatsappAction' },
83
85
  { prefix: 'dc-', type: 'discordAction', canvasType: 'discordAction' },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostwebhook/node-types",
3
- "version": "1.53.0",
3
+ "version": "1.54.1",
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",