@hostwebhook/node-types 1.52.18 → 1.53.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.
@@ -22,7 +22,7 @@ const PROCESSING_OUTPUTS = [
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 },
package/dist/dispatch.js CHANGED
@@ -59,7 +59,7 @@ exports.NODE_DISPATCH = {
59
59
  webhook: { service: 'webhooksService', collection: 'webhooks', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
60
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
- serviceTrigger: { service: 'serviceTriggersService', collection: 'servicetriggers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
62
+ trigger: { service: 'triggersService', collection: 'triggers', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
63
63
  voiceAgent: { service: 'voiceAgentsService', collection: 'voiceagents', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
64
64
  // ── Annotation — never executed in pipeline ──
65
65
  stickyNote: { service: 'stickyNotesService', collection: 'stickynotes', hasFilters: false, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
@@ -15,17 +15,24 @@
15
15
  * ejecutor lee `entity.documentId`, `entity.contentTemplate`… con esos mismos
16
16
  * nombres.
17
17
  *
18
- * ── Lo raro de Docs: el desplegable va EN MEDIO ──
19
- * En esta página el selector de operación **no** está arriba del todo. El orden
20
- * de pantalla es «qué documento» → «qué hacer» → «con qué»:
18
+ * ── El orden de pantalla, y por qué cambió ──
19
+ * Hoy es el mismo que en Sheets, Drive, Telegram, Mongo y Postgres — primero
20
+ * qué hacer, luego sobre qué:
21
21
  *
22
- * DocumentPicker + pegar ID (o el título, si es createDoc)
23
22
  * ── selector de operación ──
23
+ * DocumentPicker + pegar ID (o el título, si es createDoc)
24
24
  * Content / Search+Replace / Rows+Columns
25
25
  *
26
- * Por eso cada param lleva `slot`. Sin él, un bucle único empujaría la identidad
27
- * del documento por debajo del selector y cambiaría el orden en pantalla, que es
28
- * justo lo que este refactor no debe tocar.
26
+ * Estuvo al revés, con el desplegable EN MEDIO y el razonamiento «qué documento
27
+ * → qué hacer → con qué», y este comentario decía que un refactor no debía
28
+ * tocarlo. Se cambió a propósito el 2026-08-12 (dashboard#128) por dos motivos:
29
+ * la operación es la que decide QUÉ CAMPOS aparecen —`createDoc` ni siquiera
30
+ * pide documento, pide título—, y ser el único nodo con otro orden es una
31
+ * sorpresa por nodo.
32
+ *
33
+ * Los `slot` siguen haciendo falta: separan la identidad del documento de los
34
+ * campos de la operación, aunque ahora las dos vayan debajo del selector. Un
35
+ * bucle único ordenaría por el array de params y no por ese criterio.
29
36
  */
30
37
  export declare const DOCS_OPERATIONS: readonly ["readDoc", "createDoc", "appendText", "replaceText", "insertTable"];
31
38
  export type DocsOperation = (typeof DOCS_OPERATIONS)[number];
@@ -16,17 +16,24 @@
16
16
  * ejecutor lee `entity.documentId`, `entity.contentTemplate`… con esos mismos
17
17
  * nombres.
18
18
  *
19
- * ── Lo raro de Docs: el desplegable va EN MEDIO ──
20
- * En esta página el selector de operación **no** está arriba del todo. El orden
21
- * de pantalla es «qué documento» → «qué hacer» → «con qué»:
19
+ * ── El orden de pantalla, y por qué cambió ──
20
+ * Hoy es el mismo que en Sheets, Drive, Telegram, Mongo y Postgres — primero
21
+ * qué hacer, luego sobre qué:
22
22
  *
23
- * DocumentPicker + pegar ID (o el título, si es createDoc)
24
23
  * ── selector de operación ──
24
+ * DocumentPicker + pegar ID (o el título, si es createDoc)
25
25
  * Content / Search+Replace / Rows+Columns
26
26
  *
27
- * Por eso cada param lleva `slot`. Sin él, un bucle único empujaría la identidad
28
- * del documento por debajo del selector y cambiaría el orden en pantalla, que es
29
- * justo lo que este refactor no debe tocar.
27
+ * Estuvo al revés, con el desplegable EN MEDIO y el razonamiento «qué documento
28
+ * → qué hacer → con qué», y este comentario decía que un refactor no debía
29
+ * tocarlo. Se cambió a propósito el 2026-08-12 (dashboard#128) por dos motivos:
30
+ * la operación es la que decide QUÉ CAMPOS aparecen —`createDoc` ni siquiera
31
+ * pide documento, pide título—, y ser el único nodo con otro orden es una
32
+ * sorpresa por nodo.
33
+ *
34
+ * Los `slot` siguen haciendo falta: separan la identidad del documento de los
35
+ * campos de la operación, aunque ahora las dos vayan debajo del selector. Un
36
+ * bucle único ordenaría por el array de params y no por ese criterio.
30
37
  */
31
38
  Object.defineProperty(exports, "__esModule", { value: true });
32
39
  exports.DOCS_OPERATION_SPECS = exports.DOCS_OPERATIONS = void 0;
@@ -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: {
@@ -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' | '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
@@ -75,7 +75,7 @@ exports.PREFIX_TO_TYPE = [
75
75
  { prefix: 'wh-', type: 'webhook', canvasType: 'webhook' },
76
76
  { prefix: 'swf-', type: 'scheduledWorkflow', canvasType: 'scheduledWorkflow' },
77
77
  { prefix: 'chat-', type: 'chatTrigger', canvasType: 'chatTrigger' },
78
- { prefix: 'svc-', type: 'serviceTrigger', canvasType: 'serviceTrigger' },
78
+ { prefix: 'trg-', type: 'trigger', canvasType: 'trigger' },
79
79
  { prefix: 'va-', type: 'voiceAgent', canvasType: 'voiceAgent' },
80
80
  { prefix: 'ea-', type: 'emailAction', canvasType: 'emailAction' },
81
81
  { prefix: 'tg-', type: 'telegramAction', canvasType: 'telegramAction' },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostwebhook/node-types",
3
- "version": "1.52.18",
3
+ "version": "1.53.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",