@hostwebhook/node-types 1.52.19 → 1.54.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.
@@ -18,11 +18,11 @@ 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 = [
25
- 'webhook', 'scheduledWorkflow', 'serviceTrigger', 'voiceAgent', 'router', 'filter', 'transform',
25
+ 'webhook', 'scheduledWorkflow', 'trigger', 'voiceAgent', 'router', 'filter', 'transform',
26
26
  'cache', 'code', 'rateLimiter', 'aggregator', 'conditional', 'delay', 'schemaValidator', 'split', 'loop', 'markdown', 'fileTransform', 'limit',
27
27
  ];
28
28
  /** Action nodes that can chain (non-terminal) */
@@ -34,7 +34,7 @@ exports.NODE_CONNECTIONS = {
34
34
  webhook: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
35
35
  scheduledWorkflow: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
36
36
  chatTrigger: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
37
- serviceTrigger: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
37
+ trigger: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
38
38
  voiceAgent: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
39
39
  // ── Pipeline processing nodes ──
40
40
  filter: { acceptsInputFrom: STANDARD_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
@@ -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' },
@@ -59,7 +60,7 @@ exports.NODE_DISPATCH = {
59
60
  webhook: { service: 'webhooksService', collection: 'webhooks', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
60
61
  scheduledWorkflow: { service: 'scheduledWorkflowsService', collection: 'scheduledworkflows', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
61
62
  chatTrigger: { service: 'chatTriggersService', collection: 'chattriggers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
62
- serviceTrigger: { service: 'serviceTriggersService', collection: 'servicetriggers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
63
+ trigger: { service: 'triggersService', collection: 'triggers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
63
64
  voiceAgent: { service: 'voiceAgentsService', collection: 'voiceagents', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
64
65
  // ── Annotation — never executed in pipeline ──
65
66
  stickyNote: { service: 'stickyNotesService', collection: 'stickynotes', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
@@ -4,7 +4,7 @@
4
4
  * - emailAction entity / DTO (api): operation field + validation
5
5
  * - dashboard EmailActionGmailOperation type
6
6
  * - broker hostwebhook types + tool schemas
7
- * - serviceTrigger / future Gmail-related nodes
7
+ * - trigger / future Gmail-related nodes
8
8
  *
9
9
  * Adding a new Gmail operation = add it here, bump this package's
10
10
  * version, publish to npm, and re-install in the consuming repos.
@@ -9,7 +9,7 @@ exports.resolveGmailSendFields = resolveGmailSendFields;
9
9
  * - emailAction entity / DTO (api): operation field + validation
10
10
  * - dashboard EmailActionGmailOperation type
11
11
  * - broker hostwebhook types + tool schemas
12
- * - serviceTrigger / future Gmail-related nodes
12
+ * - trigger / future Gmail-related nodes
13
13
  *
14
14
  * Adding a new Gmail operation = add it here, bump this package's
15
15
  * version, publish to npm, and re-install in the consuming repos.
@@ -36,7 +36,7 @@ export interface NodeRegistryEntry {
36
36
  *
37
37
  * Lets new toolkit-style nodes opt-in without per-component hardcoding
38
38
  * in the dashboard. Currently only emailAction(aiEnabled=true) uses
39
- * this; serviceTrigger or future Slack/Discord toolkits could too.
39
+ * this; trigger or future Slack/Discord toolkits could too.
40
40
  *
41
41
  * Predicate must be pure (no side effects) — called on every render.
42
42
  */
package/dist/registry.js CHANGED
@@ -29,10 +29,10 @@ exports.NODE_REGISTRY = {
29
29
  stateKey: 'chatTriggers', allStateKey: 'allChatTriggers',
30
30
  color: '#06b6d4', testable: false,
31
31
  },
32
- serviceTrigger: {
33
- type: 'serviceTrigger', prefix: 'svc', label: 'Service Trigger',
34
- group: 'Sources', detailPath: '/dashboard/service-triggers', apiPath: '/service-triggers',
35
- stateKey: 'serviceTriggers', allStateKey: 'allServiceTriggers',
32
+ trigger: {
33
+ type: 'trigger', prefix: 'trg', label: 'Trigger',
34
+ group: 'Sources', detailPath: '/dashboard/triggers', apiPath: '/triggers',
35
+ stateKey: 'triggers', allStateKey: 'allTriggers',
36
36
  color: '#ef4444', testable: false,
37
37
  },
38
38
  voiceAgent: {
@@ -154,14 +154,35 @@ 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
+ /**
172
+ * Gmail salio del nodo Email, que ahora manda SOLO por Resend.
173
+ *
174
+ * Estaban juntos bajo un campo `provider`, y eso obligaba a que un nodo de
175
+ * dos operaciones —enviar por Resend— cargara con las dieciseis de Gmail, su
176
+ * OAuth, su toolkit de IA y su send-and-wait. Partidos, cada uno se explica
177
+ * solo y el de Email vuelve a caber en una pantalla.
178
+ */
179
+ gmailAction: {
180
+ type: 'gmailAction', prefix: 'gm', label: 'Gmail',
181
+ group: 'Actions', detailPath: '/dashboard/gmail-actions', apiPath: '/gmail-actions',
182
+ stateKey: 'gmailActions', allStateKey: 'allGmailActions',
183
+ color: '#ea4335', testable: true,
184
+ // El toolkit de IA se vino con Gmail: son sus dieciseis operaciones las
185
+ // que el LLM llama, no las dos de Resend. Ver el comentario de arriba.
165
186
  isToolOnly: (e) => e.aiEnabled === true,
166
187
  },
167
188
  httpAction: {
@@ -26,7 +26,7 @@ exports.TELEGRAM_OPERATIONS = [
26
26
  // tap one. When `allowFreeText` is on, a text reply in the same chat
27
27
  // also resolves the wait. Backed by the same shared PendingApproval +
28
28
  // send-and-wait infra emailAction uses, with a Telegram-specific
29
- // resume path through service-triggers.processTelegramPush (intercepts
29
+ // resume path through triggers.processTelegramPush (intercepts
30
30
  // callback_query.data === "swat:{token}:a|r" before normal dispatch).
31
31
  // Output of the node carries `payload._waitResponse = { approved,
32
32
  // decidedAt, ipAddress, comment?, responseText?, timedOut? }` for
@@ -29,7 +29,7 @@ const p = (name, description, required = true, type = 'string') => ({ name, type
29
29
  * y por la vía de una herramienta no espera — el modelo recibe algo inmediato y
30
30
  * acaba diciendo que ya se aprobó. Se usa en modo single-op, con un Conditional
31
31
  * detrás leyendo `_waitResponse.approved`. La espera se resuelve por
32
- * `service-triggers.processTelegramPush`, donde el LLM no participa.
32
+ * `triggers.processTelegramPush`, donde el LLM no participa.
33
33
  *
34
34
  * Ninguna lleva `destructive`. `delete_telegram_message` lo merecería —el
35
35
  * toolkit de Drive marca sus borrados— pero hoy la spec de Telegram no tiene ese
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** All valid node type identifiers */
2
- export type NodeType = 'webhook' | 'scheduledWorkflow' | 'chatTrigger' | 'serviceTrigger' | '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 */
@@ -113,7 +113,7 @@ export interface NodeUIConfig {
113
113
  * nodes (email/http/mongo/notification/sheets/calendar/docs/
114
114
  * firecrawl) are fired post-delivery in onDeliveryResult with
115
115
  * their own loops; ingress nodes (webhook/scheduledWorkflow/
116
- * chatTrigger/serviceTrigger) start the flow themselves;
116
+ * chatTrigger/trigger) start the flow themselves;
117
117
  * stickyNote is purely visual.
118
118
  */
119
119
  export type PipelineDispatchKind = 'generic' | 'custom' | 'excluded';
package/dist/ui.js CHANGED
@@ -11,7 +11,7 @@ exports.NODE_UI = {
11
11
  webhook: { fromNodes: true, toNodes: true, isSource: true },
12
12
  scheduledWorkflow: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right', 'bottom'], dotHandles: { output: ['right-out', 'bottom-out'] } },
13
13
  chatTrigger: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right'], dotHandles: { output: ['right-out'] } },
14
- serviceTrigger: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right', 'bottom'], dotHandles: { output: ['right-out', 'bottom-out'] } },
14
+ trigger: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right', 'bottom'], dotHandles: { output: ['right-out', 'bottom-out'] } },
15
15
  // Voice Agent: dynamicOutputs=true tells NodeShell to derive ONE
16
16
  // output handle per non-disabled `entity.tools[i].name`. The
17
17
  // `right-out` fallback handle is rendered when the agent has zero
@@ -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 } },
@@ -75,9 +76,10 @@ exports.PREFIX_TO_TYPE = [
75
76
  { prefix: 'wh-', type: 'webhook', canvasType: 'webhook' },
76
77
  { prefix: 'swf-', type: 'scheduledWorkflow', canvasType: 'scheduledWorkflow' },
77
78
  { prefix: 'chat-', type: 'chatTrigger', canvasType: 'chatTrigger' },
78
- { prefix: 'svc-', type: 'serviceTrigger', canvasType: 'serviceTrigger' },
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.52.19",
3
+ "version": "1.54.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",