@lhi/n8m 0.2.3 → 0.3.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/README.md +149 -11
- package/dist/agentic/graph.d.ts +16 -4
- package/dist/agentic/nodes/architect.d.ts +2 -2
- package/dist/agentic/nodes/architect.js +5 -1
- package/dist/agentic/nodes/engineer.d.ts +6 -0
- package/dist/agentic/nodes/engineer.js +39 -5
- package/dist/commands/create.js +43 -4
- package/dist/commands/deploy.d.ts +2 -1
- package/dist/commands/deploy.js +119 -19
- package/dist/commands/fixture.js +31 -8
- package/dist/commands/learn.d.ts +19 -0
- package/dist/commands/learn.js +277 -0
- package/dist/commands/modify.js +210 -68
- package/dist/commands/test.d.ts +4 -0
- package/dist/commands/test.js +118 -14
- package/dist/services/ai.service.d.ts +33 -0
- package/dist/services/ai.service.js +337 -2
- package/dist/services/node-definitions.service.d.ts +8 -0
- package/dist/services/node-definitions.service.js +45 -0
- package/dist/utils/fixtureManager.d.ts +10 -0
- package/dist/utils/fixtureManager.js +43 -4
- package/dist/utils/multilinePrompt.js +33 -47
- package/dist/utils/n8nClient.js +60 -11
- package/docs/DEVELOPER_GUIDE.md +598 -0
- package/docs/N8N_NODE_REFERENCE.md +369 -0
- package/docs/patterns/bigquery-via-http.md +110 -0
- package/oclif.manifest.json +82 -3
- package/package.json +3 -1
- package/dist/fixture-schema.json +0 -162
- package/dist/resources/node-definitions-fallback.json +0 -390
- package/dist/resources/node-test-hints.json +0 -188
- package/dist/resources/workflow-test-fixtures.json +0 -42
package/dist/fixture-schema.json
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"$id": "https://n8m.dev/fixture-schema.json",
|
|
4
|
-
"title": "WorkflowFixture",
|
|
5
|
-
"description": "n8m fixture file — captures a real n8n execution for offline testing and replay.",
|
|
6
|
-
"type": "object",
|
|
7
|
-
"required": ["version", "workflowId", "workflowName", "workflow", "execution"],
|
|
8
|
-
"additionalProperties": true,
|
|
9
|
-
"properties": {
|
|
10
|
-
"$schema": {
|
|
11
|
-
"type": "string",
|
|
12
|
-
"description": "JSON Schema reference for editor autocomplete."
|
|
13
|
-
},
|
|
14
|
-
"version": {
|
|
15
|
-
"const": "1.0",
|
|
16
|
-
"description": "Fixture format version. Always \"1.0\"."
|
|
17
|
-
},
|
|
18
|
-
"capturedAt": {
|
|
19
|
-
"type": "string",
|
|
20
|
-
"format": "date-time",
|
|
21
|
-
"description": "ISO 8601 timestamp of when the fixture was captured."
|
|
22
|
-
},
|
|
23
|
-
"workflowId": {
|
|
24
|
-
"type": "string",
|
|
25
|
-
"description": "The n8n workflow ID this fixture was captured from."
|
|
26
|
-
},
|
|
27
|
-
"workflowName": {
|
|
28
|
-
"type": "string",
|
|
29
|
-
"description": "Human-readable workflow name."
|
|
30
|
-
},
|
|
31
|
-
"workflow": {
|
|
32
|
-
"type": "object",
|
|
33
|
-
"description": "Full n8n workflow JSON (nodes, connections, settings, etc.).",
|
|
34
|
-
"required": ["nodes", "connections"],
|
|
35
|
-
"additionalProperties": true,
|
|
36
|
-
"properties": {
|
|
37
|
-
"name": { "type": "string" },
|
|
38
|
-
"nodes": {
|
|
39
|
-
"type": "array",
|
|
40
|
-
"items": {
|
|
41
|
-
"type": "object",
|
|
42
|
-
"additionalProperties": true,
|
|
43
|
-
"required": ["name", "type"],
|
|
44
|
-
"properties": {
|
|
45
|
-
"id": { "type": "string" },
|
|
46
|
-
"name": { "type": "string", "description": "Unique node name within this workflow." },
|
|
47
|
-
"type": { "type": "string", "description": "e.g. n8n-nodes-base.code" },
|
|
48
|
-
"typeVersion": { "type": "number" },
|
|
49
|
-
"position": { "type": "array", "items": { "type": "number" }, "minItems": 2, "maxItems": 2 },
|
|
50
|
-
"parameters": { "type": "object", "additionalProperties": true }
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
"connections": {
|
|
55
|
-
"type": "object",
|
|
56
|
-
"description": "Maps source node names to their output connections.",
|
|
57
|
-
"additionalProperties": {
|
|
58
|
-
"type": "object",
|
|
59
|
-
"properties": {
|
|
60
|
-
"main": {
|
|
61
|
-
"type": "array",
|
|
62
|
-
"items": {
|
|
63
|
-
"type": "array",
|
|
64
|
-
"items": {
|
|
65
|
-
"type": "object",
|
|
66
|
-
"properties": {
|
|
67
|
-
"node": { "type": "string" },
|
|
68
|
-
"type": { "type": "string" },
|
|
69
|
-
"index": { "type": "number" }
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
"execution": {
|
|
80
|
-
"type": "object",
|
|
81
|
-
"description": "The captured n8n execution result.",
|
|
82
|
-
"required": ["status", "data"],
|
|
83
|
-
"additionalProperties": true,
|
|
84
|
-
"properties": {
|
|
85
|
-
"id": { "type": "string" },
|
|
86
|
-
"status": {
|
|
87
|
-
"type": "string",
|
|
88
|
-
"enum": ["success", "error", "crashed", "waiting", "running"],
|
|
89
|
-
"description": "Final execution status."
|
|
90
|
-
},
|
|
91
|
-
"startedAt": { "type": "string", "format": "date-time" },
|
|
92
|
-
"data": {
|
|
93
|
-
"type": "object",
|
|
94
|
-
"required": ["resultData"],
|
|
95
|
-
"properties": {
|
|
96
|
-
"resultData": {
|
|
97
|
-
"type": "object",
|
|
98
|
-
"required": ["runData"],
|
|
99
|
-
"properties": {
|
|
100
|
-
"error": {
|
|
101
|
-
"description": "Top-level execution error, if any. null on success.",
|
|
102
|
-
"oneOf": [
|
|
103
|
-
{ "type": "null" },
|
|
104
|
-
{
|
|
105
|
-
"type": "object",
|
|
106
|
-
"additionalProperties": true,
|
|
107
|
-
"properties": {
|
|
108
|
-
"message": { "type": "string" },
|
|
109
|
-
"description": { "type": "string" },
|
|
110
|
-
"node": {
|
|
111
|
-
"description": "Name of the node that failed.",
|
|
112
|
-
"oneOf": [
|
|
113
|
-
{ "type": "string" },
|
|
114
|
-
{
|
|
115
|
-
"type": "object",
|
|
116
|
-
"properties": {
|
|
117
|
-
"name": { "type": "string" },
|
|
118
|
-
"type": { "type": "string" }
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
]
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
]
|
|
126
|
-
},
|
|
127
|
-
"runData": {
|
|
128
|
-
"type": "object",
|
|
129
|
-
"description": "Per-node output data. Keys are exact node names.",
|
|
130
|
-
"additionalProperties": {
|
|
131
|
-
"type": "array",
|
|
132
|
-
"items": {
|
|
133
|
-
"type": "object",
|
|
134
|
-
"additionalProperties": true,
|
|
135
|
-
"properties": {
|
|
136
|
-
"json": {
|
|
137
|
-
"type": "object",
|
|
138
|
-
"additionalProperties": true,
|
|
139
|
-
"description": "The node's output JSON data."
|
|
140
|
-
},
|
|
141
|
-
"binary": {
|
|
142
|
-
"type": "object",
|
|
143
|
-
"additionalProperties": true,
|
|
144
|
-
"description": "Binary field metadata, if any."
|
|
145
|
-
},
|
|
146
|
-
"error": {
|
|
147
|
-
"type": "object",
|
|
148
|
-
"additionalProperties": true,
|
|
149
|
-
"description": "Node-level error, if this node failed."
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
@@ -1,390 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"name": "n8n-nodes-base.start",
|
|
4
|
-
"displayName": "Manual Trigger",
|
|
5
|
-
"description": "The starting point for manual execution.",
|
|
6
|
-
"properties": []
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
"name": "n8n-nodes-base.httpRequest",
|
|
10
|
-
"displayName": "HTTP Request",
|
|
11
|
-
"description": "Send HTTP requests to any API",
|
|
12
|
-
"properties": [
|
|
13
|
-
{
|
|
14
|
-
"name": "method",
|
|
15
|
-
"displayName": "Method",
|
|
16
|
-
"type": "options",
|
|
17
|
-
"default": "GET",
|
|
18
|
-
"options": [
|
|
19
|
-
{ "name": "GET", "value": "GET" },
|
|
20
|
-
{ "name": "POST", "value": "POST" },
|
|
21
|
-
{ "name": "PUT", "value": "PUT" },
|
|
22
|
-
{ "name": "DELETE", "value": "DELETE" }
|
|
23
|
-
]
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"name": "url",
|
|
27
|
-
"displayName": "URL",
|
|
28
|
-
"type": "string",
|
|
29
|
-
"default": "",
|
|
30
|
-
"description": "The URL to send the request to"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"name": "authentication",
|
|
34
|
-
"displayName": "Authentication",
|
|
35
|
-
"type": "options",
|
|
36
|
-
"default": "none",
|
|
37
|
-
"options": [
|
|
38
|
-
{ "name": "None", "value": "none" },
|
|
39
|
-
{ "name": "Predefined Credential Type", "value": "predefinedCredentialType" }
|
|
40
|
-
]
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"name": "sendBody",
|
|
44
|
-
"displayName": "Send Body",
|
|
45
|
-
"type": "boolean",
|
|
46
|
-
"default": false
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"name": "body",
|
|
50
|
-
"displayName": "Body",
|
|
51
|
-
"type": "json",
|
|
52
|
-
"default": ""
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"name": "n8n-nodes-base.slack",
|
|
58
|
-
"displayName": "Slack",
|
|
59
|
-
"description": "Send messages, manage channels, users, files, and reactions in Slack",
|
|
60
|
-
"properties": [
|
|
61
|
-
{
|
|
62
|
-
"name": "resource",
|
|
63
|
-
"displayName": "Resource",
|
|
64
|
-
"type": "options",
|
|
65
|
-
"default": "message",
|
|
66
|
-
"options": [
|
|
67
|
-
{ "name": "Message", "value": "message" },
|
|
68
|
-
{ "name": "Channel", "value": "channel" },
|
|
69
|
-
{ "name": "File", "value": "file" },
|
|
70
|
-
{ "name": "Reaction", "value": "reaction" },
|
|
71
|
-
{ "name": "Star", "value": "star" },
|
|
72
|
-
{ "name": "User", "value": "user" },
|
|
73
|
-
{ "name": "User Group","value": "userGroup" }
|
|
74
|
-
]
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"name": "operation",
|
|
78
|
-
"displayName": "Operation",
|
|
79
|
-
"type": "options",
|
|
80
|
-
"default": "post",
|
|
81
|
-
"description": "Resource=message: delete|get|getAll|post|update|search. Resource=channel: archive|create|get|getAll|history|invite|join|kick|leave|open|rename|replies|setPurpose|setTopic|unarchive. Resource=file: get|getAll|upload. Resource=reaction: add|get|remove. Resource=user: get|getAll|getPresence",
|
|
82
|
-
"options": [
|
|
83
|
-
{ "name": "Add", "value": "add" },
|
|
84
|
-
{ "name": "Archive", "value": "archive" },
|
|
85
|
-
{ "name": "Create", "value": "create" },
|
|
86
|
-
{ "name": "Delete", "value": "delete" },
|
|
87
|
-
{ "name": "Get", "value": "get" },
|
|
88
|
-
{ "name": "Get Many", "value": "getAll" },
|
|
89
|
-
{ "name": "Get Presence","value": "getPresence" },
|
|
90
|
-
{ "name": "History", "value": "history" },
|
|
91
|
-
{ "name": "Invite", "value": "invite" },
|
|
92
|
-
{ "name": "Join", "value": "join" },
|
|
93
|
-
{ "name": "Kick", "value": "kick" },
|
|
94
|
-
{ "name": "Leave", "value": "leave" },
|
|
95
|
-
{ "name": "Open", "value": "open" },
|
|
96
|
-
{ "name": "Post", "value": "post" },
|
|
97
|
-
{ "name": "Remove", "value": "remove" },
|
|
98
|
-
{ "name": "Rename", "value": "rename" },
|
|
99
|
-
{ "name": "Replies", "value": "replies" },
|
|
100
|
-
{ "name": "Search", "value": "search" },
|
|
101
|
-
{ "name": "Set Purpose","value": "setPurpose" },
|
|
102
|
-
{ "name": "Set Topic", "value": "setTopic" },
|
|
103
|
-
{ "name": "Unarchive", "value": "unarchive" },
|
|
104
|
-
{ "name": "Update", "value": "update" },
|
|
105
|
-
{ "name": "Upload", "value": "upload" }
|
|
106
|
-
]
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
"name": "channel",
|
|
110
|
-
"displayName": "Channel",
|
|
111
|
-
"type": "string",
|
|
112
|
-
"default": "",
|
|
113
|
-
"description": "Channel name (e.g. #general) or ID (e.g. C1234567890)"
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"name": "text",
|
|
117
|
-
"displayName": "Message Text",
|
|
118
|
-
"type": "string",
|
|
119
|
-
"default": "",
|
|
120
|
-
"description": "Plain text fallback. Required when blocks/attachments are absent. Supports mrkdwn when mrkdwn option is enabled."
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"name": "blocksUi",
|
|
124
|
-
"displayName": "Blocks",
|
|
125
|
-
"type": "json",
|
|
126
|
-
"default": "",
|
|
127
|
-
"description": "Block Kit blocks as a JSON array string. MUST be a valid JSON array. n8n parses this at runtime — if the expression produces invalid JSON the node throws 'Parameter blocksUi could not be parsed'. ALWAYS wrap expressions inside string values, never at the array level. Example: [{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"={{ $json.body.content }}\"}}]. When using expressions, ensure the referenced value exists and is a string. Supported block types: section, header, divider, image, actions, context, input, file, video."
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
"name": "attachments",
|
|
131
|
-
"displayName": "Attachments",
|
|
132
|
-
"type": "json",
|
|
133
|
-
"default": "[]",
|
|
134
|
-
"description": "Legacy Slack attachments as a JSON array. Prefer blocks (blocksUi) for new workflows. Example: [{\"fallback\":\"Alert\",\"color\":\"#36a64f\",\"title\":\"Title\",\"text\":\"Body\",\"fields\":[{\"title\":\"Field\",\"value\":\"Value\",\"short\":true}]}]"
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
"name": "otherOptions",
|
|
138
|
-
"displayName": "Other Options",
|
|
139
|
-
"type": "collection",
|
|
140
|
-
"default": {},
|
|
141
|
-
"description": "Additional message options",
|
|
142
|
-
"options": [
|
|
143
|
-
{
|
|
144
|
-
"name": "thread_ts",
|
|
145
|
-
"displayName": "Thread Timestamp",
|
|
146
|
-
"type": "string",
|
|
147
|
-
"default": "",
|
|
148
|
-
"description": "Timestamp of parent message to reply in a thread. Get from $json.ts on a previous Slack message."
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"name": "reply_broadcast",
|
|
152
|
-
"displayName": "Reply Broadcast",
|
|
153
|
-
"type": "boolean",
|
|
154
|
-
"default": false,
|
|
155
|
-
"description": "When true, also post the thread reply to the channel (visible outside thread)."
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
"name": "mrkdwn",
|
|
159
|
-
"displayName": "Markdown",
|
|
160
|
-
"type": "boolean",
|
|
161
|
-
"default": false,
|
|
162
|
-
"description": "Enable mrkdwn formatting in the text field."
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
"name": "unfurl_links",
|
|
166
|
-
"displayName": "Unfurl Links",
|
|
167
|
-
"type": "boolean",
|
|
168
|
-
"default": false
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
"name": "unfurl_media",
|
|
172
|
-
"displayName": "Unfurl Media",
|
|
173
|
-
"type": "boolean",
|
|
174
|
-
"default": true
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
"name": "username",
|
|
178
|
-
"displayName": "Bot Username",
|
|
179
|
-
"type": "string",
|
|
180
|
-
"default": "",
|
|
181
|
-
"description": "Override the bot's display name for this message."
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
"name": "icon_emoji",
|
|
185
|
-
"displayName": "Icon Emoji",
|
|
186
|
-
"type": "string",
|
|
187
|
-
"default": "",
|
|
188
|
-
"description": "Override the bot icon with an emoji, e.g. :robot_face:"
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
"name": "icon_url",
|
|
192
|
-
"displayName": "Icon URL",
|
|
193
|
-
"type": "string",
|
|
194
|
-
"default": "",
|
|
195
|
-
"description": "Override the bot icon with a remote image URL."
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
"name": "link_names",
|
|
199
|
-
"displayName": "Link Names",
|
|
200
|
-
"type": "boolean",
|
|
201
|
-
"default": false,
|
|
202
|
-
"description": "Find and linkify channel names and usernames."
|
|
203
|
-
}
|
|
204
|
-
]
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
"name": "select",
|
|
208
|
-
"displayName": "User",
|
|
209
|
-
"type": "string",
|
|
210
|
-
"default": "",
|
|
211
|
-
"description": "User ID for user/reaction operations (e.g. U1234567890)"
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
"name": "timestamp",
|
|
215
|
-
"displayName": "Message Timestamp",
|
|
216
|
-
"type": "string",
|
|
217
|
-
"default": "",
|
|
218
|
-
"description": "The ts value of the message for get/update/delete/reaction operations."
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
"name": "messageId",
|
|
222
|
-
"displayName": "Message ID (ts)",
|
|
223
|
-
"type": "string",
|
|
224
|
-
"default": "",
|
|
225
|
-
"description": "Unique message timestamp used as ID (ts field from previous Slack response)."
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
"name": "fileContent",
|
|
229
|
-
"displayName": "File Content",
|
|
230
|
-
"type": "string",
|
|
231
|
-
"default": "",
|
|
232
|
-
"description": "Content of the file to upload (for file.upload operation)."
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
"name": "fileName",
|
|
236
|
-
"displayName": "File Name",
|
|
237
|
-
"type": "string",
|
|
238
|
-
"default": "",
|
|
239
|
-
"description": "Name of the file including extension (for file.upload)."
|
|
240
|
-
}
|
|
241
|
-
]
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
"name": "n8n-nodes-base.slackTrigger",
|
|
245
|
-
"displayName": "Slack Trigger",
|
|
246
|
-
"description": "Receive events from Slack via webhooks or Socket Mode",
|
|
247
|
-
"properties": [
|
|
248
|
-
{
|
|
249
|
-
"name": "triggerOn",
|
|
250
|
-
"displayName": "Trigger On",
|
|
251
|
-
"type": "options",
|
|
252
|
-
"default": "message",
|
|
253
|
-
"options": [
|
|
254
|
-
{ "name": "New Message Posted to Channel", "value": "message" },
|
|
255
|
-
{ "name": "New Public Channel Created", "value": "channelCreated" },
|
|
256
|
-
{ "name": "New User Added", "value": "teamJoin" },
|
|
257
|
-
{ "name": "Reaction Added", "value": "reactionAdded" },
|
|
258
|
-
{ "name": "Reaction Removed", "value": "reactionRemoved" },
|
|
259
|
-
{ "name": "File Shared", "value": "fileShared" },
|
|
260
|
-
{ "name": "App Mention", "value": "appMention" }
|
|
261
|
-
]
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
"name": "channelId",
|
|
265
|
-
"displayName": "Channel to Watch",
|
|
266
|
-
"type": "string",
|
|
267
|
-
"default": "",
|
|
268
|
-
"description": "Channel ID to listen for events in. Leave empty to listen to all channels."
|
|
269
|
-
}
|
|
270
|
-
]
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
"name": "n8n-nodes-base.googleSheets",
|
|
274
|
-
"displayName": "Google Sheets",
|
|
275
|
-
"description": "Interact with Google Sheets",
|
|
276
|
-
"properties": [
|
|
277
|
-
{
|
|
278
|
-
"name": "resource",
|
|
279
|
-
"displayName": "Resource",
|
|
280
|
-
"type": "options",
|
|
281
|
-
"default": "sheet",
|
|
282
|
-
"options": [
|
|
283
|
-
{ "name": "Sheet", "value": "sheet" }
|
|
284
|
-
]
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"name": "operation",
|
|
288
|
-
"displayName": "Operation",
|
|
289
|
-
"type": "options",
|
|
290
|
-
"default": "append",
|
|
291
|
-
"options": [
|
|
292
|
-
{ "name": "Append", "value": "append" },
|
|
293
|
-
{ "name": "Read", "value": "read" },
|
|
294
|
-
{ "name": "Update", "value": "update" }
|
|
295
|
-
]
|
|
296
|
-
},
|
|
297
|
-
{
|
|
298
|
-
"name": "sheetId",
|
|
299
|
-
"displayName": "Sheet ID",
|
|
300
|
-
"type": "string",
|
|
301
|
-
"default": ""
|
|
302
|
-
},
|
|
303
|
-
{
|
|
304
|
-
"name": "range",
|
|
305
|
-
"displayName": "Range",
|
|
306
|
-
"type": "string",
|
|
307
|
-
"default": "Sheet1!A:Z"
|
|
308
|
-
}
|
|
309
|
-
]
|
|
310
|
-
},
|
|
311
|
-
{
|
|
312
|
-
"name": "n8n-nodes-base.if",
|
|
313
|
-
"displayName": "IF",
|
|
314
|
-
"description": "Conditional logic: True/False",
|
|
315
|
-
"properties": [
|
|
316
|
-
{
|
|
317
|
-
"name": "conditions",
|
|
318
|
-
"displayName": "Conditions",
|
|
319
|
-
"type": "json",
|
|
320
|
-
"default": {}
|
|
321
|
-
}
|
|
322
|
-
]
|
|
323
|
-
},
|
|
324
|
-
{
|
|
325
|
-
"name": "n8n-nodes-base.set",
|
|
326
|
-
"displayName": "Set",
|
|
327
|
-
"description": "Set variables or values",
|
|
328
|
-
"properties": [
|
|
329
|
-
{
|
|
330
|
-
"name": "values",
|
|
331
|
-
"displayName": "Values",
|
|
332
|
-
"type": "fixedCollection",
|
|
333
|
-
"default": {}
|
|
334
|
-
}
|
|
335
|
-
]
|
|
336
|
-
},
|
|
337
|
-
{
|
|
338
|
-
"name": "n8n-nodes-base.webhook",
|
|
339
|
-
"displayName": "Webhook",
|
|
340
|
-
"description": "Receive HTTP requests",
|
|
341
|
-
"properties": [
|
|
342
|
-
{
|
|
343
|
-
"name": "httpMethod",
|
|
344
|
-
"displayName": "HTTP Method",
|
|
345
|
-
"type": "options",
|
|
346
|
-
"default": "GET",
|
|
347
|
-
"options": [
|
|
348
|
-
{ "name": "GET", "value": "GET" },
|
|
349
|
-
{ "name": "POST", "value": "POST" }
|
|
350
|
-
]
|
|
351
|
-
},
|
|
352
|
-
{
|
|
353
|
-
"name": "path",
|
|
354
|
-
"displayName": "Path",
|
|
355
|
-
"type": "string",
|
|
356
|
-
"default": ""
|
|
357
|
-
}
|
|
358
|
-
]
|
|
359
|
-
},
|
|
360
|
-
{
|
|
361
|
-
"name": "n8n-nodes-base.code",
|
|
362
|
-
"displayName": "Code",
|
|
363
|
-
"description": "Run JavaScript/TypeScript",
|
|
364
|
-
"properties": [
|
|
365
|
-
{
|
|
366
|
-
"name": "jsCode",
|
|
367
|
-
"displayName": "JS Code",
|
|
368
|
-
"type": "string",
|
|
369
|
-
"default": "// Your code here\nreturn items;"
|
|
370
|
-
}
|
|
371
|
-
]
|
|
372
|
-
},
|
|
373
|
-
{
|
|
374
|
-
"name": "n8n-nodes-base.merge",
|
|
375
|
-
"displayName": "Merge",
|
|
376
|
-
"description": "Merge data from multiple inputs",
|
|
377
|
-
"properties": [
|
|
378
|
-
{
|
|
379
|
-
"name": "mode",
|
|
380
|
-
"displayName": "Mode",
|
|
381
|
-
"type": "options",
|
|
382
|
-
"default": "append",
|
|
383
|
-
"options": [
|
|
384
|
-
{ "name": "Append", "value": "append" },
|
|
385
|
-
{ "name": "Merge by Index", "value": "mergeByIndex" }
|
|
386
|
-
]
|
|
387
|
-
}
|
|
388
|
-
]
|
|
389
|
-
}
|
|
390
|
-
]
|