n8n-nodes-hudu 1.2.0 → 1.2.5
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 +79 -43
- package/dist/credentials/HuduApi.credentials.ts +48 -48
- package/dist/nodes/Hudu/Hudu.node.js +38 -59
- package/dist/nodes/Hudu/Hudu.node.js.map +1 -1
- package/dist/nodes/Hudu/Hudu.node.json +18 -18
- package/dist/nodes/Hudu/Hudu.node.ts +45 -60
- package/dist/nodes/Hudu/descriptions/activity_logs.description.js +2 -1
- package/dist/nodes/Hudu/descriptions/activity_logs.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/activity_logs.description.ts +2 -1
- package/dist/nodes/Hudu/descriptions/articles.description.js +65 -18
- package/dist/nodes/Hudu/descriptions/articles.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/articles.description.ts +66 -19
- package/dist/nodes/Hudu/descriptions/assets.description.js +4 -100
- package/dist/nodes/Hudu/descriptions/assets.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/assets.description.ts +4 -105
- package/dist/nodes/Hudu/descriptions/cards.description.js +4 -3
- package/dist/nodes/Hudu/descriptions/cards.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/cards.description.ts +4 -3
- package/dist/nodes/Hudu/descriptions/companies.description.js +2 -1
- package/dist/nodes/Hudu/descriptions/companies.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/companies.description.ts +2 -1
- package/dist/nodes/Hudu/descriptions/folders.description.js +20 -0
- package/dist/nodes/Hudu/descriptions/folders.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/folders.description.ts +24 -0
- package/dist/nodes/Hudu/descriptions/procedures.description.js +2 -2
- package/dist/nodes/Hudu/descriptions/procedures.description.js.map +1 -1
- package/dist/nodes/Hudu/descriptions/procedures.description.ts +2 -2
- package/dist/nodes/Hudu/descriptions/resources.js +114 -0
- package/dist/nodes/Hudu/descriptions/resources.js.map +1 -0
- package/dist/nodes/Hudu/descriptions/resources.ts +113 -0
- package/dist/nodes/Hudu/hudu.svg +26 -26
- package/dist/nodes/Hudu/optionLoaders/assets/getAssets.js +76 -0
- package/dist/nodes/Hudu/optionLoaders/assets/getAssets.js.map +1 -0
- package/dist/nodes/Hudu/optionLoaders/assets/getAssets.ts +128 -0
- package/dist/nodes/Hudu/optionLoaders/assets/index.js +18 -0
- package/dist/nodes/Hudu/optionLoaders/assets/index.js.map +1 -0
- package/dist/nodes/Hudu/optionLoaders/assets/index.ts +1 -0
- package/dist/nodes/Hudu/optionLoaders/companies/index.ts +1 -1
- package/dist/nodes/Hudu/optionLoaders/users/index.ts +1 -1
- package/dist/nodes/Hudu/resources/activity_logs/activity_logs.handler.js +3 -24
- package/dist/nodes/Hudu/resources/activity_logs/activity_logs.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/activity_logs/activity_logs.handler.ts +6 -43
- package/dist/nodes/Hudu/resources/articles/articles.handler.js +137 -110
- package/dist/nodes/Hudu/resources/articles/articles.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/articles/articles.handler.ts +213 -155
- package/dist/nodes/Hudu/resources/asset_layouts/asset_layouts.handler.js +6 -6
- package/dist/nodes/Hudu/resources/asset_layouts/asset_layouts.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/asset_layouts/asset_layouts.handler.ts +6 -6
- package/dist/nodes/Hudu/resources/asset_passwords/asset_passwords.handler.js +6 -6
- package/dist/nodes/Hudu/resources/asset_passwords/asset_passwords.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/asset_passwords/asset_passwords.handler.ts +6 -6
- package/dist/nodes/Hudu/resources/assets/assets.handler.js +37 -19
- package/dist/nodes/Hudu/resources/assets/assets.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/assets/assets.handler.ts +52 -19
- package/dist/nodes/Hudu/resources/companies/companies.handler.js +2 -5
- package/dist/nodes/Hudu/resources/companies/companies.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/companies/companies.handler.ts +2 -8
- package/dist/nodes/Hudu/resources/folders/folders.handler.js +17 -0
- package/dist/nodes/Hudu/resources/folders/folders.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/folders/folders.handler.ts +24 -1
- package/dist/nodes/Hudu/resources/folders/folders.types.ts +6 -1
- package/dist/nodes/Hudu/resources/ip_addresses/ip_addresses.handler.js +2 -0
- package/dist/nodes/Hudu/resources/ip_addresses/ip_addresses.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/ip_addresses/ip_addresses.handler.ts +7 -6
- package/dist/nodes/Hudu/resources/networks/networks.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/networks/networks.handler.ts +5 -6
- package/dist/nodes/Hudu/resources/procedure_tasks/procedure_tasks.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/procedure_tasks/procedure_tasks.handler.ts +3 -4
- package/dist/nodes/Hudu/resources/procedures/procedures.handler.js +1 -1
- package/dist/nodes/Hudu/resources/procedures/procedures.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/procedures/procedures.handler.ts +1 -1
- package/dist/nodes/Hudu/resources/rack_storages/rack_storages.handler.js +6 -1
- package/dist/nodes/Hudu/resources/rack_storages/rack_storages.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/rack_storages/rack_storages.handler.ts +11 -7
- package/dist/nodes/Hudu/resources/websites/websites.handler.js +7 -3
- package/dist/nodes/Hudu/resources/websites/websites.handler.js.map +1 -1
- package/dist/nodes/Hudu/resources/websites/websites.handler.ts +15 -12
- package/dist/nodes/Hudu/utils/dateUtils.js +13 -0
- package/dist/nodes/Hudu/utils/dateUtils.js.map +1 -1
- package/dist/nodes/Hudu/utils/dateUtils.ts +17 -0
- package/dist/nodes/Hudu/utils/debugConfig.js +79 -0
- package/dist/nodes/Hudu/utils/debugConfig.js.map +1 -0
- package/dist/nodes/Hudu/utils/debugConfig.ts +117 -0
- package/dist/nodes/Hudu/utils/filterUtils.js +46 -10
- package/dist/nodes/Hudu/utils/filterUtils.js.map +1 -1
- package/dist/nodes/Hudu/utils/filterUtils.ts +55 -12
- package/dist/nodes/Hudu/utils/formatters.js +18 -0
- package/dist/nodes/Hudu/utils/formatters.js.map +1 -0
- package/dist/nodes/Hudu/utils/formatters.ts +23 -0
- package/dist/nodes/Hudu/utils/operations/archive.js +18 -3
- package/dist/nodes/Hudu/utils/operations/archive.js.map +1 -1
- package/dist/nodes/Hudu/utils/operations/archive.ts +25 -5
- package/dist/nodes/Hudu/utils/operations/create.js +12 -1
- package/dist/nodes/Hudu/utils/operations/create.js.map +1 -1
- package/dist/nodes/Hudu/utils/operations/create.ts +15 -1
- package/dist/nodes/Hudu/utils/operations/delete.js +17 -3
- package/dist/nodes/Hudu/utils/operations/delete.js.map +1 -1
- package/dist/nodes/Hudu/utils/operations/delete.ts +23 -4
- package/dist/nodes/Hudu/utils/operations/get.js +13 -2
- package/dist/nodes/Hudu/utils/operations/get.js.map +1 -1
- package/dist/nodes/Hudu/utils/operations/get.ts +18 -4
- package/dist/nodes/Hudu/utils/operations/getAll.js +20 -1
- package/dist/nodes/Hudu/utils/operations/getAll.js.map +1 -1
- package/dist/nodes/Hudu/utils/operations/getAll.ts +29 -7
- package/dist/nodes/Hudu/utils/operations/procedures.js +9 -2
- package/dist/nodes/Hudu/utils/operations/procedures.js.map +1 -1
- package/dist/nodes/Hudu/utils/operations/procedures.ts +13 -2
- package/dist/nodes/Hudu/utils/operations/update.js +12 -15
- package/dist/nodes/Hudu/utils/operations/update.js.map +1 -1
- package/dist/nodes/Hudu/utils/operations/update.ts +15 -36
- package/dist/nodes/Hudu/utils/requestUtils.js +128 -49
- package/dist/nodes/Hudu/utils/requestUtils.js.map +1 -1
- package/dist/nodes/Hudu/utils/requestUtils.ts +182 -57
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# n8n-nodes-hudu
|
|
2
2
|
|
|
3
|
-
This
|
|
3
|
+
This n8n community node enables the integration of Hudu within your n8n workflows.
|
|
4
4
|
|
|
5
5
|
[Hudu](https://www.hudu.com/) is a modern documentation platform for IT.
|
|
6
6
|
|
|
@@ -8,8 +8,6 @@ This is an n8n community node (v1.0.0). It lets you use Hudu in your n8n workflo
|
|
|
8
8
|
|
|
9
9
|
This node was built against Hudu v2.34.4. Future versions of Hudu may not be 100% compatible without node updates.
|
|
10
10
|
|
|
11
|
-
> **Note:** This is version 1.0.0, so some bugs are expected. Please report any issues on the [GitHub repository](https://github.com/msoukhomlinov/n8n-nodes-hudu).
|
|
12
|
-
|
|
13
11
|
## Installation
|
|
14
12
|
|
|
15
13
|
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
@@ -18,106 +16,141 @@ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes
|
|
|
18
16
|
|
|
19
17
|
### Activity Logs
|
|
20
18
|
|
|
21
|
-
- Get all activity logs
|
|
19
|
+
- Get all activity logs with filtering support
|
|
20
|
+
- Filter by user, action, and date range
|
|
22
21
|
|
|
23
22
|
### API Info
|
|
24
23
|
|
|
25
|
-
- Get API information
|
|
24
|
+
- Get API information and version details
|
|
26
25
|
|
|
27
26
|
### Articles
|
|
28
27
|
|
|
29
|
-
- Create,
|
|
30
|
-
-
|
|
28
|
+
- Create articles (name required, with optional content, company, folder, and sharing settings)
|
|
29
|
+
- Update articles with flexible field updates
|
|
30
|
+
- Archive and unarchive articles
|
|
31
|
+
- Delete articles
|
|
32
|
+
- Get single article details
|
|
33
|
+
- List all articles with comprehensive filtering:
|
|
34
|
+
- Company ID
|
|
35
|
+
- Draft status
|
|
36
|
+
- Sharing status
|
|
37
|
+
- Folder ID
|
|
38
|
+
- Name exact match
|
|
39
|
+
- Fuzzy search
|
|
40
|
+
- Updated date range
|
|
41
|
+
- Get article version history
|
|
31
42
|
|
|
32
43
|
### Asset Layouts
|
|
33
44
|
|
|
34
|
-
-
|
|
45
|
+
- Create and manage asset layout templates
|
|
46
|
+
- Get layout fields and configurations
|
|
47
|
+
- List all layouts with filtering support
|
|
35
48
|
|
|
36
49
|
### Asset Passwords
|
|
37
50
|
|
|
38
|
-
-
|
|
51
|
+
- Create and manage asset-related passwords
|
|
52
|
+
- Link passwords to assets and companies
|
|
53
|
+
- Filter by company and resource types
|
|
39
54
|
|
|
40
55
|
### Assets
|
|
41
56
|
|
|
42
|
-
- Create
|
|
57
|
+
- Create assets with custom fields
|
|
43
58
|
- Link assets to companies
|
|
59
|
+
- Update asset details
|
|
60
|
+
- Archive/unarchive assets
|
|
61
|
+
- Delete assets
|
|
62
|
+
- Get single asset details
|
|
63
|
+
- List all assets with filtering support:
|
|
64
|
+
- Company association
|
|
65
|
+
- Updated date range
|
|
66
|
+
- Custom field values
|
|
44
67
|
|
|
45
68
|
### Cards
|
|
46
69
|
|
|
47
|
-
-
|
|
70
|
+
- Lookup cards by integration
|
|
71
|
+
- Jump to card functionality
|
|
72
|
+
- Filter by integration type and slug
|
|
48
73
|
|
|
49
74
|
### Companies
|
|
50
75
|
|
|
51
|
-
- Create
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
- Get
|
|
55
|
-
-
|
|
76
|
+
- Create companies with detailed information
|
|
77
|
+
- Update company details
|
|
78
|
+
- Delete companies
|
|
79
|
+
- Get single company information
|
|
80
|
+
- List all companies with filtering support
|
|
81
|
+
- Jump to company by integration
|
|
56
82
|
|
|
57
83
|
### Expirations
|
|
58
84
|
|
|
59
|
-
- Get all expirations with filtering
|
|
85
|
+
- Get all expirations with comprehensive filtering:
|
|
60
86
|
- Company ID
|
|
61
87
|
- Expiration type
|
|
62
88
|
- Resource ID
|
|
63
89
|
- Resource type
|
|
90
|
+
- Date ranges
|
|
64
91
|
|
|
65
92
|
### Folders
|
|
66
93
|
|
|
67
|
-
-
|
|
94
|
+
- Create and manage document folders
|
|
95
|
+
- Support for nested folder structures
|
|
96
|
+
- Filter by parent folder
|
|
97
|
+
- Track child folder status
|
|
68
98
|
|
|
69
99
|
### IP Addresses
|
|
70
100
|
|
|
71
101
|
- Track and manage IP addresses
|
|
102
|
+
- Link to companies and networks
|
|
103
|
+
- Filter by company and network
|
|
72
104
|
|
|
73
105
|
### Magic Dash
|
|
74
106
|
|
|
75
107
|
- Access Magic Dash functionality
|
|
108
|
+
- Filter by company and title
|
|
109
|
+
- Delete by title and company name
|
|
76
110
|
|
|
77
111
|
### Matchers
|
|
78
112
|
|
|
79
|
-
- Configure and manage matchers
|
|
113
|
+
- Configure and manage integration matchers
|
|
114
|
+
- Filter by match status and company
|
|
115
|
+
- Support for sync identifiers
|
|
80
116
|
|
|
81
117
|
### Networks
|
|
82
118
|
|
|
83
|
-
-
|
|
119
|
+
- Create and manage network information
|
|
120
|
+
- Link to companies
|
|
121
|
+
- Filter by company and attributes
|
|
84
122
|
|
|
85
123
|
### Password Folders
|
|
86
124
|
|
|
87
|
-
-
|
|
125
|
+
- Create and organize password folders
|
|
126
|
+
- Support for folder hierarchy
|
|
127
|
+
- Filter by parent folder
|
|
88
128
|
|
|
89
129
|
### Procedures
|
|
90
130
|
|
|
91
131
|
- Create and manage procedures
|
|
92
|
-
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
- Manage public photos
|
|
97
|
-
|
|
98
|
-
### Rack Storage
|
|
99
|
-
|
|
100
|
-
- Manage rack storage
|
|
101
|
-
- Handle rack storage items
|
|
132
|
+
- Create from templates
|
|
133
|
+
- Duplicate existing procedures
|
|
134
|
+
- Manage procedure tasks
|
|
135
|
+
- Track task completion
|
|
102
136
|
|
|
103
137
|
### Relations
|
|
104
138
|
|
|
105
|
-
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
- Handle file uploads
|
|
110
|
-
- Get upload information
|
|
111
|
-
- Delete uploads
|
|
139
|
+
- Create and manage resource relationships
|
|
140
|
+
- Support for various resource types
|
|
141
|
+
- Filter by relationship types and directions
|
|
112
142
|
|
|
113
143
|
### Users
|
|
114
144
|
|
|
115
145
|
- Get user information
|
|
116
146
|
- List all users
|
|
147
|
+
- Filter by role and status
|
|
117
148
|
|
|
118
149
|
### Websites
|
|
119
150
|
|
|
120
151
|
- Manage website records
|
|
152
|
+
- Link to companies
|
|
153
|
+
- Filter by company and status
|
|
121
154
|
|
|
122
155
|
## Credentials
|
|
123
156
|
|
|
@@ -131,11 +164,14 @@ To use this node, you need to:
|
|
|
131
164
|
|
|
132
165
|
## Features
|
|
133
166
|
|
|
134
|
-
-
|
|
135
|
-
-
|
|
136
|
-
-
|
|
137
|
-
-
|
|
138
|
-
-
|
|
167
|
+
- Comprehensive pagination support for all applicable resources
|
|
168
|
+
- Robust error handling and debugging capabilities
|
|
169
|
+
- Advanced filtering options with both API-side and client-side filtering
|
|
170
|
+
- Support for both single and bulk operations
|
|
171
|
+
- Dynamic loading of related resources (companies, layouts, etc.)
|
|
172
|
+
- Date range filtering with preset options
|
|
173
|
+
- Automatic type conversion and validation
|
|
174
|
+
- Debug logging for troubleshooting
|
|
139
175
|
|
|
140
176
|
## Resources
|
|
141
177
|
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
IAuthenticateGeneric,
|
|
3
|
-
ICredentialTestRequest,
|
|
4
|
-
ICredentialType,
|
|
5
|
-
INodeProperties,
|
|
6
|
-
} from 'n8n-workflow';
|
|
7
|
-
|
|
8
|
-
export class HuduApi implements ICredentialType {
|
|
9
|
-
name = 'huduApi';
|
|
10
|
-
displayName = 'Hudu API';
|
|
11
|
-
properties: INodeProperties[] = [
|
|
12
|
-
{
|
|
13
|
-
displayName: 'Base URL',
|
|
14
|
-
name: 'baseUrl',
|
|
15
|
-
type: 'string',
|
|
16
|
-
default: '',
|
|
17
|
-
placeholder: 'https://your-hudu-instance',
|
|
18
|
-
required: true,
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
displayName: 'API Key',
|
|
22
|
-
name: 'apiKey',
|
|
23
|
-
type: 'string',
|
|
24
|
-
typeOptions: {
|
|
25
|
-
password: true,
|
|
26
|
-
},
|
|
27
|
-
default: '',
|
|
28
|
-
required: true,
|
|
29
|
-
},
|
|
30
|
-
];
|
|
31
|
-
|
|
32
|
-
authenticate: IAuthenticateGeneric = {
|
|
33
|
-
type: 'generic',
|
|
34
|
-
properties: {
|
|
35
|
-
headers: {
|
|
36
|
-
'x-api-key': '={{$credentials.apiKey}}',
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
test: ICredentialTestRequest = {
|
|
42
|
-
request: {
|
|
43
|
-
baseURL: '={{$credentials.baseUrl}}',
|
|
44
|
-
url: '/api/v1/companies',
|
|
45
|
-
method: 'GET',
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
}
|
|
1
|
+
import type {
|
|
2
|
+
IAuthenticateGeneric,
|
|
3
|
+
ICredentialTestRequest,
|
|
4
|
+
ICredentialType,
|
|
5
|
+
INodeProperties,
|
|
6
|
+
} from 'n8n-workflow';
|
|
7
|
+
|
|
8
|
+
export class HuduApi implements ICredentialType {
|
|
9
|
+
name = 'huduApi';
|
|
10
|
+
displayName = 'Hudu API';
|
|
11
|
+
properties: INodeProperties[] = [
|
|
12
|
+
{
|
|
13
|
+
displayName: 'Base URL',
|
|
14
|
+
name: 'baseUrl',
|
|
15
|
+
type: 'string',
|
|
16
|
+
default: '',
|
|
17
|
+
placeholder: 'https://your-hudu-instance',
|
|
18
|
+
required: true,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
displayName: 'API Key',
|
|
22
|
+
name: 'apiKey',
|
|
23
|
+
type: 'string',
|
|
24
|
+
typeOptions: {
|
|
25
|
+
password: true,
|
|
26
|
+
},
|
|
27
|
+
default: '',
|
|
28
|
+
required: true,
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
authenticate: IAuthenticateGeneric = {
|
|
33
|
+
type: 'generic',
|
|
34
|
+
properties: {
|
|
35
|
+
headers: {
|
|
36
|
+
'x-api-key': '={{$credentials.apiKey}}',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
test: ICredentialTestRequest = {
|
|
42
|
+
request: {
|
|
43
|
+
baseURL: '={{$credentials.baseUrl}}',
|
|
44
|
+
url: '/api/v1/companies',
|
|
45
|
+
method: 'GET',
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
@@ -25,11 +25,14 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.Hudu = void 0;
|
|
27
27
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
28
|
+
const debugConfig_1 = require("./utils/debugConfig");
|
|
28
29
|
const descriptions = __importStar(require("./descriptions"));
|
|
30
|
+
const resources_1 = require("./descriptions/resources");
|
|
29
31
|
const resources = __importStar(require("./resources"));
|
|
30
32
|
const users_1 = require("./optionLoaders/users");
|
|
31
33
|
const companies_1 = require("./optionLoaders/companies");
|
|
32
34
|
const asset_layouts_1 = require("./optionLoaders/asset_layouts");
|
|
35
|
+
const assets_1 = require("./optionLoaders/assets");
|
|
33
36
|
class Hudu {
|
|
34
37
|
constructor() {
|
|
35
38
|
this.description = {
|
|
@@ -64,63 +67,7 @@ class Hudu {
|
|
|
64
67
|
},
|
|
65
68
|
},
|
|
66
69
|
properties: [
|
|
67
|
-
|
|
68
|
-
displayName: 'Resource',
|
|
69
|
-
name: 'resource',
|
|
70
|
-
type: 'options',
|
|
71
|
-
noDataExpression: true,
|
|
72
|
-
options: [
|
|
73
|
-
{
|
|
74
|
-
name: 'Activity Log',
|
|
75
|
-
value: 'activity_logs',
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
name: 'API Info',
|
|
79
|
-
value: 'api_info',
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
name: 'Article',
|
|
83
|
-
value: 'articles',
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
name: 'Asset',
|
|
87
|
-
value: 'assets',
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
name: 'Asset Layout',
|
|
91
|
-
value: 'asset_layouts',
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
name: 'Asset Layout Field',
|
|
95
|
-
value: 'asset_layout_fields',
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
name: 'Asset Password',
|
|
99
|
-
value: 'asset_passwords',
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
name: 'Company',
|
|
103
|
-
value: 'companies',
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
name: 'Folder',
|
|
107
|
-
value: 'folders',
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
name: 'Relation',
|
|
111
|
-
value: 'relations',
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
name: 'User',
|
|
115
|
-
value: 'users',
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
name: 'Website',
|
|
119
|
-
value: 'websites',
|
|
120
|
-
},
|
|
121
|
-
],
|
|
122
|
-
default: 'companies',
|
|
123
|
-
},
|
|
70
|
+
resources_1.resourceProperty,
|
|
124
71
|
...descriptions.activityLogsOperations,
|
|
125
72
|
...descriptions.apiInfoOperations,
|
|
126
73
|
...descriptions.articlesOperations,
|
|
@@ -180,16 +127,30 @@ class Hudu {
|
|
|
180
127
|
getAssetLayouts: asset_layouts_1.getAssetLayouts,
|
|
181
128
|
getAssetLayoutFields: asset_layouts_1.getAssetLayoutFields,
|
|
182
129
|
getAssetLayoutFieldValues: asset_layouts_1.getAssetLayoutFieldValues,
|
|
130
|
+
getAssets: assets_1.getAssets,
|
|
183
131
|
},
|
|
184
132
|
};
|
|
185
133
|
}
|
|
186
134
|
async execute() {
|
|
187
135
|
const items = this.getInputData();
|
|
188
136
|
const returnData = [];
|
|
137
|
+
if (debugConfig_1.DEBUG_CONFIG.NODE_INPUT) {
|
|
138
|
+
(0, debugConfig_1.debugLog)('Node Execution - Input Items', {
|
|
139
|
+
itemCount: items.length,
|
|
140
|
+
items,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
189
143
|
for (let i = 0; i < items.length; i++) {
|
|
190
|
-
const resource = this.getNodeParameter('resource', i);
|
|
191
|
-
const operation = this.getNodeParameter('operation', i);
|
|
192
144
|
try {
|
|
145
|
+
const resource = this.getNodeParameter('resource', i);
|
|
146
|
+
const operation = this.getNodeParameter('operation', i);
|
|
147
|
+
if (debugConfig_1.DEBUG_CONFIG.NODE_INPUT) {
|
|
148
|
+
(0, debugConfig_1.debugLog)(`Node Execution - Item ${i}`, {
|
|
149
|
+
resource,
|
|
150
|
+
operation,
|
|
151
|
+
itemData: items[i],
|
|
152
|
+
});
|
|
153
|
+
}
|
|
193
154
|
let responseData = {};
|
|
194
155
|
switch (resource) {
|
|
195
156
|
case 'activity_logs':
|
|
@@ -274,9 +235,21 @@ class Hudu {
|
|
|
274
235
|
...item,
|
|
275
236
|
pairedItem: { item: i },
|
|
276
237
|
}));
|
|
238
|
+
if (debugConfig_1.DEBUG_CONFIG.NODE_OUTPUT) {
|
|
239
|
+
(0, debugConfig_1.debugLog)(`Node Execution - Item ${i} Output`, {
|
|
240
|
+
executionData,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
277
243
|
returnData.push(...executionData);
|
|
278
244
|
}
|
|
279
245
|
catch (error) {
|
|
246
|
+
if (debugConfig_1.DEBUG_CONFIG.NODE_OUTPUT) {
|
|
247
|
+
(0, debugConfig_1.debugLog)(`Node Execution - Item ${i} Error`, {
|
|
248
|
+
error,
|
|
249
|
+
message: error instanceof Error ? error.message : String(error),
|
|
250
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
251
|
+
}, 'error');
|
|
252
|
+
}
|
|
280
253
|
if (this.continueOnFail()) {
|
|
281
254
|
const executionErrorData = this.helpers.returnJsonArray({ error: error.message }).map((item) => ({
|
|
282
255
|
...item,
|
|
@@ -288,6 +261,12 @@ class Hudu {
|
|
|
288
261
|
throw error;
|
|
289
262
|
}
|
|
290
263
|
}
|
|
264
|
+
if (debugConfig_1.DEBUG_CONFIG.NODE_OUTPUT) {
|
|
265
|
+
(0, debugConfig_1.debugLog)('Node Execution - Final Output', {
|
|
266
|
+
returnDataCount: returnData.length,
|
|
267
|
+
returnData,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
291
270
|
return [returnData];
|
|
292
271
|
}
|
|
293
272
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hudu.node.js","sourceRoot":"","sources":["../../../../src/nodes/Hudu/Hudu.node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,+CAAkD;
|
|
1
|
+
{"version":3,"file":"Hudu.node.js","sourceRoot":"","sources":["../../../../src/nodes/Hudu/Hudu.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
{
|
|
2
|
-
"node": "n8n-nodes-base.hudu",
|
|
3
|
-
"nodeVersion": "1.0",
|
|
4
|
-
"codexVersion": "1.0",
|
|
5
|
-
"categories": ["Documentation"],
|
|
6
|
-
"resources": {
|
|
7
|
-
"credentialDocumentation": [
|
|
8
|
-
{
|
|
9
|
-
"url": "https://support.hudu.com/hc/en-us/articles/11422780787735-REST-API"
|
|
10
|
-
}
|
|
11
|
-
],
|
|
12
|
-
"primaryDocumentation": [
|
|
13
|
-
{
|
|
14
|
-
"url": "https://github.com/msoukhomlinov/n8n-nodes-hudu"
|
|
15
|
-
}
|
|
16
|
-
]
|
|
17
|
-
}
|
|
18
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"node": "n8n-nodes-base.hudu",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": ["Documentation"],
|
|
6
|
+
"resources": {
|
|
7
|
+
"credentialDocumentation": [
|
|
8
|
+
{
|
|
9
|
+
"url": "https://support.hudu.com/hc/en-us/articles/11422780787735-REST-API"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"primaryDocumentation": [
|
|
13
|
+
{
|
|
14
|
+
"url": "https://github.com/msoukhomlinov/n8n-nodes-hudu"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
}
|