@hostwebhook/node-types 1.69.0 → 1.71.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.
Files changed (101) hide show
  1. package/dist/bucket-operations.d.ts +88 -0
  2. package/dist/bucket-operations.js +140 -0
  3. package/dist/calendar-toolkit.d.ts +1 -1
  4. package/dist/connections.d.ts +1 -1
  5. package/dist/connections.js +1 -0
  6. package/dist/discord-operations.d.ts +1 -1
  7. package/dist/discord-operations.js +4 -4
  8. package/dist/discord-toolkit.d.ts +1 -1
  9. package/dist/discord-toolkit.js +3 -3
  10. package/dist/dispatch.d.ts +1 -1
  11. package/dist/dispatch.js +1 -0
  12. package/dist/docs-toolkit.d.ts +1 -1
  13. package/dist/drive-toolkit.d.ts +1 -1
  14. package/dist/esm/bucket-operations.d.ts +88 -0
  15. package/dist/esm/bucket-operations.js +136 -0
  16. package/dist/esm/calendar-operations.d.ts +67 -0
  17. package/dist/esm/calendar-operations.js +176 -0
  18. package/dist/esm/calendar-toolkit.d.ts +50 -0
  19. package/dist/esm/calendar-toolkit.js +152 -0
  20. package/dist/esm/capacidad-de-credencial.d.ts +75 -0
  21. package/dist/esm/capacidad-de-credencial.js +68 -0
  22. package/dist/esm/connections.d.ts +17 -0
  23. package/dist/esm/connections.js +107 -0
  24. package/dist/esm/credentials.d.ts +144 -0
  25. package/dist/esm/credentials.js +199 -0
  26. package/dist/esm/discord-operations.d.ts +104 -0
  27. package/dist/esm/discord-operations.js +407 -0
  28. package/dist/esm/discord-toolkit.d.ts +64 -0
  29. package/dist/esm/discord-toolkit.js +260 -0
  30. package/dist/esm/dispatch.d.ts +16 -0
  31. package/dist/esm/dispatch.js +77 -0
  32. package/dist/esm/docs-operations.d.ts +99 -0
  33. package/dist/esm/docs-operations.js +127 -0
  34. package/dist/esm/docs-toolkit.d.ts +42 -0
  35. package/dist/esm/docs-toolkit.js +97 -0
  36. package/dist/esm/drive-operations.d.ts +103 -0
  37. package/dist/esm/drive-operations.js +319 -0
  38. package/dist/esm/drive-toolkit.d.ts +54 -0
  39. package/dist/esm/drive-toolkit.js +177 -0
  40. package/dist/esm/github-operations.d.ts +147 -0
  41. package/dist/esm/github-operations.js +551 -0
  42. package/dist/esm/gmail-operations.d.ts +190 -0
  43. package/dist/esm/gmail-operations.js +560 -0
  44. package/dist/esm/google-analytics-operations.d.ts +99 -0
  45. package/dist/esm/google-analytics-operations.js +222 -0
  46. package/dist/esm/google-contacts-operations.d.ts +93 -0
  47. package/dist/esm/google-contacts-operations.js +363 -0
  48. package/dist/esm/index.d.ts +68 -0
  49. package/dist/esm/index.js +51 -0
  50. package/dist/esm/jira-operations.d.ts +164 -0
  51. package/dist/esm/jira-operations.js +470 -0
  52. package/dist/esm/llm-models.d.ts +101 -0
  53. package/dist/esm/llm-models.js +230 -0
  54. package/dist/esm/mailchimp-operations.d.ts +56 -0
  55. package/dist/esm/mailchimp-operations.js +155 -0
  56. package/dist/esm/mongo-operations.d.ts +61 -0
  57. package/dist/esm/mongo-operations.js +120 -0
  58. package/dist/esm/notion-operations.d.ts +125 -0
  59. package/dist/esm/notion-operations.js +511 -0
  60. package/dist/esm/openrouter.d.ts +142 -0
  61. package/dist/esm/openrouter.js +99 -0
  62. package/dist/esm/package.json +4 -0
  63. package/dist/esm/postgres-operations.d.ts +60 -0
  64. package/dist/esm/postgres-operations.js +75 -0
  65. package/dist/esm/registry.d.ts +160 -0
  66. package/dist/esm/registry.js +885 -0
  67. package/dist/esm/sheets-operations.d.ts +78 -0
  68. package/dist/esm/sheets-operations.js +150 -0
  69. package/dist/esm/sheets-toolkit.d.ts +49 -0
  70. package/dist/esm/sheets-toolkit.js +127 -0
  71. package/dist/esm/shopify-operations.d.ts +95 -0
  72. package/dist/esm/shopify-operations.js +259 -0
  73. package/dist/esm/slack-operations.d.ts +81 -0
  74. package/dist/esm/slack-operations.js +244 -0
  75. package/dist/esm/slack-toolkit.d.ts +60 -0
  76. package/dist/esm/slack-toolkit.js +235 -0
  77. package/dist/esm/telegram-operations.d.ts +104 -0
  78. package/dist/esm/telegram-operations.js +351 -0
  79. package/dist/esm/telegram-toolkit.d.ts +52 -0
  80. package/dist/esm/telegram-toolkit.js +183 -0
  81. package/dist/esm/types.d.ts +149 -0
  82. package/dist/esm/types.js +8 -0
  83. package/dist/esm/ui.d.ts +13 -0
  84. package/dist/esm/ui.js +152 -0
  85. package/dist/esm/whatsapp-operations.d.ts +23 -0
  86. package/dist/esm/whatsapp-operations.js +36 -0
  87. package/dist/index.d.ts +68 -66
  88. package/dist/index.js +193 -187
  89. package/dist/openrouter.d.ts +1 -1
  90. package/dist/registry.d.ts +4 -4
  91. package/dist/registry.js +540 -210
  92. package/dist/sheets-toolkit.d.ts +1 -1
  93. package/dist/slack-operations.d.ts +1 -1
  94. package/dist/slack-operations.js +4 -4
  95. package/dist/slack-toolkit.d.ts +1 -1
  96. package/dist/slack-toolkit.js +3 -3
  97. package/dist/telegram-toolkit.d.ts +1 -1
  98. package/dist/types.d.ts +1 -1
  99. package/dist/ui.d.ts +1 -1
  100. package/dist/ui.js +2 -0
  101. package/package.json +21 -3
@@ -0,0 +1,149 @@
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' | 'gmailAction' | 'httpAction' | 'mongoAction' | 'postgresAction' | 'notificationAction' | 'sheetsAction' | 'calendarAction' | 'docsAction' | 'driveAction' | 'firecrawlAction' | 'telegramAction' | 'whatsappAction' | 'discordAction' | 'slackAction' | 'googleContactsAction' | 'googleAnalyticsAction' | 'notionAction' | 'vectorStore' | 'rssAction' | 'socialMediaAction' | 'mailchimpAction' | 'shopifyAction' | 'githubAction' | 'jiraAction' | 'bucketAction' | 'stickyNote';
3
+ /** Node role in the pipeline */
4
+ export type NodeRole = 'source' | 'processing' | 'flowControl' | 'routing' | 'action' | 'monitoring';
5
+ /** Handle positions on the canvas node */
6
+ export type HandlePosition = 'left' | 'right' | 'top' | 'bottom';
7
+ /** Connection rules — which node types can connect to/from this node */
8
+ export interface NodeConnectionConfig {
9
+ acceptsInputFrom: NodeType[];
10
+ canOutputTo: NodeType[];
11
+ special?: {
12
+ hasRejectionOutputNodes?: boolean;
13
+ hasBranches?: boolean;
14
+ isTerminal?: boolean;
15
+ hasLoopBack?: boolean;
16
+ };
17
+ }
18
+ /** UI-specific config for the dashboard canvas */
19
+ export interface NodeUIConfig {
20
+ fromNodes: boolean;
21
+ toNodes: boolean;
22
+ isSource?: boolean;
23
+ inputHandles?: HandlePosition[];
24
+ outputHandles?: HandlePosition[];
25
+ dotHandles?: {
26
+ input?: string[];
27
+ output?: string[];
28
+ };
29
+ /**
30
+ * When true, the canvas derives output handles from the node entity
31
+ * at render time (e.g. one handle per `entity.tools[i].name`) rather
32
+ * than from a static `dotHandles.output` list. Used by Voice Agent —
33
+ * the count of tools is data, not config. NodeShell branches on this
34
+ * flag to render the dynamic handle set.
35
+ */
36
+ dynamicOutputs?: boolean;
37
+ special?: {
38
+ hasBranches?: boolean;
39
+ isTerminal?: boolean;
40
+ hasLoopBack?: boolean;
41
+ connectModal?: 'branch' | 'rule' | 'output-group';
42
+ routerTargetLabel?: string;
43
+ /**
44
+ * Generic named output groups — used by connectModal: 'output-group'.
45
+ * The modal reads entity[outputGroupsField] as an array of groups,
46
+ * each with a name (outputGroupNameField), a summary (outputGroupSummaryField),
47
+ * and its own outputNodes[].
48
+ * Works for Split (outputs[]), Conditional (branches[]), or any future branching node.
49
+ */
50
+ outputGroups?: {
51
+ /** Entity field containing the array of groups (e.g. 'outputs', 'branches') */
52
+ field?: string;
53
+ /** Field within each group for display name (e.g. 'name') */
54
+ nameField?: string;
55
+ /** Field within each group for summary/description (e.g. 'field', 'filterMode') */
56
+ summaryField?: string;
57
+ /** Label shown in the modal (e.g. 'output', 'branch') */
58
+ label: string;
59
+ /** Entity field for the fallback/else path (e.g. 'elseOutputNodes') */
60
+ elseField?: string;
61
+ /**
62
+ * Fixed output groups — for nodes with a static set of outputs (e.g. approval: approve/reject).
63
+ * Each entry maps to a top-level entity field that holds outputNodes[].
64
+ * When set, `field`/`nameField` are ignored — modal shows these fixed options.
65
+ */
66
+ fixedGroups?: Array<{
67
+ name: string;
68
+ field: string;
69
+ }>;
70
+ /**
71
+ * Optional content-aware gate — the output-group modal only opens
72
+ * when `entity[gate.field] === gate.value`. Lets a node opt into
73
+ * multi-branch routing only in some modes (e.g. AI Node in
74
+ * classifier mode) without trapping every connection in the
75
+ * picker the rest of the time. When the gate fails, the
76
+ * FlowCanvas falls through to the universal
77
+ * `entity.outputNodes` connect path.
78
+ */
79
+ gate?: {
80
+ field: string;
81
+ value: unknown;
82
+ };
83
+ };
84
+ /**
85
+ * Maps output fields to alternate payload fields on the source entity.
86
+ * When a downstream node is connected via a specific output field,
87
+ * InputSection reads the alternate payload instead of lastPayload.
88
+ * Example: { doneOutputNodes: 'lastDonePayload' } for loop nodes.
89
+ */
90
+ alternatePayloads?: Record<string, string>;
91
+ /** Whether this node can be connected as a loop-back target. Only nodes that go through the unified node-lifecycle support loop-back detection. */
92
+ loopBackAllowed?: boolean;
93
+ };
94
+ }
95
+ /**
96
+ * How the event pipeline routes a payload to this node when an
97
+ * upstream webhook connects to it directly. Required so adding a
98
+ * new node type at compile time is impossible without picking one.
99
+ *
100
+ * - 'generic': dispatchConnectedNodes loops findActiveByInputEndpoint
101
+ * on the service and dispatches every active match. Use for
102
+ * pipeline-style nodes that ingest webhook payloads (filter,
103
+ * transform, ai, code, markdown, fileTransform, vectorStore).
104
+ *
105
+ * - 'custom': has a dedicated `case` in the dispatchOutputNodes
106
+ * switch that calls the node's specific service method. Used
107
+ * when the node needs scheduling, branching, gating, or queueing
108
+ * (delay, cache, aggregator, rateLimiter, conditional, split,
109
+ * loop, merge, approval, schemaValidator, router). The generic
110
+ * loop must NOT process these — would dispatch twice.
111
+ *
112
+ * - 'excluded': not dispatched in the webhook flow at all. Action
113
+ * nodes (email/http/mongo/notification/sheets/calendar/docs/
114
+ * firecrawl) are fired post-delivery in onDeliveryResult with
115
+ * their own loops; ingress nodes (webhook/scheduledWorkflow/
116
+ * chatTrigger/trigger) start the flow themselves;
117
+ * stickyNote is purely visual.
118
+ */
119
+ export type PipelineDispatchKind = 'generic' | 'custom' | 'excluded';
120
+ /** API dispatch config — how the event pipeline processes each node */
121
+ export interface NodeDispatchConfig {
122
+ service: string;
123
+ collection: string;
124
+ hasFilters: boolean;
125
+ outputFields: string[];
126
+ /** @deprecated Use `pipelineDispatch` instead. Kept for backwards compat
127
+ * during the migration; will be removed once every consumer reads
128
+ * `pipelineDispatch`. */
129
+ customDispatch: boolean;
130
+ /** Required. See PipelineDispatchKind for the contract per value. */
131
+ pipelineDispatch: PipelineDispatchKind;
132
+ }
133
+ /** Standardized payload metadata — every node output MUST include _meta */
134
+ export interface PayloadMeta {
135
+ iterable: boolean;
136
+ count: number;
137
+ iterateField?: string;
138
+ }
139
+ /** Helper to create _meta for single-object outputs */
140
+ export declare function singleMeta(): PayloadMeta;
141
+ /** Helper to create _meta for iterable array outputs */
142
+ export declare function iterableMeta(field: string, count: number): PayloadMeta;
143
+ /** Canvas prefix → node type mapping */
144
+ export interface PrefixMapping {
145
+ prefix: string;
146
+ type: NodeType;
147
+ /** Canvas node type used in React Flow nodeTypes map (e.g. "cache-node", "email-action") */
148
+ canvasType: string;
149
+ }
@@ -0,0 +1,8 @@
1
+ /** Helper to create _meta for single-object outputs */
2
+ export function singleMeta() {
3
+ return { iterable: false, count: 1 };
4
+ }
5
+ /** Helper to create _meta for iterable array outputs */
6
+ export function iterableMeta(field, count) {
7
+ return { iterable: true, iterateField: field, count };
8
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Dashboard UI config — handle positions, dot visibility, canvas prefixes.
3
+ * Only imported by the Dashboard. Broker and API don't need this.
4
+ */
5
+ import type { NodeType, NodeUIConfig, PrefixMapping } from './types.js';
6
+ export declare const NODE_UI: Record<NodeType, NodeUIConfig>;
7
+ /** Canvas prefix → node type mapping (used by FlowCanvas to identify node type from XYFlow node ID) */
8
+ export declare const PREFIX_TO_TYPE: PrefixMapping[];
9
+ /** Resolve canvas node ID to { type, entityId } */
10
+ export declare function resolveNodeId(canvasId: string): {
11
+ type: NodeType;
12
+ entityId: string;
13
+ } | null;
package/dist/esm/ui.js ADDED
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Dashboard UI config — handle positions, dot visibility, canvas prefixes.
3
+ * Only imported by the Dashboard. Broker and API don't need this.
4
+ */
5
+ export const NODE_UI = {
6
+ // ── Source nodes ──
7
+ // Una fuente arranca el flujo: `fromNodes: false` significa que nada puede
8
+ // conectarse HACIA ella, y por eso su DTO en la API tampoco declara
9
+ // `inputNodes`. Expone un único punto de salida, `right-out`. El de abajo se
10
+ // retiró porque no aportaba una segunda semántica — sólo una segunda diana
11
+ // donde soltar aristas.
12
+ //
13
+ // Ya no queda ningún punto de abajo en todo el registro. Aquí ponía que el
14
+ // `router` conservaba el suyo «porque ahí abajo significa por regla», y era
15
+ // mentira: el modal de reglas lo abre `special.connectModal`, que mira el
16
+ // TIPO del nodo origen y no el handle por el que sueltas, así que desde la
17
+ // derecha salía el mismo modal. El destino de una regla vive en
18
+ // `port: rule:<id>`; el handle es sólo por dónde entra y sale la línea.
19
+ webhook: { fromNodes: true, toNodes: true, isSource: true },
20
+ scheduledWorkflow: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right'], dotHandles: { output: ['right-out'] } },
21
+ chatTrigger: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right'], dotHandles: { output: ['right-out'] } },
22
+ trigger: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right'], dotHandles: { output: ['right-out'] } },
23
+ // Voice Agent: dynamicOutputs=true tells NodeShell to derive ONE
24
+ // output handle per non-disabled `entity.tools[i].name`. The
25
+ // `right-out` fallback handle is rendered when the agent has zero
26
+ // tools so the user has somewhere to drop the first wired connection
27
+ // before any tools are defined (rare but possible during onboarding).
28
+ voiceAgent: { fromNodes: false, toNodes: true, isSource: true, outputHandles: ['right'], dotHandles: { output: ['right-out'] }, dynamicOutputs: true },
29
+ // ── Pipeline processing nodes ──
30
+ filter: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
31
+ transform: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
32
+ // One output only: a payload that fails validation stops at the node.
33
+ schemaValidator: { fromNodes: true, toNodes: true, outputHandles: ['right'], special: { loopBackAllowed: true } },
34
+ conditional: { fromNodes: true, toNodes: true, outputHandles: ['right'], special: { loopBackAllowed: true, connectModal: 'output-group', outputGroups: { field: 'branches', nameField: 'name', summaryField: 'filterMode', label: 'branch', elseField: 'elseOutputNodes' } } },
35
+ delay: { fromNodes: true, toNodes: true },
36
+ rateLimiter: { fromNodes: true, toNodes: true },
37
+ aggregator: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
38
+ cache: { fromNodes: true, toNodes: true },
39
+ code: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
40
+ // AI Node: in classifier mode (entity.outputMode === 'classifier') the
41
+ // node fans out to N output handles — one per category in
42
+ // `entity.categories[]`, with the wiring in `categories[].outputNodes`.
43
+ // An item the classifier cannot place lands on the synthetic "other"
44
+ // value (see `entity.includeOtherBranch`) and stops there — "other" has
45
+ // no handle and no route. In any other outputMode the node falls back to
46
+ // the single right-out handle NodeShell renders when no dynamic outputs
47
+ // materialize.
48
+ ai: { fromNodes: true, toNodes: true, outputHandles: ['right'], special: { loopBackAllowed: true, connectModal: 'output-group', outputGroups: { field: 'categories', nameField: 'name', summaryField: 'description', label: 'category', gate: { field: 'outputMode', value: 'classifier' } } } },
49
+ markdown: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
50
+ fileTransform: { fromNodes: true, toNodes: true },
51
+ limit: { fromNodes: true, toNodes: true, special: { loopBackAllowed: true } },
52
+ // ── Flow control nodes ──
53
+ split: { fromNodes: true, toNodes: true, outputHandles: ['right'], special: { connectModal: 'output-group', outputGroups: { field: 'outputs', nameField: 'name', summaryField: 'field', label: 'output' } } },
54
+ merge: { fromNodes: true, toNodes: true, inputHandles: ['left', 'top'] },
55
+ approval: { fromNodes: true, toNodes: true, outputHandles: ['right'], special: { connectModal: 'output-group', outputGroups: { fixedGroups: [{ name: 'Approve', field: 'outputNodes' }, { name: 'Reject', field: 'rejectionOutputNodes' }], label: 'action' } } },
56
+ loop: { fromNodes: true, toNodes: true, inputHandles: ['left'], outputHandles: ['right'], dotHandles: { input: ['left-in'], output: ['right-out-loop', 'right-in-loopback', 'right-out-done'] }, special: { hasLoopBack: true, alternatePayloads: { doneOutputNodes: 'lastDonePayload' } } },
57
+ // ── Routing nodes ──
58
+ router: { fromNodes: true, toNodes: true, outputHandles: ['right'], dotHandles: { output: ['right-out'] }, special: { connectModal: 'rule' } },
59
+ // ── Action nodes ──
60
+ emailAction: { fromNodes: true, toNodes: true, inputHandles: ['left', 'top'], outputHandles: ['right'], dotHandles: { input: ['left-in', 'top-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'email' } },
61
+ gmailAction: { fromNodes: true, toNodes: true, inputHandles: ['left', 'top'], outputHandles: ['right'], dotHandles: { input: ['left-in', 'top-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'gmail' } },
62
+ httpAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
63
+ mongoAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
64
+ postgresAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
65
+ notificationAction: { fromNodes: true, toNodes: false, inputHandles: ['left', 'top'], dotHandles: { input: ['left-in', 'top-in'] }, special: { isTerminal: true, routerTargetLabel: 'notification' } },
66
+ sheetsAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
67
+ calendarAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
68
+ docsAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
69
+ driveAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
70
+ firecrawlAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
71
+ telegramAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'telegram' } },
72
+ whatsappAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'whatsapp' } },
73
+ discordAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'discord' } },
74
+ mailchimpAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'mailchimp' } },
75
+ shopifyAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'shopify' } },
76
+ githubAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'github' } },
77
+ jiraAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'jira' } },
78
+ bucketAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'bucket' } },
79
+ slackAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'slack' } },
80
+ googleContactsAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
81
+ googleAnalyticsAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
82
+ notionAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true, routerTargetLabel: 'notion' } },
83
+ vectorStore: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
84
+ rssAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
85
+ socialMediaAction: { fromNodes: true, toNodes: true, inputHandles: ['left'], dotHandles: { input: ['left-in'], output: ['right-out'] }, special: { loopBackAllowed: true } },
86
+ // ── Annotations ──
87
+ stickyNote: { fromNodes: false, toNodes: false },
88
+ };
89
+ /** Canvas prefix → node type mapping (used by FlowCanvas to identify node type from XYFlow node ID) */
90
+ export const PREFIX_TO_TYPE = [
91
+ { prefix: 'wh-', type: 'webhook', canvasType: 'webhook' },
92
+ { prefix: 'swf-', type: 'scheduledWorkflow', canvasType: 'scheduledWorkflow' },
93
+ { prefix: 'chat-', type: 'chatTrigger', canvasType: 'chatTrigger' },
94
+ { prefix: 'trg-', type: 'trigger', canvasType: 'trigger' },
95
+ { prefix: 'va-', type: 'voiceAgent', canvasType: 'voiceAgent' },
96
+ { prefix: 'ea-', type: 'emailAction', canvasType: 'emailAction' },
97
+ { prefix: 'gm-', type: 'gmailAction', canvasType: 'gmailAction' },
98
+ { prefix: 'tg-', type: 'telegramAction', canvasType: 'telegramAction' },
99
+ { prefix: 'wa-', type: 'whatsappAction', canvasType: 'whatsappAction' },
100
+ { prefix: 'dc-', type: 'discordAction', canvasType: 'discordAction' },
101
+ { prefix: 'sl-', type: 'slackAction', canvasType: 'slackAction' },
102
+ { prefix: 'mc-', type: 'mailchimpAction', canvasType: 'mailchimpAction' },
103
+ { prefix: 'shp-', type: 'shopifyAction', canvasType: 'shopifyAction' },
104
+ { prefix: 'gh-', type: 'githubAction', canvasType: 'githubAction' },
105
+ { prefix: 'jr-', type: 'jiraAction', canvasType: 'jiraAction' },
106
+ { prefix: 'bkt-', type: 'bucketAction', canvasType: 'bucketAction' },
107
+ { prefix: 'gc-', type: 'googleContactsAction', canvasType: 'googleContactsAction' },
108
+ { prefix: 'gaa-', type: 'googleAnalyticsAction', canvasType: 'googleAnalyticsAction' },
109
+ { prefix: 'ntn-', type: 'notionAction', canvasType: 'notionAction' },
110
+ { prefix: 'ha-', type: 'httpAction', canvasType: 'httpAction' },
111
+ { prefix: 'ma-', type: 'mongoAction', canvasType: 'mongoAction' },
112
+ { prefix: 'pg-', type: 'postgresAction', canvasType: 'postgresAction' },
113
+ { prefix: 'na-', type: 'notificationAction', canvasType: 'notificationAction' },
114
+ { prefix: 'ro-', type: 'router', canvasType: 'router' },
115
+ { prefix: 'fi-', type: 'filter', canvasType: 'filter' },
116
+ { prefix: 'tr-', type: 'transform', canvasType: 'transform' },
117
+ { prefix: 'sv-', type: 'schemaValidator', canvasType: 'schemaValidator' },
118
+ { prefix: 'delay-', type: 'delay', canvasType: 'delay' },
119
+ { prefix: 'sheet-', type: 'sheetsAction', canvasType: 'sheetsAction' },
120
+ { prefix: 'cal-', type: 'calendarAction', canvasType: 'calendarAction' },
121
+ { prefix: 'appr-', type: 'approval', canvasType: 'approval' },
122
+ { prefix: 'merge-', type: 'merge', canvasType: 'merge' },
123
+ { prefix: 'cond-', type: 'conditional', canvasType: 'conditional' },
124
+ { prefix: 'rl-', type: 'rateLimiter', canvasType: 'rateLimiter' },
125
+ { prefix: 'agg-', type: 'aggregator', canvasType: 'aggregator' },
126
+ { prefix: 'cache-', type: 'cache', canvasType: 'cache' },
127
+ { prefix: 'code-', type: 'code', canvasType: 'code' },
128
+ { prefix: 'ai-', type: 'ai', canvasType: 'ai' },
129
+ { prefix: 'split-', type: 'split', canvasType: 'split' },
130
+ { prefix: 'loop-', type: 'loop', canvasType: 'loop' },
131
+ { prefix: 'md-', type: 'markdown', canvasType: 'markdown' },
132
+ { prefix: 'ft-', type: 'fileTransform', canvasType: 'fileTransform' },
133
+ { prefix: 'lim-', type: 'limit', canvasType: 'limit' },
134
+ { prefix: 'doc-', type: 'docsAction', canvasType: 'docsAction' },
135
+ { prefix: 'drv-', type: 'driveAction', canvasType: 'driveAction' },
136
+ { prefix: 'fc-', type: 'firecrawlAction', canvasType: 'firecrawlAction' },
137
+ { prefix: 'vs-', type: 'vectorStore', canvasType: 'vectorStore' },
138
+ { prefix: 'rssa-', type: 'rssAction', canvasType: 'rssAction' },
139
+ { prefix: 'sm-', type: 'socialMediaAction', canvasType: 'socialMediaAction' },
140
+ { prefix: 'note-', type: 'stickyNote', canvasType: 'stickyNote' },
141
+ ];
142
+ /** Resolve canvas node ID to { type, entityId } */
143
+ export function resolveNodeId(canvasId) {
144
+ // Sort by prefix length descending so longer prefixes match first
145
+ const sorted = [...PREFIX_TO_TYPE].sort((a, b) => b.prefix.length - a.prefix.length);
146
+ for (const { prefix, type } of sorted) {
147
+ if (canvasId.startsWith(prefix)) {
148
+ return { type, entityId: canvasId.slice(prefix.length) };
149
+ }
150
+ }
151
+ return null;
152
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * WhatsApp Business Cloud API operation enum — single source of truth
3
+ * across the API, Dashboard, and any future consumers (Message Broker,
4
+ * MCP server). Used by:
5
+ * - whatsappAction entity / DTO (api): operation field + validation
6
+ * - dashboard WhatsAppAction operation picker
7
+ * - MCP toolkit-specs expansion (one aiEnabled whatsappAction → N tools)
8
+ *
9
+ * Targets Meta Cloud API v21+ (the only supported variant after the
10
+ * On-Premises sunset on 2025-10-23). Each op maps to a single POST to
11
+ * `https://graph.facebook.com/v21.0/<phone_number_id>/messages` with
12
+ * a different `type` discriminator in the body.
13
+ *
14
+ * Phase 1 covers the ten ops that handle ~95% of business messaging.
15
+ * Phase 2 candidates (sendInteractiveButtons, sendInteractiveList,
16
+ * sendSticker, sendContacts) extend this list — bump the package and
17
+ * re-install in consumers, same pattern as Gmail / Calendar / Drive
18
+ * / Telegram.
19
+ */
20
+ export declare const WHATSAPP_OPERATIONS: readonly ["sendText", "sendImage", "sendAudio", "sendVideo", "sendDocument", "sendLocation", "sendTemplate", "replyToMessage", "markAsRead", "sendReaction"];
21
+ export type WhatsAppOperation = (typeof WHATSAPP_OPERATIONS)[number];
22
+ /** Type guard — useful when validating untrusted input (DTOs, tool calls). */
23
+ export declare function isWhatsAppOperation(value: unknown): value is WhatsAppOperation;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * WhatsApp Business Cloud API operation enum — single source of truth
3
+ * across the API, Dashboard, and any future consumers (Message Broker,
4
+ * MCP server). Used by:
5
+ * - whatsappAction entity / DTO (api): operation field + validation
6
+ * - dashboard WhatsAppAction operation picker
7
+ * - MCP toolkit-specs expansion (one aiEnabled whatsappAction → N tools)
8
+ *
9
+ * Targets Meta Cloud API v21+ (the only supported variant after the
10
+ * On-Premises sunset on 2025-10-23). Each op maps to a single POST to
11
+ * `https://graph.facebook.com/v21.0/<phone_number_id>/messages` with
12
+ * a different `type` discriminator in the body.
13
+ *
14
+ * Phase 1 covers the ten ops that handle ~95% of business messaging.
15
+ * Phase 2 candidates (sendInteractiveButtons, sendInteractiveList,
16
+ * sendSticker, sendContacts) extend this list — bump the package and
17
+ * re-install in consumers, same pattern as Gmail / Calendar / Drive
18
+ * / Telegram.
19
+ */
20
+ export const WHATSAPP_OPERATIONS = [
21
+ 'sendText',
22
+ 'sendImage',
23
+ 'sendAudio',
24
+ 'sendVideo',
25
+ 'sendDocument',
26
+ 'sendLocation',
27
+ 'sendTemplate',
28
+ 'replyToMessage',
29
+ 'markAsRead',
30
+ 'sendReaction',
31
+ ];
32
+ /** Type guard — useful when validating untrusted input (DTOs, tool calls). */
33
+ export function isWhatsAppOperation(value) {
34
+ return (typeof value === 'string' &&
35
+ WHATSAPP_OPERATIONS.includes(value));
36
+ }
package/dist/index.d.ts CHANGED
@@ -1,66 +1,68 @@
1
- export type { NodeType, NodeRole, HandlePosition, NodeConnectionConfig, NodeUIConfig, NodeDispatchConfig, PrefixMapping, PayloadMeta, } from './types';
2
- export { singleMeta, iterableMeta } from './types';
3
- export { NODE_CONNECTIONS, canReceiveFrom, canReceiveFromNodes, canSendToNodes, isTerminal, isNodeType, ALL_NODE_TYPES, } from './connections';
4
- export { NODE_UI, PREFIX_TO_TYPE, resolveNodeId, } from './ui';
5
- export { NODE_DISPATCH, getAllNodeCollections, getNodeDispatchConfig, } from './dispatch';
6
- export type { NodeRegistryEntry, NodeGroup, NodeVersionSpec, VersionCatalog, } from './registry';
7
- export { NODE_REGISTRY, getNodeRegistryEntry, NODE_DETAIL_PATHS, NODE_COLORS, NODE_STATE_KEYS, PREFIX_TO_NODE_TYPE, NODE_TYPE_TO_PREFIX, } from './registry';
8
- export { isVersioned, versionsOf, versionSpec, currentVersion, fieldsLostBetween, fieldsLost, versionCatalogErrors, } from './registry';
9
- export { GMAIL_OPERATIONS, GMAIL_OPERATION_SPECS, GMAIL_OPERATION_GROUPS, GMAIL_DROPDOWN_OPERATIONS, GMAIL_TOOLKIT_OPERATIONS, GMAIL_TOOLKIT_SPECS, GMAIL_ALL_TOOLKIT_SPECS, GMAIL_SEND_AND_WAIT_TOOL_SPEC, NATIVE_EMAIL_TOOLKIT_SPECS, GMAIL_TOOLKIT_BY_TOOL_NAME, NATIVE_EMAIL_TOOLKIT_BY_TOOL_NAME, GMAIL_SEND_LEGACY_FIELDS, resolveGmailSendFields, isGmailOperation, } from './gmail-operations';
10
- export type { GmailOperation, GmailOperationGroup, GmailParamType, GmailParamSpec, GmailOperationSpec, GmailToolkitParameter, GmailToolkitSpec, GmailSendFieldSource, GmailSendFields, } from './gmail-operations';
11
- export { GOOGLE_CALENDAR_OPERATIONS, GOOGLE_CALENDAR_OPERATION_SPECS, isGoogleCalendarOperation, } from './calendar-operations';
12
- export type { GoogleCalendarOperation, GoogleCalendarParamTarget, GoogleCalendarParamType, GoogleCalendarParamSpec, GoogleCalendarOperationSpec, } from './calendar-operations';
13
- export { GOOGLE_CALENDAR_TOOLKIT_SPECS, GOOGLE_CALENDAR_TOOLKIT_BY_TOOL_NAME, } from './calendar-toolkit';
14
- export type { GoogleCalendarToolkitSpec, GoogleCalendarToolkitParameter, } from './calendar-toolkit';
15
- export { DRIVE_OPERATIONS, DRIVE_OPERATION_SPECS, isDriveOperation, } from './drive-operations';
16
- export type { DriveOperation, DriveParamType, DriveParamSpec, DriveOperationSpec, } from './drive-operations';
17
- export { DRIVE_TOOLKIT_SPECS, DRIVE_TOOLKIT_BY_TOOL_NAME, } from './drive-toolkit';
18
- export type { DriveToolkitSpec, DriveToolkitParameter, } from './drive-toolkit';
19
- export { TELEGRAM_OPERATIONS, TELEGRAM_OPERATION_SPECS, isTelegramOperation, } from './telegram-operations';
20
- export type { TelegramOperation, TelegramParamSpec, TelegramOperationSpec, } from './telegram-operations';
21
- export { TELEGRAM_TOOLKIT_SPECS, TELEGRAM_TOOLKIT_BY_TOOL_NAME, } from './telegram-toolkit';
22
- export type { TelegramToolkitSpec, TelegramToolkitParameter, } from './telegram-toolkit';
23
- export { WHATSAPP_OPERATIONS, isWhatsAppOperation, } from './whatsapp-operations';
24
- export type { WhatsAppOperation } from './whatsapp-operations';
25
- export { operacionesPara, puedeEjecutar, camposNoDisponiblesPara, } from './capacidad-de-credencial';
26
- export type { CapacidadDeCredencial, CapacidadesPorCredencial, } from './capacidad-de-credencial';
27
- export { DISCORD_OPERATIONS, DISCORD_OPERATION_SPECS, DISCORD_CAPACIDADES_POR_CREDENCIAL, operacionesDeDiscordPara, discordPuedeEjecutar, camposDeDiscordNoDisponibles, isDiscordOperation, } from './discord-operations';
28
- export type { DiscordOperation, DiscordParamSpec, DiscordOperationSpec, } from './discord-operations';
29
- export { DISCORD_TOOLKIT_SPECS, DISCORD_TOOLKIT_BY_TOOL_NAME, herramientasDeDiscordPara, } from './discord-toolkit';
30
- export type { DiscordToolkitSpec, DiscordToolkitParameter, } from './discord-toolkit';
31
- export { MAILCHIMP_OPERATIONS, MAILCHIMP_OPERATION_SPECS, MAILCHIMP_CONTACT_STATUSES, isMailchimpOperation, } from './mailchimp-operations';
32
- export type { MailchimpOperation, MailchimpContactStatus, MailchimpParamSpec, MailchimpOperationSpec, } from './mailchimp-operations';
33
- export { SHOPIFY_OPERATIONS, SHOPIFY_OPERATION_SPECS, SHOPIFY_TAGGABLE_RESOURCES, SHOPIFY_SEARCHABLE_RESOURCES, isShopifyOperation, } from './shopify-operations';
34
- export type { ShopifyOperation, ShopifyTaggableResource, ShopifySearchableResource, ShopifyParamSpec, ShopifyOperationSpec, } from './shopify-operations';
35
- export { GITHUB_OPERATIONS, GITHUB_OPERATION_SPECS, GITHUB_DROPDOWN_OPERATIONS, GITHUB_ITERABLE_OPERATIONS, isGithubOperation, } from './github-operations';
36
- export type { GithubOperation, GithubParamType, GithubParamSpec, GithubOperationSpec, } from './github-operations';
37
- export { JIRA_OPERATIONS, JIRA_OPERATION_SPECS, JIRA_DROPDOWN_OPERATIONS, JIRA_ITERABLE_OPERATIONS, isJiraOperation, } from './jira-operations';
38
- export type { JiraOperation, JiraParamType, JiraParamSpec, JiraOperationSpec, } from './jira-operations';
39
- export { SLACK_OPERATIONS, SLACK_OPERATION_SPECS, SLACK_CAPACIDADES_POR_CREDENCIAL, operacionesDeSlackPara, slackPuedeEjecutar, camposDeSlackNoDisponibles, isSlackOperation, } from './slack-operations';
40
- export type { SlackOperation, SlackParamSpec, SlackOperationSpec, } from './slack-operations';
41
- export { SLACK_TOOLKIT_SPECS, SLACK_TOOLKIT_BY_TOOL_NAME, herramientasDeSlackPara, } from './slack-toolkit';
42
- export type { SlackToolkitSpec, SlackToolkitParameter, } from './slack-toolkit';
43
- export { SHEETS_OPERATIONS, SHEETS_OPERATION_SPECS, isSheetsOperation, } from './sheets-operations';
44
- export type { SheetsOperation, SheetsParamSpec, SheetsOperationSpec, } from './sheets-operations';
45
- export { SHEETS_TOOLKIT_SPECS, SHEETS_TOOLKIT_BY_TOOL_NAME, SHEETS_TOOLKIT_DEFAULTABLE, } from './sheets-toolkit';
46
- export type { SheetsToolkitSpec, SheetsToolkitParameter, } from './sheets-toolkit';
47
- export { GOOGLE_CONTACTS_OPERATIONS, GOOGLE_CONTACTS_OPERATIONS_V1, GOOGLE_CONTACTS_OPERATIONS_V2, GOOGLE_CONTACTS_OPERATION_SPECS, GOOGLE_CONTACTS_OPERATION_GROUPS, GOOGLE_CONTACTS_DEFAULT_PERSON_FIELDS, isGoogleContactsOperation, } from './google-contacts-operations';
48
- export type { GoogleContactsOperation, GoogleContactsParamSpec, GoogleContactsOperationSpec, GoogleContactsOperationGroup, } from './google-contacts-operations';
49
- export { GOOGLE_ANALYTICS_OPERATIONS, GOOGLE_ANALYTICS_OPERATION_SPECS, GOOGLE_ANALYTICS_DROPDOWN_OPERATIONS, isGoogleAnalyticsOperation, } from './google-analytics-operations';
50
- export type { GoogleAnalyticsOperation, GoogleAnalyticsParamType, GoogleAnalyticsParamSpec, GoogleAnalyticsOperationSpec, } from './google-analytics-operations';
51
- export { NOTION_OPERATIONS, NOTION_OPERATION_SPECS, NOTION_DROPDOWN_OPERATIONS, isNotionOperation, } from './notion-operations';
52
- export type { NotionOperation, NotionParamType, NotionParamSpec, NotionOperationSpec, } from './notion-operations';
53
- export { POSTGRES_OPERATIONS, POSTGRES_MODES, POSTGRES_OPERATION_SPECS, isPostgresOperation, } from './postgres-operations';
54
- export type { PostgresOperation, PostgresMode, PostgresOperationSpec, } from './postgres-operations';
55
- export { MONGO_OPERATIONS, MONGO_OPERATION_SPECS, isMongoOperation, } from './mongo-operations';
56
- export type { MongoOperation, MongoParamType, MongoParamSpec, MongoOperationSpec, } from './mongo-operations';
57
- export { DOCS_OPERATIONS, DOCS_OPERATION_SPECS, isDocsOperation, } from './docs-operations';
58
- export type { DocsOperation, DocsParamType, DocsParamSlot, DocsParamSpec, DocsOperationSpec, } from './docs-operations';
59
- export { DOCS_TOOLKIT_SPECS, DOCS_TOOLKIT_BY_TOOL_NAME, DOCS_TOOLKIT_DEFAULTABLE, } from './docs-toolkit';
60
- export type { DocsToolkitSpec, DocsToolkitParameter, } from './docs-toolkit';
61
- export type { LlmProvider, LlmProviderOption, LlmModelOption, } from './llm-models';
62
- export { LLM_PROVIDERS, LLM_MODELS, MODEL_CONTEXT_WINDOWS, getModelsFor, getDefaultModel, getModelLabel, } from './llm-models';
63
- export type { ModeloDeOpenRouter, PrecioDeOpenRouter, RespuestaDeModelosDeOpenRouter, } from './openrouter';
64
- export { URL_DE_MODELOS_DE_OPENROUTER, opcionesDeModelosDeOpenRouter, ventanaDeContextoDeOpenRouter, } from './openrouter';
65
- export type { CredentialTypeRegistration, CredentialType } from './credentials';
66
- export { CREDENTIAL_TYPES, CREDENTIAL_TYPE_VALUES, credentialTypeValues, getCredentialType, isCredentialType, } from './credentials';
1
+ export type { NodeType, NodeRole, HandlePosition, NodeConnectionConfig, NodeUIConfig, NodeDispatchConfig, PrefixMapping, PayloadMeta, } from './types.js';
2
+ export { singleMeta, iterableMeta } from './types.js';
3
+ export { NODE_CONNECTIONS, canReceiveFrom, canReceiveFromNodes, canSendToNodes, isTerminal, isNodeType, ALL_NODE_TYPES, } from './connections.js';
4
+ export { NODE_UI, PREFIX_TO_TYPE, resolveNodeId, } from './ui.js';
5
+ export { NODE_DISPATCH, getAllNodeCollections, getNodeDispatchConfig, } from './dispatch.js';
6
+ export type { NodeRegistryEntry, NodeGroup, NodeVersionSpec, VersionCatalog, } from './registry.js';
7
+ export { NODE_REGISTRY, getNodeRegistryEntry, NODE_DETAIL_PATHS, NODE_COLORS, NODE_STATE_KEYS, PREFIX_TO_NODE_TYPE, NODE_TYPE_TO_PREFIX, } from './registry.js';
8
+ export { isVersioned, versionsOf, versionSpec, currentVersion, fieldsLostBetween, fieldsLost, versionCatalogErrors, } from './registry.js';
9
+ export { GMAIL_OPERATIONS, GMAIL_OPERATION_SPECS, GMAIL_OPERATION_GROUPS, GMAIL_DROPDOWN_OPERATIONS, GMAIL_TOOLKIT_OPERATIONS, GMAIL_TOOLKIT_SPECS, GMAIL_ALL_TOOLKIT_SPECS, GMAIL_SEND_AND_WAIT_TOOL_SPEC, NATIVE_EMAIL_TOOLKIT_SPECS, GMAIL_TOOLKIT_BY_TOOL_NAME, NATIVE_EMAIL_TOOLKIT_BY_TOOL_NAME, GMAIL_SEND_LEGACY_FIELDS, resolveGmailSendFields, isGmailOperation, } from './gmail-operations.js';
10
+ export type { GmailOperation, GmailOperationGroup, GmailParamType, GmailParamSpec, GmailOperationSpec, GmailToolkitParameter, GmailToolkitSpec, GmailSendFieldSource, GmailSendFields, } from './gmail-operations.js';
11
+ export { GOOGLE_CALENDAR_OPERATIONS, GOOGLE_CALENDAR_OPERATION_SPECS, isGoogleCalendarOperation, } from './calendar-operations.js';
12
+ export type { GoogleCalendarOperation, GoogleCalendarParamTarget, GoogleCalendarParamType, GoogleCalendarParamSpec, GoogleCalendarOperationSpec, } from './calendar-operations.js';
13
+ export { GOOGLE_CALENDAR_TOOLKIT_SPECS, GOOGLE_CALENDAR_TOOLKIT_BY_TOOL_NAME, } from './calendar-toolkit.js';
14
+ export type { GoogleCalendarToolkitSpec, GoogleCalendarToolkitParameter, } from './calendar-toolkit.js';
15
+ export { DRIVE_OPERATIONS, DRIVE_OPERATION_SPECS, isDriveOperation, } from './drive-operations.js';
16
+ export type { DriveOperation, DriveParamType, DriveParamSpec, DriveOperationSpec, } from './drive-operations.js';
17
+ export { DRIVE_TOOLKIT_SPECS, DRIVE_TOOLKIT_BY_TOOL_NAME, } from './drive-toolkit.js';
18
+ export type { DriveToolkitSpec, DriveToolkitParameter, } from './drive-toolkit.js';
19
+ export { TELEGRAM_OPERATIONS, TELEGRAM_OPERATION_SPECS, isTelegramOperation, } from './telegram-operations.js';
20
+ export type { TelegramOperation, TelegramParamSpec, TelegramOperationSpec, } from './telegram-operations.js';
21
+ export { TELEGRAM_TOOLKIT_SPECS, TELEGRAM_TOOLKIT_BY_TOOL_NAME, } from './telegram-toolkit.js';
22
+ export type { TelegramToolkitSpec, TelegramToolkitParameter, } from './telegram-toolkit.js';
23
+ export { WHATSAPP_OPERATIONS, isWhatsAppOperation, } from './whatsapp-operations.js';
24
+ export type { WhatsAppOperation } from './whatsapp-operations.js';
25
+ export { operacionesPara, puedeEjecutar, camposNoDisponiblesPara, } from './capacidad-de-credencial.js';
26
+ export type { CapacidadDeCredencial, CapacidadesPorCredencial, } from './capacidad-de-credencial.js';
27
+ export { DISCORD_OPERATIONS, DISCORD_OPERATION_SPECS, DISCORD_CAPACIDADES_POR_CREDENCIAL, operacionesDeDiscordPara, discordPuedeEjecutar, camposDeDiscordNoDisponibles, isDiscordOperation, } from './discord-operations.js';
28
+ export type { DiscordOperation, DiscordParamSpec, DiscordOperationSpec, } from './discord-operations.js';
29
+ export { DISCORD_TOOLKIT_SPECS, DISCORD_TOOLKIT_BY_TOOL_NAME, herramientasDeDiscordPara, } from './discord-toolkit.js';
30
+ export type { DiscordToolkitSpec, DiscordToolkitParameter, } from './discord-toolkit.js';
31
+ export { MAILCHIMP_OPERATIONS, MAILCHIMP_OPERATION_SPECS, MAILCHIMP_CONTACT_STATUSES, isMailchimpOperation, } from './mailchimp-operations.js';
32
+ export type { MailchimpOperation, MailchimpContactStatus, MailchimpParamSpec, MailchimpOperationSpec, } from './mailchimp-operations.js';
33
+ export { SHOPIFY_OPERATIONS, SHOPIFY_OPERATION_SPECS, SHOPIFY_TAGGABLE_RESOURCES, SHOPIFY_SEARCHABLE_RESOURCES, isShopifyOperation, } from './shopify-operations.js';
34
+ export type { ShopifyOperation, ShopifyTaggableResource, ShopifySearchableResource, ShopifyParamSpec, ShopifyOperationSpec, } from './shopify-operations.js';
35
+ export { GITHUB_OPERATIONS, GITHUB_OPERATION_SPECS, GITHUB_DROPDOWN_OPERATIONS, GITHUB_ITERABLE_OPERATIONS, isGithubOperation, } from './github-operations.js';
36
+ export type { GithubOperation, GithubParamType, GithubParamSpec, GithubOperationSpec, } from './github-operations.js';
37
+ export { JIRA_OPERATIONS, JIRA_OPERATION_SPECS, JIRA_DROPDOWN_OPERATIONS, JIRA_ITERABLE_OPERATIONS, isJiraOperation, } from './jira-operations.js';
38
+ export type { JiraOperation, JiraParamType, JiraParamSpec, JiraOperationSpec, } from './jira-operations.js';
39
+ export { BUCKET_OPERATIONS, BUCKET_OPERATION_SPECS, BUCKET_ITERABLE_OPERATIONS, isBucketOperation, } from './bucket-operations.js';
40
+ export type { BucketOperation, BucketParamType, BucketParamSpec, BucketOperationSpec, } from './bucket-operations.js';
41
+ export { SLACK_OPERATIONS, SLACK_OPERATION_SPECS, SLACK_CAPACIDADES_POR_CREDENCIAL, operacionesDeSlackPara, slackPuedeEjecutar, camposDeSlackNoDisponibles, isSlackOperation, } from './slack-operations.js';
42
+ export type { SlackOperation, SlackParamSpec, SlackOperationSpec, } from './slack-operations.js';
43
+ export { SLACK_TOOLKIT_SPECS, SLACK_TOOLKIT_BY_TOOL_NAME, herramientasDeSlackPara, } from './slack-toolkit.js';
44
+ export type { SlackToolkitSpec, SlackToolkitParameter, } from './slack-toolkit.js';
45
+ export { SHEETS_OPERATIONS, SHEETS_OPERATION_SPECS, isSheetsOperation, } from './sheets-operations.js';
46
+ export type { SheetsOperation, SheetsParamSpec, SheetsOperationSpec, } from './sheets-operations.js';
47
+ export { SHEETS_TOOLKIT_SPECS, SHEETS_TOOLKIT_BY_TOOL_NAME, SHEETS_TOOLKIT_DEFAULTABLE, } from './sheets-toolkit.js';
48
+ export type { SheetsToolkitSpec, SheetsToolkitParameter, } from './sheets-toolkit.js';
49
+ export { GOOGLE_CONTACTS_OPERATIONS, GOOGLE_CONTACTS_OPERATIONS_V1, GOOGLE_CONTACTS_OPERATIONS_V2, GOOGLE_CONTACTS_OPERATION_SPECS, GOOGLE_CONTACTS_OPERATION_GROUPS, GOOGLE_CONTACTS_DEFAULT_PERSON_FIELDS, isGoogleContactsOperation, } from './google-contacts-operations.js';
50
+ export type { GoogleContactsOperation, GoogleContactsParamSpec, GoogleContactsOperationSpec, GoogleContactsOperationGroup, } from './google-contacts-operations.js';
51
+ export { GOOGLE_ANALYTICS_OPERATIONS, GOOGLE_ANALYTICS_OPERATION_SPECS, GOOGLE_ANALYTICS_DROPDOWN_OPERATIONS, isGoogleAnalyticsOperation, } from './google-analytics-operations.js';
52
+ export type { GoogleAnalyticsOperation, GoogleAnalyticsParamType, GoogleAnalyticsParamSpec, GoogleAnalyticsOperationSpec, } from './google-analytics-operations.js';
53
+ export { NOTION_OPERATIONS, NOTION_OPERATION_SPECS, NOTION_DROPDOWN_OPERATIONS, isNotionOperation, } from './notion-operations.js';
54
+ export type { NotionOperation, NotionParamType, NotionParamSpec, NotionOperationSpec, } from './notion-operations.js';
55
+ export { POSTGRES_OPERATIONS, POSTGRES_MODES, POSTGRES_OPERATION_SPECS, isPostgresOperation, } from './postgres-operations.js';
56
+ export type { PostgresOperation, PostgresMode, PostgresOperationSpec, } from './postgres-operations.js';
57
+ export { MONGO_OPERATIONS, MONGO_OPERATION_SPECS, isMongoOperation, } from './mongo-operations.js';
58
+ export type { MongoOperation, MongoParamType, MongoParamSpec, MongoOperationSpec, } from './mongo-operations.js';
59
+ export { DOCS_OPERATIONS, DOCS_OPERATION_SPECS, isDocsOperation, } from './docs-operations.js';
60
+ export type { DocsOperation, DocsParamType, DocsParamSlot, DocsParamSpec, DocsOperationSpec, } from './docs-operations.js';
61
+ export { DOCS_TOOLKIT_SPECS, DOCS_TOOLKIT_BY_TOOL_NAME, DOCS_TOOLKIT_DEFAULTABLE, } from './docs-toolkit.js';
62
+ export type { DocsToolkitSpec, DocsToolkitParameter, } from './docs-toolkit.js';
63
+ export type { LlmProvider, LlmProviderOption, LlmModelOption, } from './llm-models.js';
64
+ export { LLM_PROVIDERS, LLM_MODELS, MODEL_CONTEXT_WINDOWS, getModelsFor, getDefaultModel, getModelLabel, } from './llm-models.js';
65
+ export type { ModeloDeOpenRouter, PrecioDeOpenRouter, RespuestaDeModelosDeOpenRouter, } from './openrouter.js';
66
+ export { URL_DE_MODELOS_DE_OPENROUTER, opcionesDeModelosDeOpenRouter, ventanaDeContextoDeOpenRouter, } from './openrouter.js';
67
+ export type { CredentialTypeRegistration, CredentialType } from './credentials.js';
68
+ export { CREDENTIAL_TYPES, CREDENTIAL_TYPE_VALUES, credentialTypeValues, getCredentialType, isCredentialType, } from './credentials.js';