@n8n/ai-workflow-builder 1.16.0 → 1.17.1
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/build.tsbuildinfo +1 -1
- package/dist/code-builder/index.d.ts +1 -1
- package/dist/code-builder/index.js +4 -4
- package/dist/code-builder/index.js.map +1 -1
- package/dist/code-builder/prompts/index.js +4 -4
- package/dist/code-builder/prompts/index.js.map +1 -1
- package/dist/prompts/chains/parameter-updater/guides/index.d.ts +1 -11
- package/dist/prompts/chains/parameter-updater/guides/index.js +12 -22
- package/dist/prompts/chains/parameter-updater/guides/index.js.map +1 -1
- package/dist/prompts/chains/parameter-updater/types.d.ts +1 -18
- package/dist/prompts/shared/node-guidance/index.d.ts +1 -2
- package/dist/prompts/shared/node-guidance/index.js +3 -4
- package/dist/prompts/shared/node-guidance/index.js.map +1 -1
- package/dist/prompts/shared/node-recommendations/index.d.ts +2 -2
- package/dist/prompts/shared/node-recommendations/index.js +6 -11
- package/dist/prompts/shared/node-recommendations/index.js.map +1 -1
- package/dist/tools/best-practices/index.d.ts +1 -3
- package/dist/tools/best-practices/index.js +2 -30
- package/dist/tools/best-practices/index.js.map +1 -1
- package/dist/types/best-practices.d.ts +1 -6
- package/dist/types/categorization.d.ts +2 -20
- package/dist/types/categorization.js +3 -36
- package/dist/types/categorization.js.map +1 -1
- package/dist/types/node-guidance.d.ts +1 -7
- package/dist/types/node-recommendations.d.ts +1 -26
- package/dist/types/node-recommendations.js +3 -12
- package/dist/types/node-recommendations.js.map +1 -1
- package/package.json +10 -10
- package/dist/prompts/chains/parameter-updater/guides/embedding-nodes.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/embedding-nodes.js +0 -70
- package/dist/prompts/chains/parameter-updater/guides/embedding-nodes.js.map +0 -1
- package/dist/prompts/chains/parameter-updater/guides/gmail.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/gmail.js +0 -53
- package/dist/prompts/chains/parameter-updater/guides/gmail.js.map +0 -1
- package/dist/prompts/chains/parameter-updater/guides/http-request.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/http-request.js +0 -139
- package/dist/prompts/chains/parameter-updater/guides/http-request.js.map +0 -1
- package/dist/prompts/chains/parameter-updater/guides/if-node.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/if-node.js +0 -159
- package/dist/prompts/chains/parameter-updater/guides/if-node.js.map +0 -1
- package/dist/prompts/chains/parameter-updater/guides/predecessor-output.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/predecessor-output.js +0 -25
- package/dist/prompts/chains/parameter-updater/guides/predecessor-output.js.map +0 -1
- package/dist/prompts/chains/parameter-updater/guides/resource-locator.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/resource-locator.js +0 -40
- package/dist/prompts/chains/parameter-updater/guides/resource-locator.js.map +0 -1
- package/dist/prompts/chains/parameter-updater/guides/set-node.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/set-node.js +0 -94
- package/dist/prompts/chains/parameter-updater/guides/set-node.js.map +0 -1
- package/dist/prompts/chains/parameter-updater/guides/switch-node.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/switch-node.js +0 -75
- package/dist/prompts/chains/parameter-updater/guides/switch-node.js.map +0 -1
- package/dist/prompts/chains/parameter-updater/guides/system-message.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/system-message.js +0 -96
- package/dist/prompts/chains/parameter-updater/guides/system-message.js.map +0 -1
- package/dist/prompts/chains/parameter-updater/guides/text-fields.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/text-fields.js +0 -31
- package/dist/prompts/chains/parameter-updater/guides/text-fields.js.map +0 -1
- package/dist/prompts/chains/parameter-updater/guides/tool-nodes.d.ts +0 -2
- package/dist/prompts/chains/parameter-updater/guides/tool-nodes.js +0 -76
- package/dist/prompts/chains/parameter-updater/guides/tool-nodes.js.map +0 -1
- package/dist/prompts/shared/node-guidance/structured-output-parser.d.ts +0 -2
- package/dist/prompts/shared/node-guidance/structured-output-parser.js +0 -35
- package/dist/prompts/shared/node-guidance/structured-output-parser.js.map +0 -1
- package/dist/prompts/shared/node-guidance/webhook.d.ts +0 -2
- package/dist/prompts/shared/node-guidance/webhook.js +0 -38
- package/dist/prompts/shared/node-guidance/webhook.js.map +0 -1
- package/dist/prompts/shared/node-recommendations/audio-generation.d.ts +0 -2
- package/dist/prompts/shared/node-recommendations/audio-generation.js +0 -18
- package/dist/prompts/shared/node-recommendations/audio-generation.js.map +0 -1
- package/dist/prompts/shared/node-recommendations/image-generation.d.ts +0 -2
- package/dist/prompts/shared/node-recommendations/image-generation.js +0 -18
- package/dist/prompts/shared/node-recommendations/image-generation.js.map +0 -1
- package/dist/prompts/shared/node-recommendations/text-manipulation.d.ts +0 -2
- package/dist/prompts/shared/node-recommendations/text-manipulation.js +0 -27
- package/dist/prompts/shared/node-recommendations/text-manipulation.js.map +0 -1
- package/dist/prompts/shared/node-recommendations/utils/format-recommendation.d.ts +0 -2
- package/dist/prompts/shared/node-recommendations/utils/format-recommendation.js +0 -24
- package/dist/prompts/shared/node-recommendations/utils/format-recommendation.js.map +0 -1
- package/dist/prompts/shared/node-recommendations/video-generation.d.ts +0 -2
- package/dist/prompts/shared/node-recommendations/video-generation.js +0 -15
- package/dist/prompts/shared/node-recommendations/video-generation.js.map +0 -1
- package/dist/shared/code-builder-and-mcp-prompt-constants.d.ts +0 -3
- package/dist/shared/code-builder-and-mcp-prompt-constants.js +0 -57
- package/dist/shared/code-builder-and-mcp-prompt-constants.js.map +0 -1
- package/dist/tools/best-practices/chatbot.d.ts +0 -7
- package/dist/tools/best-practices/chatbot.js +0 -118
- package/dist/tools/best-practices/chatbot.js.map +0 -1
- package/dist/tools/best-practices/content-generation.d.ts +0 -7
- package/dist/tools/best-practices/content-generation.js +0 -115
- package/dist/tools/best-practices/content-generation.js.map +0 -1
- package/dist/tools/best-practices/data-analysis.d.ts +0 -7
- package/dist/tools/best-practices/data-analysis.js +0 -367
- package/dist/tools/best-practices/data-analysis.js.map +0 -1
- package/dist/tools/best-practices/data-extraction.d.ts +0 -7
- package/dist/tools/best-practices/data-extraction.js +0 -122
- package/dist/tools/best-practices/data-extraction.js.map +0 -1
- package/dist/tools/best-practices/data-persistence.d.ts +0 -7
- package/dist/tools/best-practices/data-persistence.js +0 -197
- package/dist/tools/best-practices/data-persistence.js.map +0 -1
- package/dist/tools/best-practices/data-transformation.d.ts +0 -7
- package/dist/tools/best-practices/data-transformation.js +0 -146
- package/dist/tools/best-practices/data-transformation.js.map +0 -1
- package/dist/tools/best-practices/document-processing.d.ts +0 -7
- package/dist/tools/best-practices/document-processing.js +0 -332
- package/dist/tools/best-practices/document-processing.js.map +0 -1
- package/dist/tools/best-practices/enrichment.d.ts +0 -7
- package/dist/tools/best-practices/enrichment.js +0 -271
- package/dist/tools/best-practices/enrichment.js.map +0 -1
- package/dist/tools/best-practices/form-input.d.ts +0 -7
- package/dist/tools/best-practices/form-input.js +0 -173
- package/dist/tools/best-practices/form-input.js.map +0 -1
- package/dist/tools/best-practices/human-in-the-loop.d.ts +0 -7
- package/dist/tools/best-practices/human-in-the-loop.js +0 -268
- package/dist/tools/best-practices/human-in-the-loop.js.map +0 -1
- package/dist/tools/best-practices/knowledge-base.d.ts +0 -7
- package/dist/tools/best-practices/knowledge-base.js +0 -268
- package/dist/tools/best-practices/knowledge-base.js.map +0 -1
- package/dist/tools/best-practices/monitoring.d.ts +0 -7
- package/dist/tools/best-practices/monitoring.js +0 -171
- package/dist/tools/best-practices/monitoring.js.map +0 -1
- package/dist/tools/best-practices/notification.d.ts +0 -7
- package/dist/tools/best-practices/notification.js +0 -135
- package/dist/tools/best-practices/notification.js.map +0 -1
- package/dist/tools/best-practices/scheduling.d.ts +0 -7
- package/dist/tools/best-practices/scheduling.js +0 -152
- package/dist/tools/best-practices/scheduling.js.map +0 -1
- package/dist/tools/best-practices/scraping-and-research.d.ts +0 -7
- package/dist/tools/best-practices/scraping-and-research.js +0 -158
- package/dist/tools/best-practices/scraping-and-research.js.map +0 -1
- package/dist/tools/best-practices/triage.d.ts +0 -7
- package/dist/tools/best-practices/triage.js +0 -149
- package/dist/tools/best-practices/triage.js.map +0 -1
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ChatbotBestPractices = void 0;
|
|
4
|
-
const categorization_1 = require("../../types/categorization");
|
|
5
|
-
class ChatbotBestPractices {
|
|
6
|
-
technique = categorization_1.WorkflowTechnique.CHATBOT;
|
|
7
|
-
version = '1.0.0';
|
|
8
|
-
documentation = `# Best Practices: Chatbot Workflows
|
|
9
|
-
|
|
10
|
-
## Workflow Design
|
|
11
|
-
|
|
12
|
-
Break chatbot logic into manageable steps and use error handling nodes (IF, Switch) with fallback mechanisms to manage unexpected inputs.
|
|
13
|
-
|
|
14
|
-
Most chatbots run through external platforms like Slack, Telegram, or WhatsApp rather than through the n8n chat interface - if the user requests a service like this don't use the built in chat interface nodes. But, the n8n chat node is easier to get started with tests. If the user mentions chatting but does not mention a service then use the built in n8n chat node.
|
|
15
|
-
|
|
16
|
-
CRITICAL: The user may ask to be able to chat to a workflow as well as trigger it via some other method, for example scheduling information gathering but also being able to chat with the agent - in scenarios like this the two separate workflows MUST be connected through shared memory, vector stores, data storage, or direct connections.
|
|
17
|
-
|
|
18
|
-
Example pattern:
|
|
19
|
-
- Schedule Trigger → News Gathering Agent → [memory node via ai_memory]
|
|
20
|
-
- Chat Trigger → Chatbot Agent → [SAME memory node via ai_memory]
|
|
21
|
-
- Result: Both agents share conversation/context history, enabling the chatbot to discuss gathered news
|
|
22
|
-
|
|
23
|
-
For the chatbot always use the same chat node type as used for response. If Telegram has been requested trigger the chatbot via telegram AND
|
|
24
|
-
respond via telegram - do not mix chatbot interfaces.
|
|
25
|
-
|
|
26
|
-
## Context & Memory Management
|
|
27
|
-
|
|
28
|
-
Always utilise memory in chatbot agent nodes - providing context gives you full conversation history and more control over context.
|
|
29
|
-
Memory nodes enable the bot to handle follow-up questions by maintaining short-term conversation history.
|
|
30
|
-
|
|
31
|
-
Include information with the user prompt such as timestamp, user ID, or session metadata. This enriches context without relying solely on memory and user prompt.
|
|
32
|
-
|
|
33
|
-
If there are other agents involved in the workflow you should share memory between the chatbot and those other agents where it makes sense.
|
|
34
|
-
Connect the same memory node to multiple agents to enable data sharing and context continuity.
|
|
35
|
-
|
|
36
|
-
## Context Engineering & AI Agent Output
|
|
37
|
-
|
|
38
|
-
It can be beneficial to respond to the user as a tool of the chatbot agent rather than using the agent output - this allows the agent to loop/carry out multiple responses if necessary.
|
|
39
|
-
This will require adding a note to the system prompt for the agent to tell it to use the tool to respond to the user.
|
|
40
|
-
|
|
41
|
-
## Message Attribution
|
|
42
|
-
|
|
43
|
-
n8n chatbots often attach the attribution "n8n workflow" to messages by default - you must disable this setting which will
|
|
44
|
-
often be called "Append n8n Attribution" for nodes that support it, add this setting and set it to false.
|
|
45
|
-
|
|
46
|
-
## Recommended Nodes
|
|
47
|
-
|
|
48
|
-
### Chat Trigger (@n8n/n8n-nodes-langchain.chatTrigger)
|
|
49
|
-
|
|
50
|
-
Purpose: Entry point for user messages in n8n-hosted chat interfaces
|
|
51
|
-
|
|
52
|
-
Pitfalls:
|
|
53
|
-
|
|
54
|
-
- Most production chatbots use external platforms (Slack, Telegram) rather than n8n's chat interface
|
|
55
|
-
|
|
56
|
-
### AI Agent (@n8n/n8n-nodes-langchain.agent)
|
|
57
|
-
|
|
58
|
-
Purpose: Orchestrates logic, tool use, and LLM calls for intelligent responses.
|
|
59
|
-
|
|
60
|
-
Unless user asks for a node by name, always use the AI Agent node over provider-specific nodes (like OpenAI, Google Gemini) or use-case-specific AI nodes (like Message a model) for chatbot workflows. The AI Agent node provides better orchestration, tool integration, and memory management capabilities essential for conversational interfaces.
|
|
61
|
-
For example, for "create a chatbot using OpenAI", implement: AI Agent -- OpenAI Chat Model.
|
|
62
|
-
|
|
63
|
-
### Chat Model Nodes
|
|
64
|
-
|
|
65
|
-
- OpenAI Chat Model (@n8n/n8n-nodes-langchain.lmChatOpenAi)
|
|
66
|
-
- Google Gemini Chat Model (@n8n/n8n-nodes-langchain.lmChatGoogleGemini)
|
|
67
|
-
- xAI Grok Chat Model (@n8n/n8n-nodes-langchain.lmChatXAiGrok)
|
|
68
|
-
- DeepSeek Chat Model (@n8n/n8n-nodes-langchain.lmChatDeepSeek)
|
|
69
|
-
|
|
70
|
-
Purpose: Connect to LLMs for natural, context-aware responses
|
|
71
|
-
|
|
72
|
-
### Simple Memory (@n8n/n8n-nodes-langchain.memoryBufferWindow)
|
|
73
|
-
|
|
74
|
-
Purpose: Maintains short-term conversation history for context continuity
|
|
75
|
-
|
|
76
|
-
### HTTP Request (n8n-nodes-base.httpRequest)
|
|
77
|
-
|
|
78
|
-
Purpose: Fetches external data to enrich chatbot responses with real-time or organizational information
|
|
79
|
-
|
|
80
|
-
### Database Nodes & Google Sheets
|
|
81
|
-
|
|
82
|
-
- Data Table (n8n-nodes-base.dataTable)
|
|
83
|
-
- Postgres (n8n-nodes-base.postgres)
|
|
84
|
-
- MySQL (n8n-nodes-base.mySql)
|
|
85
|
-
- MongoDB (n8n-nodes-base.mongoDb)
|
|
86
|
-
- Google Sheets (n8n-nodes-base.googleSheets)
|
|
87
|
-
|
|
88
|
-
Purpose: Store conversation logs, retrieve structured data, or maintain user preferences
|
|
89
|
-
|
|
90
|
-
### IF / Switch
|
|
91
|
-
|
|
92
|
-
- If (n8n-nodes-base.if)
|
|
93
|
-
- Switch (n8n-nodes-base.switch)
|
|
94
|
-
|
|
95
|
-
Purpose: Conditional logic and error handling for routing messages or managing conversation state
|
|
96
|
-
|
|
97
|
-
### Integration Nodes
|
|
98
|
-
|
|
99
|
-
- Slack (n8n-nodes-base.slack)
|
|
100
|
-
- Telegram (n8n-nodes-base.telegram)
|
|
101
|
-
- WhatsApp Business Cloud (n8n-nodes-base.whatsApp)
|
|
102
|
-
- Discord (n8n-nodes-base.discord)
|
|
103
|
-
|
|
104
|
-
Purpose: Multi-channel support for deploying chatbots on popular messaging platforms
|
|
105
|
-
|
|
106
|
-
## Common Pitfalls to Avoid
|
|
107
|
-
|
|
108
|
-
### Leaving Chatbot Disconnected
|
|
109
|
-
|
|
110
|
-
When a workflow has multiple triggers (e.g., scheduled data collection + chatbot interaction), the chatbot MUST have access to the data
|
|
111
|
-
generated by the workflow. Connect the chatbot through shared memory, vector stores, data storage, or direct data flow connections.
|
|
112
|
-
`;
|
|
113
|
-
getDocumentation() {
|
|
114
|
-
return this.documentation;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
exports.ChatbotBestPractices = ChatbotBestPractices;
|
|
118
|
-
//# sourceMappingURL=chatbot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot.js","sourceRoot":"","sources":["../../../src/tools/best-practices/chatbot.ts"],"names":[],"mappings":";;;AACA,2DAA2D;AAE3D,MAAa,oBAAoB;IACvB,SAAS,GAAG,kCAAiB,CAAC,OAAO,CAAC;IACtC,OAAO,GAAG,OAAO,CAAC;IAEV,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwGjC,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;CACD;AAjHD,oDAiHC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { BestPracticesDocument } from '../../types/best-practices';
|
|
2
|
-
export declare class ContentGenerationBestPractices implements BestPracticesDocument {
|
|
3
|
-
readonly technique: "content_generation";
|
|
4
|
-
readonly version = "1.0.0";
|
|
5
|
-
private readonly documentation;
|
|
6
|
-
getDocumentation(): string;
|
|
7
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ContentGenerationBestPractices = void 0;
|
|
4
|
-
const categorization_1 = require("../../types/categorization");
|
|
5
|
-
class ContentGenerationBestPractices {
|
|
6
|
-
technique = categorization_1.WorkflowTechnique.CONTENT_GENERATION;
|
|
7
|
-
version = '1.0.0';
|
|
8
|
-
documentation = `# Best Practices: Content Generation Workflows
|
|
9
|
-
|
|
10
|
-
## Workflow Design
|
|
11
|
-
|
|
12
|
-
Break complex tasks into sequential steps (e.g., generate text, create image, compose video) for modularity and easier troubleshooting.
|
|
13
|
-
|
|
14
|
-
## Node Selection Guidelines
|
|
15
|
-
|
|
16
|
-
Always prefer built-in n8n nodes over HTTP Request nodes when a dedicated node exists for the service or API you need to integrate with. Built-in nodes provide:
|
|
17
|
-
- Pre-configured authentication handling
|
|
18
|
-
- Optimized data structures and field mappings
|
|
19
|
-
- Better error handling and user experience
|
|
20
|
-
- Simplified setup without manual API configuration
|
|
21
|
-
|
|
22
|
-
Only use HTTP Request nodes when no built-in node exists for the service, or when you need to access an API endpoint not covered by the built-in node's operations.
|
|
23
|
-
|
|
24
|
-
## Multi-Modal Content Generation - MANDATORY
|
|
25
|
-
|
|
26
|
-
When the user's request involves specific generative AI models or media-focused platforms, the workflow MUST include the appropriate media generation node from a
|
|
27
|
-
provider-specific node. The finished workflow MUST contain the relevant video, audio, or image generation capability.
|
|
28
|
-
|
|
29
|
-
Prompts that require multi-modal generation nodes:
|
|
30
|
-
|
|
31
|
-
Video Generation:
|
|
32
|
-
- Model mentions: Sora, Nano Banana, Veo, Runway, Pika
|
|
33
|
-
- Platform mentions: YouTube content, TikTok videos, Instagram Reels, video ads, short-form video
|
|
34
|
-
- Task mentions: generate video, create video, video from text, animate
|
|
35
|
-
|
|
36
|
-
Image Generation:
|
|
37
|
-
- Model mentions: DALL-E, Midjourney, Stable Diffusion, Imagen
|
|
38
|
-
- Platform mentions: thumbnails, social media graphics, product images, marketing visuals
|
|
39
|
-
- Task mentions: generate image, create artwork, design graphic, visualize
|
|
40
|
-
|
|
41
|
-
Audio Generation:
|
|
42
|
-
- Model mentions: ElevenLabs, text-to-speech, TTS
|
|
43
|
-
- Platform mentions: podcast audio, voiceovers, narration, audio content
|
|
44
|
-
- Task mentions: generate voice, create audio, synthesize speech, clone voice
|
|
45
|
-
|
|
46
|
-
If anything like the examples above are mentioned in the prompt, include the appropriate
|
|
47
|
-
provider node (OpenAI for DALL-E/Sora, Google Gemini for Nano Banana/Imagen, etc.)
|
|
48
|
-
with the media generation operation configured.
|
|
49
|
-
|
|
50
|
-
## Content-Specific Guidance
|
|
51
|
-
|
|
52
|
-
For text generation, validate and sanitize input/output to avoid malformed data. When generating images, prefer binary data over URLs for uploads to avoid media type errors.
|
|
53
|
-
|
|
54
|
-
## Recommended Nodes
|
|
55
|
-
|
|
56
|
-
### OpenAI (@n8n/n8n-nodes-langchain.openAi)
|
|
57
|
-
|
|
58
|
-
Purpose: GPT-based text generation, DALL-E image generation, text-to-speech (TTS), and audio transcription, SORA for video generation
|
|
59
|
-
|
|
60
|
-
### xAI Grok Chat Model (@n8n/n8n-nodes-langchain.lmChatXAiGrok)
|
|
61
|
-
|
|
62
|
-
Purpose: Conversational AI and text generation
|
|
63
|
-
|
|
64
|
-
### Google Gemini Chat Model (@n8n/n8n-nodes-langchain.lmChatGoogleGemini)
|
|
65
|
-
|
|
66
|
-
Purpose: Image analysis and generation, video generation from text prompts using nano banana, multimodal content creation
|
|
67
|
-
|
|
68
|
-
### ElevenLabs
|
|
69
|
-
|
|
70
|
-
Purpose: Natural-sounding AI voice generation
|
|
71
|
-
|
|
72
|
-
Note: Use HTTP Request node or a community node to integrate with ElevenLabs API
|
|
73
|
-
|
|
74
|
-
### HTTP Request (n8n-nodes-base.httpRequest)
|
|
75
|
-
|
|
76
|
-
Purpose: Integrating with other LLM and content generation APIs (e.g., Jasper, Writesonic, Anthropic, HuggingFace)
|
|
77
|
-
|
|
78
|
-
### Edit Image (n8n-nodes-base.editImage)
|
|
79
|
-
|
|
80
|
-
Purpose: Manipulating images - resize, crop, rotate, and format conversion
|
|
81
|
-
|
|
82
|
-
Pitfalls:
|
|
83
|
-
|
|
84
|
-
- Ensure input is valid binary image data
|
|
85
|
-
- Check output format compatibility with downstream nodes
|
|
86
|
-
|
|
87
|
-
### Markdown (n8n-nodes-base.markdown)
|
|
88
|
-
|
|
89
|
-
Purpose: Formatting and converting text to HTML or Markdown reports
|
|
90
|
-
|
|
91
|
-
### Facebook Graph API (n8n-nodes-base.facebookGraphApi)
|
|
92
|
-
|
|
93
|
-
Purpose: Uploading videos and images to Instagram and Facebook
|
|
94
|
-
|
|
95
|
-
Pitfalls:
|
|
96
|
-
|
|
97
|
-
- Use binary data fields rather than URLs for media uploads to prevent "media type" errors
|
|
98
|
-
- Verify page IDs and access tokens have correct permissions
|
|
99
|
-
|
|
100
|
-
### Wait (n8n-nodes-base.wait)
|
|
101
|
-
|
|
102
|
-
Purpose: Handling delays in video processing/uploading and respecting API rate limits
|
|
103
|
-
|
|
104
|
-
## Common Pitfalls to Avoid
|
|
105
|
-
|
|
106
|
-
Binary Data Handling: For media uploads, use binary fields rather than URLs to prevent "media type" errors, especially with Facebook and Instagram APIs. Download media to binary data first, then upload from binary rather than passing URLs.
|
|
107
|
-
|
|
108
|
-
Async Processing: For long-running content generation tasks (especially video), implement proper wait/polling mechanisms. Don't assume instant completion - many AI services process requests asynchronously.
|
|
109
|
-
`;
|
|
110
|
-
getDocumentation() {
|
|
111
|
-
return this.documentation;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
exports.ContentGenerationBestPractices = ContentGenerationBestPractices;
|
|
115
|
-
//# sourceMappingURL=content-generation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"content-generation.js","sourceRoot":"","sources":["../../../src/tools/best-practices/content-generation.ts"],"names":[],"mappings":";;;AACA,2DAA2D;AAE3D,MAAa,8BAA8B;IACjC,SAAS,GAAG,kCAAiB,CAAC,kBAAkB,CAAC;IACjD,OAAO,GAAG,OAAO,CAAC;IAEV,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqGjC,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;CACD;AA9GD,wEA8GC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { BestPracticesDocument } from '../../types/best-practices';
|
|
2
|
-
export declare class DataAnalysisBestPractices implements BestPracticesDocument {
|
|
3
|
-
readonly technique: "data_analysis";
|
|
4
|
-
readonly version = "1.0.0";
|
|
5
|
-
private readonly documentation;
|
|
6
|
-
getDocumentation(): string;
|
|
7
|
-
}
|
|
@@ -1,367 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DataAnalysisBestPractices = void 0;
|
|
4
|
-
const categorization_1 = require("../../types/categorization");
|
|
5
|
-
class DataAnalysisBestPractices {
|
|
6
|
-
technique = categorization_1.WorkflowTechnique.DATA_ANALYSIS;
|
|
7
|
-
version = '1.0.0';
|
|
8
|
-
documentation = `# Best Practices: Data Analysis Workflows
|
|
9
|
-
|
|
10
|
-
## Workflow Design
|
|
11
|
-
|
|
12
|
-
Structure workflows following the Input → Transform → Output pattern. Use clear node naming (e.g., "Fetch Sales Data", "Calculate Averages", "IF High Variance?") to document the flow.
|
|
13
|
-
|
|
14
|
-
Start with appropriate triggers:
|
|
15
|
-
- Manual Trigger for on-demand analysis
|
|
16
|
-
- Cron/Schedule Trigger for periodic analysis (daily/weekly reports)
|
|
17
|
-
- Webhook Trigger for event-driven analysis
|
|
18
|
-
|
|
19
|
-
Break complex workflows into modular sub-workflows using the Execute Workflow node for reusable components like "Outlier Detection" or "Data Preparation".
|
|
20
|
-
|
|
21
|
-
CRITICAL: For large datasets, use Split In Batches node to process items in chunks (e.g., 100 at a time) to prevent memory issues. Always test with realistic data volumes.
|
|
22
|
-
|
|
23
|
-
Example pattern:
|
|
24
|
-
- Trigger → HTTP Request (fetch data) → Spreadsheet File (parse CSV) → Set (clean fields) → Filter (remove nulls) → Code (analyze) → HTML (format report) → Email (send results)
|
|
25
|
-
|
|
26
|
-
## Data Preparation Strategy
|
|
27
|
-
|
|
28
|
-
1. **Fetch Data**: Use dedicated integration nodes or HTTP Request for APIs. Import cURL commands directly to HTTP node for complex APIs.
|
|
29
|
-
2. **Parse & Convert**: Convert to JSON using Spreadsheet File node for CSV/Excel. Enable "Convert types where required" on condition nodes.
|
|
30
|
-
3. **Clean Data**: Use Set node with "Keep Only Set" enabled to drop unused fields. Filter node for removing null values or focusing on data subsets.
|
|
31
|
-
4. **Merge/Enrich**: Use Merge node by key or index to combine multiple sources. Choose correct merge mode to avoid mismatched items.
|
|
32
|
-
|
|
33
|
-
## Analysis Implementation
|
|
34
|
-
|
|
35
|
-
Use Function node (not Function Item) when analysis needs all items as a whole (calculating totals, finding trends). Function Item operates per item only.
|
|
36
|
-
|
|
37
|
-
For AI-powered analysis, filter irrelevant content first to minimize tokens. Batch data into single prompts when possible.
|
|
38
|
-
|
|
39
|
-
Always pin data after external calls to test downstream logic without re-fetching. This saves API costs and speeds development.
|
|
40
|
-
|
|
41
|
-
## Output & Integration
|
|
42
|
-
|
|
43
|
-
Format results appropriately:
|
|
44
|
-
- HTML/Markdown nodes for reports
|
|
45
|
-
- Set node to prepare specific output fields (totalSales, anomalyCount)
|
|
46
|
-
- Database nodes to store analysis history
|
|
47
|
-
- Webhook Response for API-triggered workflows
|
|
48
|
-
|
|
49
|
-
Use conditional branches (IF nodes) for post-analysis actions:
|
|
50
|
-
- Create tasks if anomalies detected
|
|
51
|
-
- Send alerts for critical thresholds
|
|
52
|
-
- Avoid infinite loops by using proper conditions
|
|
53
|
-
|
|
54
|
-
## Recommended Nodes
|
|
55
|
-
|
|
56
|
-
### HTTP Request (n8n-nodes-base.httpRequest)
|
|
57
|
-
|
|
58
|
-
**Purpose**: Fetch datasets from URLs or APIs
|
|
59
|
-
|
|
60
|
-
**Use Cases**:
|
|
61
|
-
- Pull data from REST APIs for analysis
|
|
62
|
-
- Fetch CSV/JSON files from URLs
|
|
63
|
-
- Query external data sources
|
|
64
|
-
|
|
65
|
-
**Best Practices**:
|
|
66
|
-
- Import cURL commands for complex requests
|
|
67
|
-
- Use authentication credentials properly
|
|
68
|
-
- Handle pagination for large datasets
|
|
69
|
-
|
|
70
|
-
### Spreadsheet File (n8n-nodes-base.spreadsheetFile)
|
|
71
|
-
|
|
72
|
-
**Purpose**: Parse CSV/Excel files into JSON items for processing
|
|
73
|
-
|
|
74
|
-
**Use Cases**:
|
|
75
|
-
- Import CSV data from file uploads
|
|
76
|
-
- Process Excel spreadsheets
|
|
77
|
-
- Convert tabular data to JSON
|
|
78
|
-
|
|
79
|
-
**Best Practices**:
|
|
80
|
-
- Specify correct file format
|
|
81
|
-
- Handle header rows properly
|
|
82
|
-
- Test with various file encodings
|
|
83
|
-
|
|
84
|
-
### Set / Edit Fields (n8n-nodes-base.set)
|
|
85
|
-
|
|
86
|
-
**Purpose**: Clean data, select relevant fields, rename columns, convert data types
|
|
87
|
-
|
|
88
|
-
**Key Setting**: "Keep Only Set" - drops all fields not explicitly defined
|
|
89
|
-
|
|
90
|
-
**Use Cases**:
|
|
91
|
-
- Remove unused columns to reduce data size
|
|
92
|
-
- Rename fields to standardized names
|
|
93
|
-
- Convert data types (string to number)
|
|
94
|
-
- Add calculated fields
|
|
95
|
-
|
|
96
|
-
**Best Practices**:
|
|
97
|
-
- Enable "Keep Only Set" to drop unused data
|
|
98
|
-
- Always verify output structure
|
|
99
|
-
- Use expressions for calculated fields
|
|
100
|
-
|
|
101
|
-
### Filter (n8n-nodes-base.filter)
|
|
102
|
-
|
|
103
|
-
**Purpose**: Remove unwanted items based on conditions
|
|
104
|
-
|
|
105
|
-
**Use Cases**:
|
|
106
|
-
- Remove null values
|
|
107
|
-
- Filter outliers before analysis
|
|
108
|
-
- Focus on specific data subsets
|
|
109
|
-
|
|
110
|
-
**Best Practices**:
|
|
111
|
-
- Filter early to reduce processing load
|
|
112
|
-
- Use multiple conditions when needed
|
|
113
|
-
- Document filter logic clearly
|
|
114
|
-
|
|
115
|
-
### IF (n8n-nodes-base.if)
|
|
116
|
-
|
|
117
|
-
**Purpose**: Branch workflow based on analysis results
|
|
118
|
-
|
|
119
|
-
**Use Cases**:
|
|
120
|
-
- Route anomalies vs normal data
|
|
121
|
-
- Trigger alerts for threshold breaches
|
|
122
|
-
- Create conditional outputs
|
|
123
|
-
|
|
124
|
-
**Best Practices**:
|
|
125
|
-
- Enable "Convert types where required" for comparisons
|
|
126
|
-
- Use clear condition names
|
|
127
|
-
- Handle both true and false branches
|
|
128
|
-
|
|
129
|
-
### Code / Function (n8n-nodes-base.function)
|
|
130
|
-
|
|
131
|
-
**Purpose**: Custom JavaScript for calculations, statistics, anomaly detection
|
|
132
|
-
|
|
133
|
-
**Use Cases**:
|
|
134
|
-
- Calculate statistical measures (mean, median, std dev)
|
|
135
|
-
- Detect outliers and anomalies
|
|
136
|
-
- Perform complex transformations
|
|
137
|
-
- Implement custom algorithms
|
|
138
|
-
|
|
139
|
-
**Best Practices**:
|
|
140
|
-
- Use Function node (not Function Item) for whole-dataset operations
|
|
141
|
-
- Return proper data structure: \`return items\`
|
|
142
|
-
- Add comments to explain logic
|
|
143
|
-
- Test with edge cases
|
|
144
|
-
|
|
145
|
-
**Note**: Consider using the newer Code node (n8n-nodes-base.code) as Function node is deprecated.
|
|
146
|
-
|
|
147
|
-
### Aggregate (n8n-nodes-base.aggregate)
|
|
148
|
-
|
|
149
|
-
**Purpose**: Group items, gather values into arrays, count occurrences by category
|
|
150
|
-
|
|
151
|
-
**Use Cases**:
|
|
152
|
-
- Group sales by region
|
|
153
|
-
- Count items by category
|
|
154
|
-
- Calculate sums and averages per group
|
|
155
|
-
|
|
156
|
-
**Best Practices**:
|
|
157
|
-
- Choose appropriate aggregation function
|
|
158
|
-
- Use grouping keys effectively
|
|
159
|
-
- Simplifies statistical calculations
|
|
160
|
-
|
|
161
|
-
### Split In Batches (n8n-nodes-base.splitInBatches)
|
|
162
|
-
|
|
163
|
-
**Purpose**: Process large datasets in chunks to prevent memory overload
|
|
164
|
-
|
|
165
|
-
**Use Cases**:
|
|
166
|
-
- Handle datasets with 1000+ items
|
|
167
|
-
- Process API results in batches
|
|
168
|
-
- Prevent workflow timeouts
|
|
169
|
-
|
|
170
|
-
**Best Practices**:
|
|
171
|
-
- Set appropriate batch size (e.g., 100 items)
|
|
172
|
-
- Test with realistic data volumes
|
|
173
|
-
- Use loop logic properly
|
|
174
|
-
|
|
175
|
-
### Merge (n8n-nodes-base.merge)
|
|
176
|
-
|
|
177
|
-
**Purpose**: Combine data from multiple sources by key/index
|
|
178
|
-
|
|
179
|
-
**Modes**:
|
|
180
|
-
- Merge by Key: Join data like database operations
|
|
181
|
-
- Merge by Index: Combine parallel data streams
|
|
182
|
-
- Wait mode: Synchronize parallel branches
|
|
183
|
-
|
|
184
|
-
**Use Cases**:
|
|
185
|
-
- Join customer data with transaction data
|
|
186
|
-
- Combine multiple API responses
|
|
187
|
-
- Enrich data from multiple sources
|
|
188
|
-
|
|
189
|
-
**Best Practices**:
|
|
190
|
-
- Choose correct merge mode
|
|
191
|
-
- Ensure matching keys exist
|
|
192
|
-
- Handle missing data gracefully
|
|
193
|
-
|
|
194
|
-
### Database Nodes
|
|
195
|
-
|
|
196
|
-
**MySQL** (n8n-nodes-base.mySql):
|
|
197
|
-
- Purpose: Query MySQL databases for analysis data
|
|
198
|
-
- Use cases: Fetch historical data, store results
|
|
199
|
-
|
|
200
|
-
**Postgres** (n8n-nodes-base.postgres):
|
|
201
|
-
- Purpose: Query PostgreSQL databases
|
|
202
|
-
- Use cases: Complex analytical queries, time-series data
|
|
203
|
-
|
|
204
|
-
**MongoDB** (n8n-nodes-base.mongoDb):
|
|
205
|
-
- Purpose: Query NoSQL document databases
|
|
206
|
-
- Use cases: Unstructured data analysis, JSON documents
|
|
207
|
-
|
|
208
|
-
**Best Practices**:
|
|
209
|
-
- Use parameterized queries for security
|
|
210
|
-
- Query source data efficiently with proper indexes
|
|
211
|
-
- Store analysis results for historical tracking
|
|
212
|
-
- Use appropriate data types
|
|
213
|
-
|
|
214
|
-
### Google Sheets (n8n-nodes-base.googleSheets)
|
|
215
|
-
|
|
216
|
-
**Purpose**: Read/write spreadsheet data
|
|
217
|
-
|
|
218
|
-
**Use Cases**:
|
|
219
|
-
- Import data for analysis
|
|
220
|
-
- Append summary statistics
|
|
221
|
-
- Build analysis logs
|
|
222
|
-
- Share results with stakeholders
|
|
223
|
-
|
|
224
|
-
**Best Practices**:
|
|
225
|
-
- Use range specifications efficiently
|
|
226
|
-
- Handle large sheets with batching
|
|
227
|
-
- Consider API rate limits
|
|
228
|
-
|
|
229
|
-
### AI Agent (@n8n/n8n-nodes-langchain.agent)
|
|
230
|
-
|
|
231
|
-
**Purpose**: Leverage AI for text analysis, sentiment detection, complex pattern recognition
|
|
232
|
-
|
|
233
|
-
**Use Cases**:
|
|
234
|
-
- Sentiment analysis of customer feedback
|
|
235
|
-
- Text classification
|
|
236
|
-
- Extract insights from unstructured data
|
|
237
|
-
- Natural language processing
|
|
238
|
-
|
|
239
|
-
**Best Practices**:
|
|
240
|
-
- Filter irrelevant content first to minimize tokens
|
|
241
|
-
- Batch data into single prompts when possible
|
|
242
|
-
- Use structured output for consistency
|
|
243
|
-
- Consider API costs and latency
|
|
244
|
-
|
|
245
|
-
### HTML (n8n-nodes-base.html)
|
|
246
|
-
|
|
247
|
-
**Purpose**: Generate formatted reports with tables and styling
|
|
248
|
-
|
|
249
|
-
**Use Cases**:
|
|
250
|
-
- Create analysis reports
|
|
251
|
-
- Build dashboards
|
|
252
|
-
- Color-code data quality scores
|
|
253
|
-
- Format tables with results
|
|
254
|
-
|
|
255
|
-
**Best Practices**:
|
|
256
|
-
- Use templates for consistent formatting
|
|
257
|
-
- Include visualizations where helpful
|
|
258
|
-
- Make reports mobile-friendly
|
|
259
|
-
|
|
260
|
-
### Email (n8n-nodes-base.emailSend)
|
|
261
|
-
|
|
262
|
-
**Purpose**: Send analysis reports to stakeholders automatically
|
|
263
|
-
|
|
264
|
-
**Use Cases**:
|
|
265
|
-
- Scheduled report delivery
|
|
266
|
-
- Alert notifications
|
|
267
|
-
- Share findings with teams
|
|
268
|
-
|
|
269
|
-
**Best Practices**:
|
|
270
|
-
- Use clear subject lines
|
|
271
|
-
- Include summary in email body
|
|
272
|
-
- Attach detailed reports when needed
|
|
273
|
-
- Schedule appropriately
|
|
274
|
-
|
|
275
|
-
## Common Pitfalls to Avoid
|
|
276
|
-
|
|
277
|
-
### Data Type Mismatches
|
|
278
|
-
|
|
279
|
-
**Problem**: JSON data types matter. Comparing string vs number yields incorrect results. The comparison "5" > "10" is lexicographically true (wrong for numbers).
|
|
280
|
-
|
|
281
|
-
**Solution**:
|
|
282
|
-
- Always convert data types before comparisons
|
|
283
|
-
- Use Number() or parseInt() for numeric operations
|
|
284
|
-
- Enable "Convert types where required" on IF nodes
|
|
285
|
-
- Validate data types early in workflow
|
|
286
|
-
- Use proper type casting in Code nodes
|
|
287
|
-
|
|
288
|
-
### Memory Issues with Large Datasets
|
|
289
|
-
|
|
290
|
-
**Problem**: Processing thousands of items at once can crash workflows or timeout.
|
|
291
|
-
|
|
292
|
-
**Solution**:
|
|
293
|
-
- Use Split In Batches node for datasets over 100 items
|
|
294
|
-
- Set appropriate batch sizes (50-100 items)
|
|
295
|
-
- Test with realistic data volumes during development
|
|
296
|
-
- Monitor memory usage in production
|
|
297
|
-
- Consider sub-workflows for complex processing
|
|
298
|
-
|
|
299
|
-
### Not Pinning Data During Development
|
|
300
|
-
|
|
301
|
-
**Problem**: Re-fetching data from APIs repeatedly wastes time and costs money during development.
|
|
302
|
-
|
|
303
|
-
**Solution**:
|
|
304
|
-
- Always pin data after external calls
|
|
305
|
-
- Test downstream logic without re-fetching
|
|
306
|
-
- Saves API costs and speeds development
|
|
307
|
-
- Use manual triggers to control execution
|
|
308
|
-
|
|
309
|
-
### Incorrect Aggregation Logic
|
|
310
|
-
|
|
311
|
-
**Problem**: Using Function Item instead of Function node for whole-dataset calculations.
|
|
312
|
-
|
|
313
|
-
**Solution**:
|
|
314
|
-
- Use Function node (not Function Item) for totals, averages, trends
|
|
315
|
-
- Function Item operates per item only
|
|
316
|
-
- Understand the difference between item-level and dataset-level operations
|
|
317
|
-
- Use Aggregate node for common operations
|
|
318
|
-
|
|
319
|
-
### Missing Data Cleaning
|
|
320
|
-
|
|
321
|
-
**Problem**: Null values, inconsistent formats, or outliers skew analysis results.
|
|
322
|
-
|
|
323
|
-
**Solution**:
|
|
324
|
-
- Use Filter node to remove null values
|
|
325
|
-
- Standardize data formats early
|
|
326
|
-
- Handle missing data explicitly
|
|
327
|
-
- Use Set node to clean and normalize fields
|
|
328
|
-
- Document data quality assumptions
|
|
329
|
-
|
|
330
|
-
### Poor Error Handling
|
|
331
|
-
|
|
332
|
-
**Problem**: Failed API calls or data issues break the entire workflow.
|
|
333
|
-
|
|
334
|
-
**Solution**:
|
|
335
|
-
- Use "Continue on Fail" setting appropriately
|
|
336
|
-
- Add IF nodes to check for empty datasets
|
|
337
|
-
- Implement error logging
|
|
338
|
-
- Use Error Trigger workflows for global handling
|
|
339
|
-
- Validate data quality before analysis
|
|
340
|
-
|
|
341
|
-
### Hardcoded Values
|
|
342
|
-
|
|
343
|
-
**Problem**: Thresholds, API endpoints, or configuration values are hardcoded in nodes.
|
|
344
|
-
|
|
345
|
-
**Solution**:
|
|
346
|
-
- Store configuration in environment variables
|
|
347
|
-
- Use Google Sheets or databases for thresholds
|
|
348
|
-
- Makes workflows reusable and maintainable
|
|
349
|
-
- Enable non-technical users to adjust parameters
|
|
350
|
-
|
|
351
|
-
### Inefficient Query Patterns
|
|
352
|
-
|
|
353
|
-
**Problem**: Fetching entire datasets when only summary data is needed.
|
|
354
|
-
|
|
355
|
-
**Solution**:
|
|
356
|
-
- Use database aggregation functions
|
|
357
|
-
- Filter data at the source
|
|
358
|
-
- Use appropriate indexes
|
|
359
|
-
- Implement pagination for large results
|
|
360
|
-
- Consider pre-aggregated views
|
|
361
|
-
`;
|
|
362
|
-
getDocumentation() {
|
|
363
|
-
return this.documentation;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
exports.DataAnalysisBestPractices = DataAnalysisBestPractices;
|
|
367
|
-
//# sourceMappingURL=data-analysis.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-analysis.js","sourceRoot":"","sources":["../../../src/tools/best-practices/data-analysis.ts"],"names":[],"mappings":";;;AACA,2DAA2D;AAE3D,MAAa,yBAAyB;IAC5B,SAAS,GAAG,kCAAiB,CAAC,aAAa,CAAC;IAC5C,OAAO,GAAG,OAAO,CAAC;IAEV,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiWjC,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;CACD;AA1WD,8DA0WC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { BestPracticesDocument } from '../../types/best-practices';
|
|
2
|
-
export declare class DataExtractionBestPractices implements BestPracticesDocument {
|
|
3
|
-
readonly technique: "data_extraction";
|
|
4
|
-
readonly version = "1.0.0";
|
|
5
|
-
private readonly documentation;
|
|
6
|
-
getDocumentation(): string;
|
|
7
|
-
}
|