@hostwebhook/node-types 1.52.3 → 1.52.4
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 +6 -6
- package/dist/dispatch.js +4 -4
- package/dist/registry.js +8 -8
- package/dist/types.d.ts +5 -5
- package/dist/ui.js +4 -4
- package/package.json +1 -1
package/dist/connections.js
CHANGED
|
@@ -16,13 +16,13 @@ exports.isTerminal = isTerminal;
|
|
|
16
16
|
exports.isNodeType = isNodeType;
|
|
17
17
|
/** All node types that can appear as pipeline outputs */
|
|
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
21
|
'emailAction', '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
|
-
'
|
|
25
|
+
'webhook', 'scheduledWorkflow', 'serviceTrigger', '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) */
|
|
@@ -31,8 +31,8 @@ const CHAINABLE_ACTIONS = ['httpAction', 'mongoAction', 'postgresAction', 'sheet
|
|
|
31
31
|
const ACTION_INPUTS = [...STANDARD_INPUTS, ...CHAINABLE_ACTIONS];
|
|
32
32
|
exports.NODE_CONNECTIONS = {
|
|
33
33
|
// ── Source nodes ──
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
webhook: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
|
|
35
|
+
scheduledWorkflow: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
|
|
36
36
|
chatTrigger: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
|
|
37
37
|
serviceTrigger: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
|
|
38
38
|
voiceAgent: { acceptsInputFrom: [], canOutputTo: PROCESSING_OUTPUTS },
|
|
@@ -57,10 +57,10 @@ exports.NODE_CONNECTIONS = {
|
|
|
57
57
|
// approval is the generic "human-in-the-loop gate" — it should be
|
|
58
58
|
// able to gate ANY action, not the hand-picked subset that existed
|
|
59
59
|
// when this entry was last touched. Same staleness pattern as merge.
|
|
60
|
-
approval: { acceptsInputFrom: ['
|
|
60
|
+
approval: { acceptsInputFrom: ['webhook', 'filter', 'transform'], canOutputTo: ['webhook', 'filter', 'transform', 'emailAction', 'httpAction', 'mongoAction', 'postgresAction', 'notificationAction', 'sheetsAction', 'calendarAction', 'docsAction', 'driveAction', 'firecrawlAction', 'telegramAction', 'whatsappAction', 'discordAction', 'slackAction', 'googleContactsAction', 'vectorStore'], special: { hasRejectionOutputNodes: true } },
|
|
61
61
|
loop: { acceptsInputFrom: STANDARD_INPUTS, canOutputTo: PROCESSING_OUTPUTS, special: { hasLoopBack: true } },
|
|
62
62
|
// ── Routing nodes ──
|
|
63
|
-
router: { acceptsInputFrom: ['
|
|
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
66
|
httpAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
|
package/dist/dispatch.js
CHANGED
|
@@ -14,7 +14,7 @@ exports.NODE_DISPATCH = void 0;
|
|
|
14
14
|
exports.getAllNodeCollections = getAllNodeCollections;
|
|
15
15
|
exports.getNodeDispatchConfig = getNodeDispatchConfig;
|
|
16
16
|
exports.NODE_DISPATCH = {
|
|
17
|
-
// ── Pipeline processing — generic dispatch off
|
|
17
|
+
// ── Pipeline processing — generic dispatch off webhook ──
|
|
18
18
|
filter: { service: 'filterNodesService', collection: 'filternodes', hasFilters: true, outputFields: ['outputNodes'], customDispatch: false, pipelineDispatch: 'generic' },
|
|
19
19
|
transform: { service: 'transformNodesService', collection: 'transformnodes', hasFilters: false, outputFields: ['outputNodes'], customDispatch: false, pipelineDispatch: 'generic' },
|
|
20
20
|
code: { service: 'codeNodesService', collection: 'codenodes', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'generic' },
|
|
@@ -37,7 +37,7 @@ exports.NODE_DISPATCH = {
|
|
|
37
37
|
loop: { service: 'loopNodesService', collection: 'loopnodes', hasFilters: false, outputFields: ['loopOutputNodes', 'doneOutputNodes'], customDispatch: true, pipelineDispatch: 'custom' },
|
|
38
38
|
// ── Routing — custom dispatch ──
|
|
39
39
|
router: { service: 'routersService', collection: 'routers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'custom' },
|
|
40
|
-
// ── Action nodes — fired in onDeliveryResult, excluded from
|
|
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
42
|
httpAction: { service: 'httpActionsService', collection: 'httpactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
43
43
|
mongoAction: { service: 'mongoActionsService', collection: 'mongoactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
@@ -56,8 +56,8 @@ exports.NODE_DISPATCH = {
|
|
|
56
56
|
rssAction: { service: 'rssActionsService', collection: 'rssactions', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
57
57
|
socialMediaAction: { service: 'socialMediaActionsService', collection: 'socialmediaactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
58
58
|
// ── Sources — start the flow themselves, not dispatched ──
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
webhook: { service: 'webhooksService', collection: 'webhooks', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
60
|
+
scheduledWorkflow: { service: 'scheduledWorkflowsService', collection: 'scheduledworkflows', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
61
61
|
chatTrigger: { service: 'chatTriggersService', collection: 'chattriggers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
62
62
|
serviceTrigger: { service: 'serviceTriggersService', collection: 'servicetriggers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
63
63
|
voiceAgent: { service: 'voiceAgentsService', collection: 'voiceagents', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
package/dist/registry.js
CHANGED
|
@@ -11,16 +11,16 @@ exports.NODE_TYPE_TO_PREFIX = exports.PREFIX_TO_NODE_TYPE = exports.NODE_STATE_K
|
|
|
11
11
|
exports.getNodeRegistryEntry = getNodeRegistryEntry;
|
|
12
12
|
exports.NODE_REGISTRY = {
|
|
13
13
|
// ── Sources ──
|
|
14
|
-
|
|
15
|
-
type: '
|
|
16
|
-
group: 'Sources', detailPath: '/dashboard/
|
|
17
|
-
stateKey: '
|
|
14
|
+
webhook: {
|
|
15
|
+
type: 'webhook', prefix: 'wh', label: 'Webhook',
|
|
16
|
+
group: 'Sources', detailPath: '/dashboard/webhooks', apiPath: '/webhooks',
|
|
17
|
+
stateKey: 'webhooks', allStateKey: 'allWebhooks',
|
|
18
18
|
color: '#a78bfa', testable: false,
|
|
19
19
|
},
|
|
20
|
-
|
|
21
|
-
type: '
|
|
22
|
-
group: 'Sources', detailPath: '/dashboard/scheduled-
|
|
23
|
-
stateKey: '
|
|
20
|
+
scheduledWorkflow: {
|
|
21
|
+
type: 'scheduledWorkflow', prefix: 'swf', label: 'Scheduled Workflow',
|
|
22
|
+
group: 'Sources', detailPath: '/dashboard/scheduled-workflows', apiPath: '/scheduled-workflows',
|
|
23
|
+
stateKey: 'scheduledWorkflows', allStateKey: 'allScheduledWorkflows',
|
|
24
24
|
color: '#2dd4bf', testable: true,
|
|
25
25
|
},
|
|
26
26
|
chatTrigger: {
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** All valid node type identifiers */
|
|
2
|
-
export type NodeType = '
|
|
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';
|
|
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 */
|
|
@@ -94,12 +94,12 @@ export interface NodeUIConfig {
|
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
96
96
|
* How the event pipeline routes a payload to this node when an
|
|
97
|
-
* upstream
|
|
97
|
+
* upstream webhook connects to it directly. Required so adding a
|
|
98
98
|
* new node type at compile time is impossible without picking one.
|
|
99
99
|
*
|
|
100
100
|
* - 'generic': dispatchConnectedNodes loops findActiveByInputEndpoint
|
|
101
101
|
* on the service and dispatches every active match. Use for
|
|
102
|
-
* pipeline-style nodes that ingest
|
|
102
|
+
* pipeline-style nodes that ingest webhook payloads (filter,
|
|
103
103
|
* transform, ai, code, markdown, fileTransform, vectorStore).
|
|
104
104
|
*
|
|
105
105
|
* - 'custom': has a dedicated `case` in the dispatchOutputNodes
|
|
@@ -109,10 +109,10 @@ export interface NodeUIConfig {
|
|
|
109
109
|
* loop, merge, approval, schemaValidator, router). The generic
|
|
110
110
|
* loop must NOT process these — would dispatch twice.
|
|
111
111
|
*
|
|
112
|
-
* - 'excluded': not dispatched in the
|
|
112
|
+
* - 'excluded': not dispatched in the webhook flow at all. Action
|
|
113
113
|
* nodes (email/http/mongo/notification/sheets/calendar/docs/
|
|
114
114
|
* firecrawl) are fired post-delivery in onDeliveryResult with
|
|
115
|
-
* their own loops; ingress nodes (
|
|
115
|
+
* their own loops; ingress nodes (webhook/scheduledWorkflow/
|
|
116
116
|
* chatTrigger/serviceTrigger) start the flow themselves;
|
|
117
117
|
* stickyNote is purely visual.
|
|
118
118
|
*/
|
package/dist/ui.js
CHANGED
|
@@ -8,8 +8,8 @@ exports.PREFIX_TO_TYPE = exports.NODE_UI = void 0;
|
|
|
8
8
|
exports.resolveNodeId = resolveNodeId;
|
|
9
9
|
exports.NODE_UI = {
|
|
10
10
|
// ── Source nodes ──
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
webhook: { fromNodes: true, toNodes: true, isSource: true },
|
|
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
|
serviceTrigger: { 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
|
|
@@ -72,8 +72,8 @@ exports.NODE_UI = {
|
|
|
72
72
|
};
|
|
73
73
|
/** Canvas prefix → node type mapping (used by FlowCanvas to identify node type from XYFlow node ID) */
|
|
74
74
|
exports.PREFIX_TO_TYPE = [
|
|
75
|
-
{ prefix: '
|
|
76
|
-
{ prefix: '
|
|
75
|
+
{ prefix: 'wh-', type: 'webhook', canvasType: 'webhook' },
|
|
76
|
+
{ prefix: 'swf-', type: 'scheduledWorkflow', canvasType: 'scheduledWorkflow' },
|
|
77
77
|
{ prefix: 'chat-', type: 'chatTrigger', canvasType: 'chatTrigger' },
|
|
78
78
|
{ prefix: 'svc-', type: 'serviceTrigger', canvasType: 'serviceTrigger' },
|
|
79
79
|
{ prefix: 'va-', type: 'voiceAgent', canvasType: 'voiceAgent' },
|
package/package.json
CHANGED