n8n-nodes-ume-v4 4.5.13 → 4.5.14

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.
@@ -138,71 +138,109 @@ class UmeSocialSeeding {
138
138
  }
139
139
 
140
140
  // Add service-specific parameters
141
- for (const parameter of serviceData.parameters) {
141
+ // First, get all dynamic parameters that might be count_server_1, count_server_2, etc.
142
+ const allParameterNames = [];
143
+ serviceData.parameters.forEach(param => {
144
+ allParameterNames.push(param.name);
145
+ });
146
+
147
+ // Add server-specific count parameters if this service has servers
148
+ if (serviceData.servers && serviceData.parameters.find(p => p.name === 'count')) {
149
+ const serverParam = serviceData.parameters.find(p => p.name === 'server');
150
+ if (serverParam && serverParam.options) {
151
+ serverParam.options.forEach(serverOption => {
152
+ allParameterNames.push(`count_${serverOption.value}`);
153
+ });
154
+ }
155
+ }
156
+
157
+ // Now process all parameters (both static and dynamic)
158
+ for (const parameterName of allParameterNames) {
159
+ // Find the original parameter definition
160
+ let parameter = serviceData.parameters.find(p => p.name === parameterName);
161
+
162
+ // Check if this is a server-specific count parameter
163
+ if (parameterName.startsWith('count_') && !parameter) {
164
+ parameter = {
165
+ name: parameterName,
166
+ type: 'number',
167
+ displayName: `Số lượng (${parameterName})`
168
+ };
169
+ }
170
+
171
+ if (!parameter) continue;
172
+
142
173
  if (parameter.type === 'string') {
143
- const value = this.getNodeParameter(parameter.name, itemIndex, "");
144
- if (parameter.name === 'uid') {
174
+ const value = this.getNodeParameter(parameterName, itemIndex, "");
175
+ if (parameterName === 'uid') {
145
176
  // Extract ID from URL for UID services
146
177
  const extractedValue = (0, UmeSocialSeedingHelpers_1.extractIdFromUrl)(value.trim() || '', serviceName);
147
- formBody[parameter.name] = extractedValue;
178
+ formBody[parameterName] = extractedValue;
148
179
  }
149
- else if (parameter.name === 'url') {
180
+ else if (parameterName === 'url') {
150
181
  // For URL services, send the URL as-is without extraction
151
- formBody[parameter.name] = value.trim();
182
+ formBody[parameterName] = value.trim();
152
183
  }
153
- else if (parameter.name === 'link') {
184
+ else if (parameterName === 'link') {
154
185
  // For Instagram, TikTok, YouTube - send the URL as-is without extraction
155
- formBody[parameter.name] = value.trim();
186
+ formBody[parameterName] = value.trim();
156
187
  }
157
- else if (parameter.name === 'note') {
188
+ else if (parameterName === 'note') {
158
189
  // Set default note if empty
159
- formBody[parameter.name] = value.trim() || "Auto-generated by n8n UME Social Seeding";
190
+ formBody[parameterName] = value.trim() || "Auto-generated by n8n UME Social Seeding";
160
191
  }
161
- else if (parameter.name === 'comments') {
192
+ else if (parameterName === 'comments') {
162
193
  // Process comment list - convert multiline to API format
163
194
  const processedComments = (0, UmeSocialSeedingHelpers_1.processCommentList)(value.trim() || '');
164
195
  if (processedComments) {
165
- formBody[parameter.name] = processedComments;
196
+ formBody[parameterName] = processedComments;
166
197
  }
167
198
  }
168
- else if (parameter.name === 'list_comment') {
199
+ else if (parameterName === 'list_comment') {
169
200
  // Process comment list - convert multiline to API format
170
201
  const processedComments = (0, UmeSocialSeedingHelpers_1.processCommentList)(value.trim() || '');
171
202
  if (processedComments) {
172
- formBody[parameter.name] = processedComments;
203
+ formBody[parameterName] = processedComments;
173
204
  }
174
205
  }
175
206
  else if (value && value.trim() !== "") {
176
- formBody[parameter.name] = value.trim();
207
+ formBody[parameterName] = value.trim();
177
208
  }
178
209
  }
179
210
  else if (parameter.type === 'textarea') {
180
- const value = this.getNodeParameter(parameter.name, itemIndex, "");
181
- if (parameter.name === 'list_comment') {
211
+ const value = this.getNodeParameter(parameterName, itemIndex, "");
212
+ if (parameterName === 'list_comment') {
182
213
  // Process comment list - convert multiline to API format
183
214
  const processedComments = (0, UmeSocialSeedingHelpers_1.processCommentList)(value.trim());
184
215
  if (processedComments) {
185
- formBody[parameter.name] = processedComments;
216
+ formBody[parameterName] = processedComments;
186
217
  }
187
218
  }
188
- else if (parameter.name === 'uid') {
219
+ else if (parameterName === 'uid') {
189
220
  // Extract ID from URL for UID services
190
221
  const extractedValue = (0, UmeSocialSeedingHelpers_1.extractIdFromUrl)(value.trim() || '', serviceName);
191
- formBody[parameter.name] = extractedValue;
222
+ formBody[parameterName] = extractedValue;
192
223
  }
193
- else if (parameter.name === 'url') {
224
+ else if (parameterName === 'url') {
194
225
  // For URL services, send the URL as-is without extraction
195
- formBody[parameter.name] = value.trim();
226
+ formBody[parameterName] = value.trim();
196
227
  }
197
228
  else if (value && value.trim() !== "") {
198
- formBody[parameter.name] = value.trim();
229
+ formBody[parameterName] = value.trim();
199
230
  }
200
231
  }
201
232
  else if (parameter.type === 'number') {
202
- let value = this.getNodeParameter(parameter.name, itemIndex);
233
+ let value = this.getNodeParameter(parameterName, itemIndex);
203
234
 
204
- // Handle count parameter with server-specific MIN validation
205
- if (parameter.name === 'count' && selectedServerInfo) {
235
+ // Handle server-specific count parameters (count_server_1, count_server_2, etc.)
236
+ if (parameterName.startsWith('count_') && selectedServerInfo) {
237
+ // This is a server-specific count parameter, get the actual value
238
+ if (value !== undefined && value !== null && !isNaN(Number(value))) {
239
+ formBody['count'] = Number(value).toString();
240
+ }
241
+ }
242
+ // Handle regular count parameter (fallback for services without server-specific counts)
243
+ else if (parameterName === 'count' && selectedServerInfo) {
206
244
  // If no value provided or value is less than server MIN, use server MIN
207
245
  if (value === undefined || value === null || isNaN(Number(value)) || Number(value) < selectedServerInfo.minQuantity) {
208
246
  const originalValue = value;
@@ -227,16 +265,21 @@ class UmeSocialSeeding {
227
265
  server: selectedServer
228
266
  };
229
267
  }
230
- }
231
268
 
232
- if (value !== undefined && value !== null && !isNaN(Number(value))) {
233
- formBody[parameter.name] = Number(value).toString();
269
+ if (value !== undefined && value !== null && !isNaN(Number(value))) {
270
+ formBody['count'] = Number(value).toString();
271
+ }
272
+ } else {
273
+ // Regular number parameter (not count)
274
+ if (value !== undefined && value !== null && !isNaN(Number(value))) {
275
+ formBody[parameterName] = Number(value).toString();
276
+ }
234
277
  }
235
278
  }
236
279
  else if (parameter.type === 'options') {
237
- const value = this.getNodeParameter(parameter.name, itemIndex, "");
280
+ const value = this.getNodeParameter(parameterName, itemIndex, "");
238
281
  if (value && value.trim() !== "") {
239
- formBody[parameter.name] = value.trim();
282
+ formBody[parameterName] = value.trim();
240
283
  }
241
284
  }
242
285
  }
@@ -115,37 +115,37 @@ function getDynamicProperties() {
115
115
  },
116
116
  };
117
117
 
118
- // Add dynamic default value for count parameter based on selected server
118
+ // Add server-specific count parameters (one for each server)
119
119
  if (parameter.name === 'count' && serverParam && serverParam.options) {
120
- // Create default value that depends on selected server
121
- paramProperty.default = serverParam.default || parameter.default || 50;
122
-
123
- // Add logic to update default when server changes
124
- paramProperty.displayOptions.show = {
125
- ...paramProperty.displayOptions.show,
126
- server: serverParam.options.map(opt => opt.value)
127
- };
128
-
129
- // Add special property to handle server-specific defaults
130
- paramProperty.typeOptions = parameter.typeOptions || {};
131
-
132
- // Set default to the MIN value of the first server
133
- if (serverParam.options.length > 0) {
134
- const firstServer = serverParam.options[0];
120
+ // Instead of one count parameter, create server-specific ones
121
+ serverParam.options.forEach((serverOption) => {
135
122
  const serverInfo = serviceData.servers?.find(s =>
136
- s.id === firstServer.value || s.server_id === firstServer.value
123
+ s.id === serverOption.value || s.server_id === serverOption.value
137
124
  );
138
- if (serverInfo) {
139
- paramProperty.default = serverInfo.minQuantity || parameter.default || 50;
140
- // Update typeOptions to match server range
141
- if (parameter.typeOptions) {
142
- const maxFromServers = Math.max(...serviceData.servers.map(s => s.maxQuantity || 0));
143
- const minFromServers = Math.min(...serviceData.servers.map(s => s.minQuantity || 0));
144
- paramProperty.typeOptions.minValue = minFromServers;
145
- paramProperty.typeOptions.maxValue = maxFromServers;
146
- }
147
- }
148
- }
125
+
126
+ const serverSpecificCount = {
127
+ ...parameter,
128
+ name: `count_${serverOption.value}`,
129
+ displayName: `Số lượng (${serverOption.name})`,
130
+ default: serverInfo?.minQuantity || parameter.default || 50,
131
+ typeOptions: {
132
+ minValue: serverInfo?.minQuantity || parameter.typeOptions?.minValue || 1,
133
+ maxValue: serverInfo?.maxQuantity || parameter.typeOptions?.maxValue || 999999999
134
+ },
135
+ displayOptions: {
136
+ show: {
137
+ platform: [platformKey],
138
+ service: [serviceName],
139
+ server: [serverOption.value]
140
+ },
141
+ },
142
+ description: `Số lượng cần tăng (${serverOption.name}: ${serverInfo?.minQuantity || 'N/A'} - ${serverInfo?.maxQuantity || 'N/A'})`,
143
+ };
144
+ serviceParameters.push(serverSpecificCount);
145
+ });
146
+
147
+ // Skip adding the original count parameter
148
+ continue;
149
149
  }
150
150
 
151
151
  serviceParameters.push(paramProperty);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-ume-v4",
3
- "version": "4.5.13",
3
+ "version": "4.5.14",
4
4
  "description": "UME Social Seeding Services for n8n - Version 4 with updated features",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",