@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.
- package/dist/connections.js +4 -3
- package/dist/dispatch.js +2 -1
- package/dist/gmail-operations.d.ts +1 -1
- package/dist/gmail-operations.js +1 -1
- package/dist/registry.d.ts +1 -1
- package/dist/registry.js +28 -7
- package/dist/telegram-operations.js +1 -1
- package/dist/telegram-toolkit.js +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/ui.js +4 -2
- package/package.json +1 -1
package/dist/connections.js
CHANGED
|
@@ -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', '
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
* -
|
|
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.
|
package/dist/gmail-operations.js
CHANGED
|
@@ -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
|
-
* -
|
|
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.
|
package/dist/registry.d.ts
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
33
|
-
type: '
|
|
34
|
-
group: 'Sources', detailPath: '/dashboard/
|
|
35
|
-
stateKey: '
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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
|
|
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
|
package/dist/telegram-toolkit.js
CHANGED
|
@@ -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
|
-
* `
|
|
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' | '
|
|
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/
|
|
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
|
-
|
|
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: '
|
|
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