n8n-nodes-hudu 2.4.4 → 2.6.2
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/LICENSE +20 -20
- package/README.md +279 -279
- package/dist/credentials/hudu.svg +26 -26
- package/dist/nodes/Hudu/HuduAiTools.node.js +27 -3
- package/dist/nodes/Hudu/HuduAiTools.node.js.map +1 -1
- package/dist/nodes/Hudu/ai-tools/description-builders.js +18 -3
- package/dist/nodes/Hudu/ai-tools/description-builders.js.map +1 -1
- package/dist/nodes/Hudu/ai-tools/enrichment-executor.js +3 -3
- package/dist/nodes/Hudu/ai-tools/enrichment-executor.js.map +1 -1
- package/dist/nodes/Hudu/ai-tools/error-formatter.d.ts +43 -34
- package/dist/nodes/Hudu/ai-tools/error-formatter.js +69 -22
- package/dist/nodes/Hudu/ai-tools/error-formatter.js.map +1 -1
- package/dist/nodes/Hudu/ai-tools/help-registry.js +8 -12
- package/dist/nodes/Hudu/ai-tools/help-registry.js.map +1 -1
- package/dist/nodes/Hudu/ai-tools/resource-config.d.ts +1 -1
- package/dist/nodes/Hudu/ai-tools/resource-config.js.map +1 -1
- package/dist/nodes/Hudu/ai-tools/runtime.js +176 -48
- package/dist/nodes/Hudu/ai-tools/runtime.js.map +1 -1
- package/dist/nodes/Hudu/ai-tools/schema-generator.d.ts +12 -0
- package/dist/nodes/Hudu/ai-tools/schema-generator.js +213 -86
- package/dist/nodes/Hudu/ai-tools/schema-generator.js.map +1 -1
- package/dist/nodes/Hudu/ai-tools/tool-executor.js +12 -21
- package/dist/nodes/Hudu/ai-tools/tool-executor.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/articles.description.js +3 -3
- package/dist/nodes/Hudu/descriptions/articles.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/asset_passwords.description.js +3 -3
- package/dist/nodes/Hudu/descriptions/asset_passwords.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/assets.description.js +2 -2
- package/dist/nodes/Hudu/descriptions/assets.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/companies.description.js +2 -2
- package/dist/nodes/Hudu/descriptions/companies.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/folders.description.js +3 -3
- package/dist/nodes/Hudu/descriptions/folders.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/ip_addresses.description.js +2 -2
- package/dist/nodes/Hudu/descriptions/ip_addresses.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/matchers.description.js +3 -3
- package/dist/nodes/Hudu/descriptions/matchers.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/networks.description.js +3 -3
- package/dist/nodes/Hudu/descriptions/networks.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/passwordFolders.descriptions.js +3 -3
- package/dist/nodes/Hudu/descriptions/passwordFolders.descriptions.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/procedure_tasks.description.js +1 -1
- package/dist/nodes/Hudu/descriptions/procedure_tasks.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/procedures.description.js +4 -4
- package/dist/nodes/Hudu/descriptions/procedures.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/rack_storages.description.js +3 -3
- package/dist/nodes/Hudu/descriptions/rack_storages.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/vlan_zones.description.js +3 -3
- package/dist/nodes/Hudu/descriptions/vlan_zones.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/vlans.description.js +3 -3
- package/dist/nodes/Hudu/descriptions/vlans.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/websites.description.js +1 -1
- package/dist/nodes/Hudu/descriptions/websites.description.js.map +1 -1
- package/dist/nodes/Hudu/hudu.svg +26 -26
- package/dist/nodes/Hudu/resources/articles/articles.handler.js +7 -2
- package/dist/nodes/Hudu/resources/articles/articles.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/asset_passwords/asset_passwords.handler.js +11 -1
- package/dist/nodes/Hudu/resources/asset_passwords/asset_passwords.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/assets/assets.handler.js +8 -2
- package/dist/nodes/Hudu/resources/assets/assets.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/companies/companies.handler.js +2 -2
- package/dist/nodes/Hudu/resources/companies/companies.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/folders/folders.handler.js +14 -0
- package/dist/nodes/Hudu/resources/folders/folders.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/ip_addresses/ip_addresses.handler.js +3 -3
- package/dist/nodes/Hudu/resources/ip_addresses/ip_addresses.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/matchers/matchers.handler.js +9 -4
- package/dist/nodes/Hudu/resources/matchers/matchers.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/networks/networks.handler.js +3 -3
- package/dist/nodes/Hudu/resources/networks/networks.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/password_folders/password_folders.handler.js +8 -2
- package/dist/nodes/Hudu/resources/password_folders/password_folders.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/procedure_tasks/procedure_tasks.handler.js +6 -0
- package/dist/nodes/Hudu/resources/procedure_tasks/procedure_tasks.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/procedures/procedures.handler.js +4 -4
- package/dist/nodes/Hudu/resources/procedures/procedures.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/rack_storages/rack_storages.handler.js +3 -3
- package/dist/nodes/Hudu/resources/rack_storages/rack_storages.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/vlan_zones/vlan_zones.handler.js +5 -2
- package/dist/nodes/Hudu/resources/vlan_zones/vlan_zones.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/vlans/vlans.handler.js +5 -2
- package/dist/nodes/Hudu/resources/vlans/vlans.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/websites/websites.handler.js +2 -2
- package/dist/nodes/Hudu/resources/websites/websites.handler.js.map +1 -1
- package/dist/nodes/Hudu/utils/companyResolver.d.ts +7 -0
- package/dist/nodes/Hudu/utils/companyResolver.js +45 -0
- package/dist/nodes/Hudu/utils/companyResolver.js.map +1 -0
- package/dist/nodes/Hudu/utils/index.d.ts +1 -0
- package/dist/nodes/Hudu/utils/index.js +1 -0
- package/dist/nodes/Hudu/utils/index.js.map +1 -1
- package/dist/nodes/Hudu/utils/operations/matchers.js +3 -2
- package/dist/nodes/Hudu/utils/operations/matchers.js.map +1 -1
- package/dist/package.json +16 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +79 -67
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024 Max Soukhomlinov
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Max Soukhomlinov
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,279 +1,279 @@
|
|
|
1
|
-
# n8n-nodes-hudu
|
|
2
|
-
This community node enables seamless integration with the Hudu documentation platform in your n8n workflows, allowing you to automate and manage your IT documentation tasks.
|
|
3
|
-
|
|
4
|
-

|
|
5
|
-

|
|
6
|
-
|
|
7
|
-
> **API Compatibility:** This node is aligned with Hudu API version 2.41.0 (reference: `api-docs-v2.41.0.json` in this repository). Some features require specific API versions. Compatibility with future Hudu versions is not guaranteed without further updates.
|
|
8
|
-
|
|
9
|
-
[](https://buymeacoffee.com/msoukhomlinov)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
## Installation
|
|
13
|
-
|
|
14
|
-
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
15
|
-
|
|
16
|
-
## Credentials
|
|
17
|
-
|
|
18
|
-
To use this node, you need to:
|
|
19
|
-
|
|
20
|
-
1. Have a Hudu instance
|
|
21
|
-
2. Generate an API key in your Hudu settings
|
|
22
|
-
3. Configure the node with:
|
|
23
|
-
- Base URL (e.g., https://your-hudu-instance.com)
|
|
24
|
-
- API Key
|
|
25
|
-
|
|
26
|
-
## Features
|
|
27
|
-
|
|
28
|
-
- Comprehensive pagination support for applicable resources
|
|
29
|
-
- Robust error handling and debugging capabilities
|
|
30
|
-
- Advanced filtering options with both API-side and client-side filtering
|
|
31
|
-
- Support for both single and bulk operations
|
|
32
|
-
- Dynamic loading of related resources (companies, users, assets, layouts, networks, groups, VLANs, VLAN Zones)
|
|
33
|
-
- Date range filtering with preset options
|
|
34
|
-
- Automatic type conversion and validation
|
|
35
|
-
- Debug logging for troubleshooting (category-based; see DEBUG.md; requires N8N_LOG_LEVEL=debug when running n8n)
|
|
36
|
-
- Central request sanitisation (omits empty optionals to prevent API 500s)
|
|
37
|
-
- Resource-specific update collections across all resources
|
|
38
|
-
- Optional article markdown conversion (HTML to Markdown) for Articles get/get many (uses internal regex-based converter)
|
|
39
|
-
- Flexible identifier support: Get operations support both numeric IDs and slugs via Identifier Type toggle (Articles, Asset Layouts, Asset Passwords, Assets, Companies, Groups, Networks, Password Folders, Procedures, Users, VLAN Zones, VLANs, Websites)
|
|
40
|
-
- **AI Agent support**: `Hudu AI Tools` node exposes Hudu operations as structured LangChain tools for use with n8n AI Agent workflows (compatible with Anthropic Claude, OpenAI, and other providers)
|
|
41
|
-
|
|
42
|
-
## Supported Resources & Operations
|
|
43
|
-
|
|
44
|
-
### Activity Logs
|
|
45
|
-
- Get all activity logs with comprehensive filtering support
|
|
46
|
-
- Filter by user (ID or email), action, resource (ID and type), and date range
|
|
47
|
-
- Delete activity logs by datetime with optional unassigned logs filter
|
|
48
|
-
|
|
49
|
-
### API Info
|
|
50
|
-
- Get API information and version details
|
|
51
|
-
|
|
52
|
-
### Articles
|
|
53
|
-
- Create, update, archive, unarchive, delete, and retrieve articles
|
|
54
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
55
|
-
- List all articles with comprehensive filtering (company, draft, sharing, folder, name, fuzzy search, updated date range)
|
|
56
|
-
- Get article version history
|
|
57
|
-
- Include Markdown Content toggle to return `markdown_content` alongside original HTML
|
|
58
|
-
|
|
59
|
-
### Asset
|
|
60
|
-
- **Manage core asset lifecycle & properties**: Create, retrieve, update core details, archive, unarchive, move layout, and delete assets
|
|
61
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
62
|
-
- Link assets to companies
|
|
63
|
-
- Get single asset details, including all its field values
|
|
64
|
-
- List all assets with enhanced filtering (e.g., by company, update date, archived status)
|
|
65
|
-
|
|
66
|
-
### Asset Layouts
|
|
67
|
-
- Create and manage asset layout templates
|
|
68
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
69
|
-
- Get layout fields and configurations
|
|
70
|
-
- List all layouts with filtering support
|
|
71
|
-
- **Advanced custom field support:** Add hints, min/max, linkable asset layout IDs, expiration, options, and more to your custom fields. Use the "Other Data" input to specify any additional API-supported properties
|
|
72
|
-
|
|
73
|
-
### Asset Passwords
|
|
74
|
-
- Create and manage asset-related passwords
|
|
75
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
76
|
-
- Link passwords to assets and companies
|
|
77
|
-
- Filter by company and resource types
|
|
78
|
-
|
|
79
|
-
### Cards
|
|
80
|
-
- Lookup cards by integration (supports integration ID or identifier)
|
|
81
|
-
- Jump to card by integration ID or identifier
|
|
82
|
-
- Filter by integration type and slug
|
|
83
|
-
|
|
84
|
-
### Companies
|
|
85
|
-
- Create, update, delete, and retrieve companies
|
|
86
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
87
|
-
- List all companies with filtering support
|
|
88
|
-
- Jump to company by integration
|
|
89
|
-
|
|
90
|
-
### Expirations
|
|
91
|
-
- Get all expirations with comprehensive filtering (company, expiration type, resource ID/type, date ranges)
|
|
92
|
-
|
|
93
|
-
### Folders
|
|
94
|
-
- Create and manage document folders
|
|
95
|
-
- Support for nested folder structures
|
|
96
|
-
- Filter by parent folder
|
|
97
|
-
- Track child folder status
|
|
98
|
-
|
|
99
|
-
### IP Addresses
|
|
100
|
-
- Track and manage IP addresses
|
|
101
|
-
- Link to companies and networks
|
|
102
|
-
- Filter by company and network
|
|
103
|
-
|
|
104
|
-
### Lists
|
|
105
|
-
- Create, update, retrieve, and delete lists
|
|
106
|
-
- Use this resource to manage the lists themselves
|
|
107
|
-
- Create list items when creating a list, or add/update/remove items when updating a list
|
|
108
|
-
- Filter lists by name or query
|
|
109
|
-
|
|
110
|
-
### List Options
|
|
111
|
-
- Create, update, retrieve, and delete list items within a specific list
|
|
112
|
-
- Use this resource to manage the items/options of a list
|
|
113
|
-
|
|
114
|
-
### Magic Dash
|
|
115
|
-
- Create, update, get, and delete Magic Dash items
|
|
116
|
-
- List all items with filtering by company and title
|
|
117
|
-
- Delete by ID or by title + company name
|
|
118
|
-
|
|
119
|
-
### Matchers
|
|
120
|
-
- Configure and manage integration matchers
|
|
121
|
-
- Filter by match status and company
|
|
122
|
-
- Support for sync identifiers
|
|
123
|
-
|
|
124
|
-
### Networks
|
|
125
|
-
- Create and manage network information
|
|
126
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
127
|
-
- Link to companies
|
|
128
|
-
- Filter by company and attributes
|
|
129
|
-
- Pick related VLANs with an option loader
|
|
130
|
-
|
|
131
|
-
### Password Folders
|
|
132
|
-
- Create, update, delete, and retrieve password folders
|
|
133
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
134
|
-
- Security modes: all users or specific groups (`allowed_groups` when `security = specific`)
|
|
135
|
-
- Filter by name, company, search
|
|
136
|
-
- Pick allowed groups with an option loader
|
|
137
|
-
|
|
138
|
-
### Exports
|
|
139
|
-
- Initiate company exports with format options: PDF, CSV, or S3
|
|
140
|
-
- Optional inclusions: websites, passwords, and specific asset layouts
|
|
141
|
-
|
|
142
|
-
### S3 Exports
|
|
143
|
-
- Initiate S3 exports (uses credentials configured in Hudu account settings)
|
|
144
|
-
|
|
145
|
-
### Procedures
|
|
146
|
-
- Create and manage procedures
|
|
147
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
148
|
-
- Create from templates
|
|
149
|
-
- Duplicate existing procedures
|
|
150
|
-
- Manage procedure tasks
|
|
151
|
-
- Track task completion
|
|
152
|
-
|
|
153
|
-
### Relations
|
|
154
|
-
- Create and manage resource relationships
|
|
155
|
-
- Support for various resource types
|
|
156
|
-
- Filter by relationship types and directions
|
|
157
|
-
|
|
158
|
-
### Groups
|
|
159
|
-
- Retrieve groups and retrieve a group by ID
|
|
160
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
161
|
-
- Filters: name, default, search; supports pagination
|
|
162
|
-
|
|
163
|
-
### Users
|
|
164
|
-
- Get user information
|
|
165
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
166
|
-
- List all users
|
|
167
|
-
- Filter by role and status
|
|
168
|
-
|
|
169
|
-
### VLANs
|
|
170
|
-
- Full CRUD support for VLANs, including filtering by company, name, and VLAN ID
|
|
171
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
172
|
-
- Pick VLAN Zone and Status List via option loaders
|
|
173
|
-
|
|
174
|
-
### VLAN Zones
|
|
175
|
-
- Full CRUD support for VLAN Zones, including filtering by company, name, archive status, and date ranges
|
|
176
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
177
|
-
- Option loader available for selecting zones where referenced
|
|
178
|
-
|
|
179
|
-
### Uploads
|
|
180
|
-
- Manage file uploads
|
|
181
|
-
- Operations: Create (multipart upload), Get, Get Many, Delete
|
|
182
|
-
|
|
183
|
-
### Websites
|
|
184
|
-
- Manage website records
|
|
185
|
-
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
186
|
-
- Link to companies
|
|
187
|
-
- Filter by company and status
|
|
188
|
-
- **All fields supported, including new email security fields:** `enable_dmarc_tracking`, `enable_dkim_tracking`, `enable_spf_tracking`, and more
|
|
189
|
-
|
|
190
|
-
## Hudu AI Tools Node
|
|
191
|
-
|
|
192
|
-
The `Hudu AI Tools` node connects to n8n's **AI Agent** and exposes Hudu operations as individual structured tools that an LLM can invoke directly.
|
|
193
|
-
|
|
194
|
-
### How it works
|
|
195
|
-
|
|
196
|
-
1. Add a **Hudu AI Tools** node to your workflow
|
|
197
|
-
2. Connect it to an **AI Agent** node via the Tools connector
|
|
198
|
-
3. Select a **Resource** and the **Operations** to expose
|
|
199
|
-
4. Optionally enable **Allow Write Operations** to permit create / update / delete / archive
|
|
200
|
-
|
|
201
|
-
The AI Agent receives one named tool per operation (e.g. `hudu_companies_getAll`, `hudu_assets_create`) and can call them autonomously based on the user's request. The `get` operation is exposed as `getById` (e.g. `hudu_companies_getById`) so the LLM clearly understands a numeric ID is required.
|
|
202
|
-
|
|
203
|
-
### Supported resources
|
|
204
|
-
|
|
205
|
-
| Resource | Operations |
|
|
206
|
-
|---|---|
|
|
207
|
-
| Activity Logs | getAll |
|
|
208
|
-
| Articles | get, getAll, create, update, delete, archive, unarchive |
|
|
209
|
-
| Asset Layouts | get, getAll |
|
|
210
|
-
| Asset Passwords | get, getAll, create, update, delete, archive, unarchive |
|
|
211
|
-
| Assets | get, getAll, create, update, delete, archive, unarchive |
|
|
212
|
-
| Companies | get, getAll, create, update, delete, archive, unarchive |
|
|
213
|
-
| Expirations | get, getAll, create, update, delete |
|
|
214
|
-
| Folders | get, getAll, create, update, delete |
|
|
215
|
-
| Groups | get, getAll |
|
|
216
|
-
| IP Addresses | get, getAll, create, update, delete |
|
|
217
|
-
| Matchers | getAll |
|
|
218
|
-
| Networks | get, getAll, create, update, delete, archive, unarchive |
|
|
219
|
-
| Procedures | get, getAll, create, update, delete, archive, unarchive |
|
|
220
|
-
| Relations | getAll, create, delete |
|
|
221
|
-
| Users | get, getAll |
|
|
222
|
-
| VLANs | get, getAll, create, update, delete |
|
|
223
|
-
| VLAN Zones | get, getAll, create, update, delete |
|
|
224
|
-
| Websites | get, getAll, create, update, delete, archive, unarchive |
|
|
225
|
-
|
|
226
|
-
### Notes
|
|
227
|
-
|
|
228
|
-
- **Read-only by default**: write operations (create, update, delete, archive, unarchive) are hidden until `Allow Write Operations` is enabled
|
|
229
|
-
- **Error handling**: all errors are returned as structured JSON with an `error`, `errorType`, and `nextAction` field so the LLM can self-correct without crashing the workflow
|
|
230
|
-
- **Assets**: require `company_id` for create/update/delete/archive because Hudu's API routes asset mutations through the company endpoint
|
|
231
|
-
- **Matchers**: `getAll` requires an `integration_id` parameter
|
|
232
|
-
- **Websites**: the `name` field is the monitored URL and must include the protocol — e.g. `https://example.com`, not a display name
|
|
233
|
-
- **n8n version compatibility**: works with n8n 2.9+ (ToolsAgent V3) and all earlier n8n versions
|
|
234
|
-
|
|
235
|
-
## Resources
|
|
236
|
-
|
|
237
|
-
- [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
|
|
238
|
-
- [Hudu API Documentation](https://your-hudu-instance.com/api-docs)
|
|
239
|
-
- [GitHub Repository](https://github.com/msoukhomlinov/n8n-nodes-hudu)
|
|
240
|
-
|
|
241
|
-
## Development
|
|
242
|
-
|
|
243
|
-
```bash
|
|
244
|
-
npm run build # Compile TypeScript (n8n-node build)
|
|
245
|
-
npm run dev # Hot-reload development server (n8n-node dev)
|
|
246
|
-
npm run build:watch # TypeScript watch mode (tsc --watch)
|
|
247
|
-
npm run lint # Lint with n8n-node lint
|
|
248
|
-
npm run lint:fix # Lint and auto-fix
|
|
249
|
-
npm run format # Format with Prettier
|
|
250
|
-
npm run release # Publish via n8n-node release
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
## Contributing
|
|
254
|
-
|
|
255
|
-
Contributions are welcome! If you'd like to contribute to this project:
|
|
256
|
-
|
|
257
|
-
1. Fork the repository
|
|
258
|
-
2. Create a feature branch (`git checkout -b feature/AmazingFeature`)
|
|
259
|
-
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
|
260
|
-
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
|
261
|
-
5. Open a Pull Request
|
|
262
|
-
|
|
263
|
-
Please ensure your PR:
|
|
264
|
-
- Clearly describes the changes
|
|
265
|
-
- Includes any relevant documentation updates
|
|
266
|
-
- Follows the existing code style
|
|
267
|
-
- Includes tests if applicable
|
|
268
|
-
|
|
269
|
-
For bug reports or feature requests, please use the GitHub issues section.
|
|
270
|
-
|
|
271
|
-
## Support
|
|
272
|
-
|
|
273
|
-
If you find this node helpful and would like to support its development:
|
|
274
|
-
|
|
275
|
-
[](https://buymeacoffee.com/msoukhomlinov)
|
|
276
|
-
|
|
277
|
-
## License
|
|
278
|
-
|
|
279
|
-
[MIT](LICENSE)
|
|
1
|
+
# n8n-nodes-hudu
|
|
2
|
+
This community node enables seamless integration with the Hudu documentation platform in your n8n workflows, allowing you to automate and manage your IT documentation tasks.
|
|
3
|
+
|
|
4
|
+

|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
> **API Compatibility:** This node is aligned with Hudu API version 2.41.0 (reference: `api-docs-v2.41.0.json` in this repository). Some features require specific API versions. Compatibility with future Hudu versions is not guaranteed without further updates.
|
|
8
|
+
|
|
9
|
+
[](https://buymeacoffee.com/msoukhomlinov)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
15
|
+
|
|
16
|
+
## Credentials
|
|
17
|
+
|
|
18
|
+
To use this node, you need to:
|
|
19
|
+
|
|
20
|
+
1. Have a Hudu instance
|
|
21
|
+
2. Generate an API key in your Hudu settings
|
|
22
|
+
3. Configure the node with:
|
|
23
|
+
- Base URL (e.g., https://your-hudu-instance.com)
|
|
24
|
+
- API Key
|
|
25
|
+
|
|
26
|
+
## Features
|
|
27
|
+
|
|
28
|
+
- Comprehensive pagination support for applicable resources
|
|
29
|
+
- Robust error handling and debugging capabilities
|
|
30
|
+
- Advanced filtering options with both API-side and client-side filtering
|
|
31
|
+
- Support for both single and bulk operations
|
|
32
|
+
- Dynamic loading of related resources (companies, users, assets, layouts, networks, groups, VLANs, VLAN Zones)
|
|
33
|
+
- Date range filtering with preset options
|
|
34
|
+
- Automatic type conversion and validation
|
|
35
|
+
- Debug logging for troubleshooting (category-based; see DEBUG.md; requires N8N_LOG_LEVEL=debug when running n8n)
|
|
36
|
+
- Central request sanitisation (omits empty optionals to prevent API 500s)
|
|
37
|
+
- Resource-specific update collections across all resources
|
|
38
|
+
- Optional article markdown conversion (HTML to Markdown) for Articles get/get many (uses internal regex-based converter)
|
|
39
|
+
- Flexible identifier support: Get operations support both numeric IDs and slugs via Identifier Type toggle (Articles, Asset Layouts, Asset Passwords, Assets, Companies, Groups, Networks, Password Folders, Procedures, Users, VLAN Zones, VLANs, Websites)
|
|
40
|
+
- **AI Agent support**: `Hudu AI Tools` node exposes Hudu operations as structured LangChain tools for use with n8n AI Agent workflows (compatible with Anthropic Claude, OpenAI, and other providers)
|
|
41
|
+
|
|
42
|
+
## Supported Resources & Operations
|
|
43
|
+
|
|
44
|
+
### Activity Logs
|
|
45
|
+
- Get all activity logs with comprehensive filtering support
|
|
46
|
+
- Filter by user (ID or email), action, resource (ID and type), and date range
|
|
47
|
+
- Delete activity logs by datetime with optional unassigned logs filter
|
|
48
|
+
|
|
49
|
+
### API Info
|
|
50
|
+
- Get API information and version details
|
|
51
|
+
|
|
52
|
+
### Articles
|
|
53
|
+
- Create, update, archive, unarchive, delete, and retrieve articles
|
|
54
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
55
|
+
- List all articles with comprehensive filtering (company, draft, sharing, folder, name, fuzzy search, updated date range)
|
|
56
|
+
- Get article version history
|
|
57
|
+
- Include Markdown Content toggle to return `markdown_content` alongside original HTML
|
|
58
|
+
|
|
59
|
+
### Asset
|
|
60
|
+
- **Manage core asset lifecycle & properties**: Create, retrieve, update core details, archive, unarchive, move layout, and delete assets
|
|
61
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
62
|
+
- Link assets to companies
|
|
63
|
+
- Get single asset details, including all its field values
|
|
64
|
+
- List all assets with enhanced filtering (e.g., by company, update date, archived status)
|
|
65
|
+
|
|
66
|
+
### Asset Layouts
|
|
67
|
+
- Create and manage asset layout templates
|
|
68
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
69
|
+
- Get layout fields and configurations
|
|
70
|
+
- List all layouts with filtering support
|
|
71
|
+
- **Advanced custom field support:** Add hints, min/max, linkable asset layout IDs, expiration, options, and more to your custom fields. Use the "Other Data" input to specify any additional API-supported properties
|
|
72
|
+
|
|
73
|
+
### Asset Passwords
|
|
74
|
+
- Create and manage asset-related passwords
|
|
75
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
76
|
+
- Link passwords to assets and companies
|
|
77
|
+
- Filter by company and resource types
|
|
78
|
+
|
|
79
|
+
### Cards
|
|
80
|
+
- Lookup cards by integration (supports integration ID or identifier)
|
|
81
|
+
- Jump to card by integration ID or identifier
|
|
82
|
+
- Filter by integration type and slug
|
|
83
|
+
|
|
84
|
+
### Companies
|
|
85
|
+
- Create, update, delete, and retrieve companies
|
|
86
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
87
|
+
- List all companies with filtering support
|
|
88
|
+
- Jump to company by integration
|
|
89
|
+
|
|
90
|
+
### Expirations
|
|
91
|
+
- Get all expirations with comprehensive filtering (company, expiration type, resource ID/type, date ranges)
|
|
92
|
+
|
|
93
|
+
### Folders
|
|
94
|
+
- Create and manage document folders
|
|
95
|
+
- Support for nested folder structures
|
|
96
|
+
- Filter by parent folder
|
|
97
|
+
- Track child folder status
|
|
98
|
+
|
|
99
|
+
### IP Addresses
|
|
100
|
+
- Track and manage IP addresses
|
|
101
|
+
- Link to companies and networks
|
|
102
|
+
- Filter by company and network
|
|
103
|
+
|
|
104
|
+
### Lists
|
|
105
|
+
- Create, update, retrieve, and delete lists
|
|
106
|
+
- Use this resource to manage the lists themselves
|
|
107
|
+
- Create list items when creating a list, or add/update/remove items when updating a list
|
|
108
|
+
- Filter lists by name or query
|
|
109
|
+
|
|
110
|
+
### List Options
|
|
111
|
+
- Create, update, retrieve, and delete list items within a specific list
|
|
112
|
+
- Use this resource to manage the items/options of a list
|
|
113
|
+
|
|
114
|
+
### Magic Dash
|
|
115
|
+
- Create, update, get, and delete Magic Dash items
|
|
116
|
+
- List all items with filtering by company and title
|
|
117
|
+
- Delete by ID or by title + company name
|
|
118
|
+
|
|
119
|
+
### Matchers
|
|
120
|
+
- Configure and manage integration matchers
|
|
121
|
+
- Filter by match status and company
|
|
122
|
+
- Support for sync identifiers
|
|
123
|
+
|
|
124
|
+
### Networks
|
|
125
|
+
- Create and manage network information
|
|
126
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
127
|
+
- Link to companies
|
|
128
|
+
- Filter by company and attributes
|
|
129
|
+
- Pick related VLANs with an option loader
|
|
130
|
+
|
|
131
|
+
### Password Folders
|
|
132
|
+
- Create, update, delete, and retrieve password folders
|
|
133
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
134
|
+
- Security modes: all users or specific groups (`allowed_groups` when `security = specific`)
|
|
135
|
+
- Filter by name, company, search
|
|
136
|
+
- Pick allowed groups with an option loader
|
|
137
|
+
|
|
138
|
+
### Exports
|
|
139
|
+
- Initiate company exports with format options: PDF, CSV, or S3
|
|
140
|
+
- Optional inclusions: websites, passwords, and specific asset layouts
|
|
141
|
+
|
|
142
|
+
### S3 Exports
|
|
143
|
+
- Initiate S3 exports (uses credentials configured in Hudu account settings)
|
|
144
|
+
|
|
145
|
+
### Procedures
|
|
146
|
+
- Create and manage procedures
|
|
147
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
148
|
+
- Create from templates
|
|
149
|
+
- Duplicate existing procedures
|
|
150
|
+
- Manage procedure tasks
|
|
151
|
+
- Track task completion
|
|
152
|
+
|
|
153
|
+
### Relations
|
|
154
|
+
- Create and manage resource relationships
|
|
155
|
+
- Support for various resource types
|
|
156
|
+
- Filter by relationship types and directions
|
|
157
|
+
|
|
158
|
+
### Groups
|
|
159
|
+
- Retrieve groups and retrieve a group by ID
|
|
160
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
161
|
+
- Filters: name, default, search; supports pagination
|
|
162
|
+
|
|
163
|
+
### Users
|
|
164
|
+
- Get user information
|
|
165
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
166
|
+
- List all users
|
|
167
|
+
- Filter by role and status
|
|
168
|
+
|
|
169
|
+
### VLANs
|
|
170
|
+
- Full CRUD support for VLANs, including filtering by company, name, and VLAN ID
|
|
171
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
172
|
+
- Pick VLAN Zone and Status List via option loaders
|
|
173
|
+
|
|
174
|
+
### VLAN Zones
|
|
175
|
+
- Full CRUD support for VLAN Zones, including filtering by company, name, archive status, and date ranges
|
|
176
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
177
|
+
- Option loader available for selecting zones where referenced
|
|
178
|
+
|
|
179
|
+
### Uploads
|
|
180
|
+
- Manage file uploads
|
|
181
|
+
- Operations: Create (multipart upload), Get, Get Many, Delete
|
|
182
|
+
|
|
183
|
+
### Websites
|
|
184
|
+
- Manage website records
|
|
185
|
+
- Get operation supports numeric ID or slug selection via Identifier Type toggle
|
|
186
|
+
- Link to companies
|
|
187
|
+
- Filter by company and status
|
|
188
|
+
- **All fields supported, including new email security fields:** `enable_dmarc_tracking`, `enable_dkim_tracking`, `enable_spf_tracking`, and more
|
|
189
|
+
|
|
190
|
+
## Hudu AI Tools Node
|
|
191
|
+
|
|
192
|
+
The `Hudu AI Tools` node connects to n8n's **AI Agent** and exposes Hudu operations as individual structured tools that an LLM can invoke directly.
|
|
193
|
+
|
|
194
|
+
### How it works
|
|
195
|
+
|
|
196
|
+
1. Add a **Hudu AI Tools** node to your workflow
|
|
197
|
+
2. Connect it to an **AI Agent** node via the Tools connector
|
|
198
|
+
3. Select a **Resource** and the **Operations** to expose
|
|
199
|
+
4. Optionally enable **Allow Write Operations** to permit create / update / delete / archive
|
|
200
|
+
|
|
201
|
+
The AI Agent receives one named tool per operation (e.g. `hudu_companies_getAll`, `hudu_assets_create`) and can call them autonomously based on the user's request. The `get` operation is exposed as `getById` (e.g. `hudu_companies_getById`) so the LLM clearly understands a numeric ID is required.
|
|
202
|
+
|
|
203
|
+
### Supported resources
|
|
204
|
+
|
|
205
|
+
| Resource | Operations |
|
|
206
|
+
|---|---|
|
|
207
|
+
| Activity Logs | getAll |
|
|
208
|
+
| Articles | get, getAll, create, update, delete, archive, unarchive |
|
|
209
|
+
| Asset Layouts | get, getAll |
|
|
210
|
+
| Asset Passwords | get, getAll, create, update, delete, archive, unarchive |
|
|
211
|
+
| Assets | get, getAll, create, update, delete, archive, unarchive |
|
|
212
|
+
| Companies | get, getAll, create, update, delete, archive, unarchive |
|
|
213
|
+
| Expirations | get, getAll, create, update, delete |
|
|
214
|
+
| Folders | get, getAll, create, update, delete |
|
|
215
|
+
| Groups | get, getAll |
|
|
216
|
+
| IP Addresses | get, getAll, create, update, delete |
|
|
217
|
+
| Matchers | getAll |
|
|
218
|
+
| Networks | get, getAll, create, update, delete, archive, unarchive |
|
|
219
|
+
| Procedures | get, getAll, create, update, delete, archive, unarchive |
|
|
220
|
+
| Relations | getAll, create, delete |
|
|
221
|
+
| Users | get, getAll |
|
|
222
|
+
| VLANs | get, getAll, create, update, delete |
|
|
223
|
+
| VLAN Zones | get, getAll, create, update, delete |
|
|
224
|
+
| Websites | get, getAll, create, update, delete, archive, unarchive |
|
|
225
|
+
|
|
226
|
+
### Notes
|
|
227
|
+
|
|
228
|
+
- **Read-only by default**: write operations (create, update, delete, archive, unarchive) are hidden until `Allow Write Operations` is enabled
|
|
229
|
+
- **Error handling**: all errors are returned as structured JSON with an `error`, `errorType`, and `nextAction` field so the LLM can self-correct without crashing the workflow
|
|
230
|
+
- **Assets**: require `company_id` for create/update/delete/archive because Hudu's API routes asset mutations through the company endpoint
|
|
231
|
+
- **Matchers**: `getAll` requires an `integration_id` parameter
|
|
232
|
+
- **Websites**: the `name` field is the monitored URL and must include the protocol — e.g. `https://example.com`, not a display name
|
|
233
|
+
- **n8n version compatibility**: works with n8n 2.9+ (ToolsAgent V3) and all earlier n8n versions
|
|
234
|
+
|
|
235
|
+
## Resources
|
|
236
|
+
|
|
237
|
+
- [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
|
|
238
|
+
- [Hudu API Documentation](https://your-hudu-instance.com/api-docs)
|
|
239
|
+
- [GitHub Repository](https://github.com/msoukhomlinov/n8n-nodes-hudu)
|
|
240
|
+
|
|
241
|
+
## Development
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
npm run build # Compile TypeScript (n8n-node build)
|
|
245
|
+
npm run dev # Hot-reload development server (n8n-node dev)
|
|
246
|
+
npm run build:watch # TypeScript watch mode (tsc --watch)
|
|
247
|
+
npm run lint # Lint with n8n-node lint
|
|
248
|
+
npm run lint:fix # Lint and auto-fix
|
|
249
|
+
npm run format # Format with Prettier
|
|
250
|
+
npm run release # Publish via n8n-node release
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## Contributing
|
|
254
|
+
|
|
255
|
+
Contributions are welcome! If you'd like to contribute to this project:
|
|
256
|
+
|
|
257
|
+
1. Fork the repository
|
|
258
|
+
2. Create a feature branch (`git checkout -b feature/AmazingFeature`)
|
|
259
|
+
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
|
260
|
+
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
|
261
|
+
5. Open a Pull Request
|
|
262
|
+
|
|
263
|
+
Please ensure your PR:
|
|
264
|
+
- Clearly describes the changes
|
|
265
|
+
- Includes any relevant documentation updates
|
|
266
|
+
- Follows the existing code style
|
|
267
|
+
- Includes tests if applicable
|
|
268
|
+
|
|
269
|
+
For bug reports or feature requests, please use the GitHub issues section.
|
|
270
|
+
|
|
271
|
+
## Support
|
|
272
|
+
|
|
273
|
+
If you find this node helpful and would like to support its development:
|
|
274
|
+
|
|
275
|
+
[](https://buymeacoffee.com/msoukhomlinov)
|
|
276
|
+
|
|
277
|
+
## License
|
|
278
|
+
|
|
279
|
+
[MIT](LICENSE)
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
<?xml version="1.0" standalone="no"?>
|
|
2
|
-
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
|
3
|
-
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
|
4
|
-
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
|
5
|
-
width="400.000000pt" height="400.000000pt" viewBox="0 0 400.000000 400.000000"
|
|
6
|
-
preserveAspectRatio="xMidYMid meet">
|
|
7
|
-
<metadata>
|
|
8
|
-
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
|
9
|
-
</metadata>
|
|
10
|
-
<g transform="translate(0.000000,400.000000) scale(0.100000,-0.100000)"
|
|
11
|
-
fill="#663AF9" stroke="none">
|
|
12
|
-
<path d="M1328 3115 c-98 -55 16 -329 246 -589 87 -99 231 -222 300 -258 69
|
|
13
|
-
-35 126 -42 441 -58 116 -6 243 -15 284 -21 113 -16 117 3 30 137 -225 344
|
|
14
|
-
-604 641 -979 765 -116 38 -276 50 -322 24z"/>
|
|
15
|
-
<path d="M1015 2129 c-206 -11 -477 -36 -529 -50 -91 -24 -112 -90 -54 -170
|
|
16
|
-
87 -122 266 -261 421 -326 229 -97 486 -108 717 -33 156 51 260 113 260 155 0
|
|
17
|
-
6 -6 19 -13 29 -12 16 -16 15 -72 -10 -142 -62 -308 -81 -445 -48 -83 19 -193
|
|
18
|
-
73 -250 123 -38 33 -43 42 -34 58 16 26 89 41 253 53 147 9 390 0 519 -21 153
|
|
19
|
-
-24 257 -94 309 -209 13 -27 18 -85 23 -245 6 -184 9 -217 29 -267 47 -122
|
|
20
|
-
145 -220 268 -270 57 -22 65 -23 384 -23 l325 0 76 38 c101 49 137 92 276 322
|
|
21
|
-
105 175 112 190 112 240 0 38 -6 61 -23 86 -30 45 -416 362 -492 404 -185 103
|
|
22
|
-
-435 145 -970 165 -310 11 -855 11 -1090 -1z m1954 -402 c49 -25 107 -98 97
|
|
23
|
-
-122 -9 -25 -86 -55 -140 -55 -62 0 -122 33 -160 89 -31 44 -29 54 17 78 75
|
|
24
|
-
39 128 42 186 10z"/>
|
|
25
|
-
</g>
|
|
26
|
-
</svg>
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
|
3
|
+
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
|
4
|
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="400.000000pt" height="400.000000pt" viewBox="0 0 400.000000 400.000000"
|
|
6
|
+
preserveAspectRatio="xMidYMid meet">
|
|
7
|
+
<metadata>
|
|
8
|
+
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
|
9
|
+
</metadata>
|
|
10
|
+
<g transform="translate(0.000000,400.000000) scale(0.100000,-0.100000)"
|
|
11
|
+
fill="#663AF9" stroke="none">
|
|
12
|
+
<path d="M1328 3115 c-98 -55 16 -329 246 -589 87 -99 231 -222 300 -258 69
|
|
13
|
+
-35 126 -42 441 -58 116 -6 243 -15 284 -21 113 -16 117 3 30 137 -225 344
|
|
14
|
+
-604 641 -979 765 -116 38 -276 50 -322 24z"/>
|
|
15
|
+
<path d="M1015 2129 c-206 -11 -477 -36 -529 -50 -91 -24 -112 -90 -54 -170
|
|
16
|
+
87 -122 266 -261 421 -326 229 -97 486 -108 717 -33 156 51 260 113 260 155 0
|
|
17
|
+
6 -6 19 -13 29 -12 16 -16 15 -72 -10 -142 -62 -308 -81 -445 -48 -83 19 -193
|
|
18
|
+
73 -250 123 -38 33 -43 42 -34 58 16 26 89 41 253 53 147 9 390 0 519 -21 153
|
|
19
|
+
-24 257 -94 309 -209 13 -27 18 -85 23 -245 6 -184 9 -217 29 -267 47 -122
|
|
20
|
+
145 -220 268 -270 57 -22 65 -23 384 -23 l325 0 76 38 c101 49 137 92 276 322
|
|
21
|
+
105 175 112 190 112 240 0 38 -6 61 -23 86 -30 45 -416 362 -492 404 -185 103
|
|
22
|
+
-435 145 -970 165 -310 11 -855 11 -1090 -1z m1954 -402 c49 -25 107 -98 97
|
|
23
|
+
-122 -9 -25 -86 -55 -140 -55 -62 0 -122 33 -160 89 -31 44 -29 54 17 78 75
|
|
24
|
+
39 128 42 186 10z"/>
|
|
25
|
+
</g>
|
|
26
|
+
</svg>
|