n8n-nodes-iterationlayer 1.0.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.
Files changed (26) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/credentials/IterationLayerApi.credentials.d.ts +8 -0
  4. package/dist/credentials/IterationLayerApi.credentials.js +35 -0
  5. package/dist/nodes/IterationLayer/IterationLayer.node.d.ts +5 -0
  6. package/dist/nodes/IterationLayer/IterationLayer.node.js +407 -0
  7. package/dist/nodes/IterationLayer/descriptions/documentExtraction.d.ts +2 -0
  8. package/dist/nodes/IterationLayer/descriptions/documentExtraction.js +187 -0
  9. package/dist/nodes/IterationLayer/descriptions/documentGeneration.d.ts +2 -0
  10. package/dist/nodes/IterationLayer/descriptions/documentGeneration.js +62 -0
  11. package/dist/nodes/IterationLayer/descriptions/documentToMarkdown.d.ts +2 -0
  12. package/dist/nodes/IterationLayer/descriptions/documentToMarkdown.js +22 -0
  13. package/dist/nodes/IterationLayer/descriptions/imageGeneration.d.ts +2 -0
  14. package/dist/nodes/IterationLayer/descriptions/imageGeneration.js +99 -0
  15. package/dist/nodes/IterationLayer/descriptions/imageTransformation.d.ts +2 -0
  16. package/dist/nodes/IterationLayer/descriptions/imageTransformation.js +364 -0
  17. package/dist/nodes/IterationLayer/descriptions/shared.d.ts +7 -0
  18. package/dist/nodes/IterationLayer/descriptions/shared.js +73 -0
  19. package/dist/nodes/IterationLayer/descriptions/sheetGeneration.d.ts +2 -0
  20. package/dist/nodes/IterationLayer/descriptions/sheetGeneration.js +73 -0
  21. package/dist/nodes/IterationLayer/helpers/binaryData.d.ts +2 -0
  22. package/dist/nodes/IterationLayer/helpers/binaryData.js +23 -0
  23. package/dist/nodes/IterationLayer/helpers/fileInput.d.ts +15 -0
  24. package/dist/nodes/IterationLayer/helpers/fileInput.js +43 -0
  25. package/dist/nodes/IterationLayer/iterationlayer.svg +7 -0
  26. package/package.json +50 -0
@@ -0,0 +1,364 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.imageTransformationProperties = void 0;
4
+ const shared_js_1 = require("./shared.js");
5
+ const OPERATION_TYPE_OPTIONS = [
6
+ { name: "Resize", value: "resize" },
7
+ { name: "Crop", value: "crop" },
8
+ { name: "Smart Crop", value: "smart_crop" },
9
+ { name: "Extend", value: "extend" },
10
+ { name: "Trim", value: "trim" },
11
+ { name: "Rotate", value: "rotate" },
12
+ { name: "Flip (Vertical)", value: "flip" },
13
+ { name: "Flop (Horizontal)", value: "flop" },
14
+ { name: "Blur", value: "blur" },
15
+ { name: "Sharpen", value: "sharpen" },
16
+ { name: "Modulate", value: "modulate" },
17
+ { name: "Tint", value: "tint" },
18
+ { name: "Grayscale", value: "grayscale" },
19
+ { name: "Invert Colors", value: "invert_colors" },
20
+ { name: "Auto Contrast", value: "auto_contrast" },
21
+ { name: "Gamma", value: "gamma" },
22
+ { name: "Opacity", value: "opacity" },
23
+ { name: "Remove Transparency", value: "remove_transparency" },
24
+ { name: "Threshold", value: "threshold" },
25
+ { name: "Denoise", value: "denoise" },
26
+ { name: "Convert Format", value: "convert" },
27
+ { name: "Upscale", value: "upscale" },
28
+ { name: "Compress to Size", value: "compress_to_size" },
29
+ { name: "Remove Background", value: "remove_background" },
30
+ ];
31
+ const FIT_OPTIONS = [
32
+ { name: "Cover", value: "cover" },
33
+ { name: "Contain", value: "contain" },
34
+ { name: "Fill", value: "fill" },
35
+ { name: "Inside", value: "inside" },
36
+ { name: "Outside", value: "outside" },
37
+ ];
38
+ const FORMAT_OPTIONS = [
39
+ { name: "PNG", value: "png" },
40
+ { name: "JPEG", value: "jpeg" },
41
+ { name: "WebP", value: "webp" },
42
+ { name: "AVIF", value: "avif" },
43
+ { name: "HEIF", value: "heif" },
44
+ ];
45
+ const UPSCALE_FACTOR_OPTIONS = [
46
+ { name: "2x", value: 2 },
47
+ { name: "3x", value: 3 },
48
+ { name: "4x", value: 4 },
49
+ ];
50
+ function withResourceDisplay(property) {
51
+ return {
52
+ ...property,
53
+ displayOptions: {
54
+ ...property.displayOptions,
55
+ show: {
56
+ ...property.displayOptions?.show,
57
+ resource: ["imageTransformation"],
58
+ },
59
+ },
60
+ };
61
+ }
62
+ exports.imageTransformationProperties = [
63
+ withResourceDisplay(shared_js_1.fileInputModeProperty),
64
+ withResourceDisplay(shared_js_1.fileBinaryPropertyNameProperty),
65
+ withResourceDisplay(shared_js_1.fileUrlProperty),
66
+ withResourceDisplay(shared_js_1.fileNameProperty),
67
+ {
68
+ displayName: "Operations",
69
+ name: "operations",
70
+ type: "fixedCollection",
71
+ typeOptions: { multipleValues: true },
72
+ default: {},
73
+ placeholder: "Add Operation",
74
+ description: "Image transformation operations to apply sequentially",
75
+ displayOptions: {
76
+ show: {
77
+ resource: ["imageTransformation"],
78
+ },
79
+ },
80
+ options: [
81
+ {
82
+ displayName: "Operation",
83
+ name: "operationValues",
84
+ values: [
85
+ {
86
+ displayName: "Type",
87
+ name: "operationType",
88
+ type: "options",
89
+ options: OPERATION_TYPE_OPTIONS,
90
+ default: "resize",
91
+ },
92
+ {
93
+ displayName: "Width (px)",
94
+ name: "widthInPx",
95
+ type: "number",
96
+ default: 800,
97
+ displayOptions: {
98
+ show: {
99
+ operationType: ["resize", "crop", "smart_crop"],
100
+ },
101
+ },
102
+ },
103
+ {
104
+ displayName: "Height (px)",
105
+ name: "heightInPx",
106
+ type: "number",
107
+ default: 600,
108
+ displayOptions: {
109
+ show: {
110
+ operationType: ["resize", "crop", "smart_crop"],
111
+ },
112
+ },
113
+ },
114
+ {
115
+ displayName: "Fit",
116
+ name: "fit",
117
+ type: "options",
118
+ options: FIT_OPTIONS,
119
+ default: "cover",
120
+ displayOptions: {
121
+ show: { operationType: ["resize"] },
122
+ },
123
+ },
124
+ {
125
+ displayName: "Left (px)",
126
+ name: "leftInPx",
127
+ type: "number",
128
+ default: 0,
129
+ displayOptions: {
130
+ show: { operationType: ["crop"] },
131
+ },
132
+ },
133
+ {
134
+ displayName: "Top (px)",
135
+ name: "topInPx",
136
+ type: "number",
137
+ default: 0,
138
+ displayOptions: {
139
+ show: { operationType: ["crop"] },
140
+ },
141
+ },
142
+ {
143
+ displayName: "Angle (Degrees)",
144
+ name: "angleInDegrees",
145
+ type: "number",
146
+ default: 90,
147
+ displayOptions: {
148
+ show: { operationType: ["rotate"] },
149
+ },
150
+ },
151
+ {
152
+ displayName: "Background Color",
153
+ name: "hexColor",
154
+ type: "string",
155
+ default: "#FFFFFF",
156
+ description: "Hex color for the background",
157
+ displayOptions: {
158
+ show: {
159
+ operationType: ["rotate", "extend", "remove_transparency", "remove_background"],
160
+ },
161
+ },
162
+ },
163
+ {
164
+ displayName: "Sigma",
165
+ name: "sigma",
166
+ type: "number",
167
+ default: 3,
168
+ displayOptions: {
169
+ show: { operationType: ["blur", "sharpen"] },
170
+ },
171
+ },
172
+ {
173
+ displayName: "Brightness",
174
+ name: "brightness",
175
+ type: "number",
176
+ default: 1,
177
+ description: "Brightness multiplier (1 = unchanged)",
178
+ displayOptions: {
179
+ show: { operationType: ["modulate"] },
180
+ },
181
+ },
182
+ {
183
+ displayName: "Saturation",
184
+ name: "saturation",
185
+ type: "number",
186
+ default: 1,
187
+ description: "Saturation multiplier (1 = unchanged)",
188
+ displayOptions: {
189
+ show: { operationType: ["modulate"] },
190
+ },
191
+ },
192
+ {
193
+ displayName: "Hue",
194
+ name: "hue",
195
+ type: "number",
196
+ default: 0,
197
+ description: "Hue rotation in degrees",
198
+ displayOptions: {
199
+ show: { operationType: ["modulate"] },
200
+ },
201
+ },
202
+ {
203
+ displayName: "Tint Color",
204
+ name: "tintHexColor",
205
+ type: "string",
206
+ default: "#FF0000",
207
+ displayOptions: {
208
+ show: { operationType: ["tint"] },
209
+ },
210
+ },
211
+ {
212
+ displayName: "Gamma",
213
+ name: "gamma",
214
+ type: "number",
215
+ default: 2.2,
216
+ displayOptions: {
217
+ show: { operationType: ["gamma"] },
218
+ },
219
+ },
220
+ {
221
+ displayName: "Opacity (%)",
222
+ name: "opacityInPercent",
223
+ type: "number",
224
+ default: 50,
225
+ typeOptions: { minValue: 0, maxValue: 100 },
226
+ displayOptions: {
227
+ show: { operationType: ["opacity"] },
228
+ },
229
+ },
230
+ {
231
+ displayName: "Threshold",
232
+ name: "thresholdValue",
233
+ type: "number",
234
+ default: 128,
235
+ displayOptions: {
236
+ show: { operationType: ["threshold", "trim"] },
237
+ },
238
+ },
239
+ {
240
+ displayName: "Grayscale",
241
+ name: "isGrayscale",
242
+ type: "boolean",
243
+ default: true,
244
+ displayOptions: {
245
+ show: { operationType: ["threshold"] },
246
+ },
247
+ },
248
+ {
249
+ displayName: "Denoise Size",
250
+ name: "denoiseSize",
251
+ type: "number",
252
+ default: 3,
253
+ displayOptions: {
254
+ show: { operationType: ["denoise"] },
255
+ },
256
+ },
257
+ {
258
+ displayName: "Output Format",
259
+ name: "convertFormat",
260
+ type: "options",
261
+ options: FORMAT_OPTIONS,
262
+ default: "webp",
263
+ displayOptions: {
264
+ show: { operationType: ["convert"] },
265
+ },
266
+ },
267
+ {
268
+ displayName: "Quality",
269
+ name: "quality",
270
+ type: "number",
271
+ default: 85,
272
+ typeOptions: { minValue: 1, maxValue: 100 },
273
+ description: "Output quality (1-100)",
274
+ displayOptions: {
275
+ show: { operationType: ["convert"] },
276
+ },
277
+ },
278
+ {
279
+ displayName: "Upscale Factor",
280
+ name: "upscaleFactor",
281
+ type: "options",
282
+ options: UPSCALE_FACTOR_OPTIONS,
283
+ default: 2,
284
+ displayOptions: {
285
+ show: { operationType: ["upscale"] },
286
+ },
287
+ },
288
+ {
289
+ displayName: "Max File Size (Bytes)",
290
+ name: "maxFileSizeInBytes",
291
+ type: "number",
292
+ default: 500_000,
293
+ description: "Target maximum file size in bytes",
294
+ displayOptions: {
295
+ show: { operationType: ["compress_to_size"] },
296
+ },
297
+ },
298
+ {
299
+ displayName: "Top (px)",
300
+ name: "extendTopInPx",
301
+ type: "number",
302
+ default: 0,
303
+ displayOptions: {
304
+ show: { operationType: ["extend"] },
305
+ },
306
+ },
307
+ {
308
+ displayName: "Bottom (px)",
309
+ name: "extendBottomInPx",
310
+ type: "number",
311
+ default: 0,
312
+ displayOptions: {
313
+ show: { operationType: ["extend"] },
314
+ },
315
+ },
316
+ {
317
+ displayName: "Left (px)",
318
+ name: "extendLeftInPx",
319
+ type: "number",
320
+ default: 0,
321
+ displayOptions: {
322
+ show: { operationType: ["extend"] },
323
+ },
324
+ },
325
+ {
326
+ displayName: "Right (px)",
327
+ name: "extendRightInPx",
328
+ type: "number",
329
+ default: 0,
330
+ displayOptions: {
331
+ show: { operationType: ["extend"] },
332
+ },
333
+ },
334
+ ],
335
+ },
336
+ ],
337
+ },
338
+ {
339
+ displayName: "Async Mode",
340
+ name: "isAsync",
341
+ type: "boolean",
342
+ default: false,
343
+ description: "Whether to process asynchronously. Results will be delivered to the webhook URL.",
344
+ displayOptions: {
345
+ show: {
346
+ resource: ["imageTransformation"],
347
+ },
348
+ },
349
+ },
350
+ {
351
+ displayName: "Webhook URL",
352
+ name: "webhookUrl",
353
+ type: "string",
354
+ default: "",
355
+ placeholder: "https://your-app.com/webhooks/result",
356
+ description: "HTTPS URL for async result delivery",
357
+ displayOptions: {
358
+ show: {
359
+ resource: ["imageTransformation"],
360
+ isAsync: [true],
361
+ },
362
+ },
363
+ },
364
+ ];
@@ -0,0 +1,7 @@
1
+ import type { INodeProperties } from "n8n-workflow";
2
+ export declare const fileInputModeProperty: INodeProperties;
3
+ export declare const fileBinaryPropertyNameProperty: INodeProperties;
4
+ export declare const fileUrlProperty: INodeProperties;
5
+ export declare const fileNameProperty: INodeProperties;
6
+ export declare const asyncModeProperty: INodeProperties;
7
+ export declare const webhookUrlProperty: INodeProperties;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.webhookUrlProperty = exports.asyncModeProperty = exports.fileNameProperty = exports.fileUrlProperty = exports.fileBinaryPropertyNameProperty = exports.fileInputModeProperty = void 0;
4
+ exports.fileInputModeProperty = {
5
+ displayName: "File Input Mode",
6
+ name: "fileInputMode",
7
+ type: "options",
8
+ options: [
9
+ {
10
+ name: "Binary Data from Previous Node",
11
+ value: "binaryData",
12
+ },
13
+ {
14
+ name: "URL",
15
+ value: "url",
16
+ },
17
+ ],
18
+ default: "binaryData",
19
+ description: "How to provide the input file",
20
+ };
21
+ exports.fileBinaryPropertyNameProperty = {
22
+ displayName: "Binary Property",
23
+ name: "fileBinaryPropertyName",
24
+ type: "string",
25
+ default: "data",
26
+ description: "The name of the binary property containing the file data",
27
+ displayOptions: {
28
+ show: {
29
+ fileInputMode: ["binaryData"],
30
+ },
31
+ },
32
+ };
33
+ exports.fileUrlProperty = {
34
+ displayName: "File URL",
35
+ name: "fileUrl",
36
+ type: "string",
37
+ default: "",
38
+ placeholder: "https://example.com/document.pdf",
39
+ description: "Publicly accessible URL of the file",
40
+ displayOptions: {
41
+ show: {
42
+ fileInputMode: ["url"],
43
+ },
44
+ },
45
+ };
46
+ exports.fileNameProperty = {
47
+ displayName: "File Name",
48
+ name: "fileName",
49
+ type: "string",
50
+ default: "",
51
+ placeholder: "document.pdf",
52
+ description: "Name of the file including extension (e.g., invoice.pdf). Used to determine the file type.",
53
+ };
54
+ exports.asyncModeProperty = {
55
+ displayName: "Async Mode",
56
+ name: "isAsync",
57
+ type: "boolean",
58
+ default: false,
59
+ description: "Whether to process the request asynchronously. When enabled, the API returns immediately and delivers results to the webhook URL.",
60
+ };
61
+ exports.webhookUrlProperty = {
62
+ displayName: "Webhook URL",
63
+ name: "webhookUrl",
64
+ type: "string",
65
+ default: "",
66
+ placeholder: "https://your-app.com/webhooks/result",
67
+ description: "HTTPS URL where the result will be delivered when processing is complete",
68
+ displayOptions: {
69
+ show: {
70
+ isAsync: [true],
71
+ },
72
+ },
73
+ };
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from "n8n-workflow";
2
+ export declare const sheetGenerationProperties: INodeProperties[];
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sheetGenerationProperties = void 0;
4
+ const FORMAT_OPTIONS = [
5
+ { name: "XLSX", value: "xlsx" },
6
+ { name: "CSV", value: "csv" },
7
+ { name: "Markdown", value: "markdown" },
8
+ ];
9
+ exports.sheetGenerationProperties = [
10
+ {
11
+ displayName: "Output Format",
12
+ name: "sheetFormat",
13
+ type: "options",
14
+ options: FORMAT_OPTIONS,
15
+ default: "xlsx",
16
+ description: "The spreadsheet format to generate",
17
+ displayOptions: {
18
+ show: {
19
+ resource: ["sheetGeneration"],
20
+ },
21
+ },
22
+ },
23
+ {
24
+ displayName: "Sheets (JSON)",
25
+ name: "sheetsJson",
26
+ type: "json",
27
+ default: '[\n {\n "name": "Sheet 1",\n "columns": [\n {\n "name": "Name"\n },\n {\n "name": "Amount"\n }\n ],\n "rows": [\n [\n "Item A",\n 100\n ],\n [\n "Item B",\n 200\n ]\n ]\n }\n]',
28
+ description: "JSON array of sheets. Each sheet has a name, columns (with name and optional width), and rows of cell values. See https://iterationlayer.com/docs/sheet-generation for the full schema.",
29
+ displayOptions: {
30
+ show: {
31
+ resource: ["sheetGeneration"],
32
+ },
33
+ },
34
+ },
35
+ {
36
+ displayName: "Styles (JSON)",
37
+ name: "sheetStylesJson",
38
+ type: "json",
39
+ default: "{}",
40
+ description: "Optional JSON object with header and body cell styles.",
41
+ displayOptions: {
42
+ show: {
43
+ resource: ["sheetGeneration"],
44
+ },
45
+ },
46
+ },
47
+ {
48
+ displayName: "Async Mode",
49
+ name: "isAsync",
50
+ type: "boolean",
51
+ default: false,
52
+ description: "Whether to process asynchronously. Results will be delivered to the webhook URL.",
53
+ displayOptions: {
54
+ show: {
55
+ resource: ["sheetGeneration"],
56
+ },
57
+ },
58
+ },
59
+ {
60
+ displayName: "Webhook URL",
61
+ name: "webhookUrl",
62
+ type: "string",
63
+ default: "",
64
+ placeholder: "https://your-app.com/webhooks/result",
65
+ description: "HTTPS URL for async result delivery",
66
+ displayOptions: {
67
+ show: {
68
+ resource: ["sheetGeneration"],
69
+ isAsync: [true],
70
+ },
71
+ },
72
+ },
73
+ ];
@@ -0,0 +1,2 @@
1
+ import type { IBinaryKeyData, IExecuteFunctions } from "n8n-workflow";
2
+ export declare function toBinaryOutput(executeFunctions: IExecuteFunctions, base64Buffer: string, mimeType: string, fileBaseName: string): Promise<IBinaryKeyData>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toBinaryOutput = toBinaryOutput;
4
+ const EXTENSION_BY_MIME_TYPE = {
5
+ "image/png": "png",
6
+ "image/jpeg": "jpg",
7
+ "image/webp": "webp",
8
+ "image/avif": "avif",
9
+ "image/heif": "heif",
10
+ "image/tiff": "tiff",
11
+ "image/gif": "gif",
12
+ "application/pdf": "pdf",
13
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "docx",
14
+ "application/epub+zip": "epub",
15
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation": "pptx",
16
+ };
17
+ async function toBinaryOutput(executeFunctions, base64Buffer, mimeType, fileBaseName) {
18
+ const extension = EXTENSION_BY_MIME_TYPE[mimeType] ?? "bin";
19
+ const fileName = `${fileBaseName}.${extension}`;
20
+ const buffer = Buffer.from(base64Buffer, "base64");
21
+ const binaryData = await executeFunctions.helpers.prepareBinaryData(buffer, fileName, mimeType);
22
+ return { data: binaryData };
23
+ }
@@ -0,0 +1,15 @@
1
+ import type { IExecuteFunctions } from "n8n-workflow";
2
+ interface FileInputBase64 {
3
+ type: "base64";
4
+ name: string;
5
+ base64: string;
6
+ }
7
+ interface FileInputUrl {
8
+ type: "url";
9
+ name: string;
10
+ url: string;
11
+ }
12
+ type FileInput = FileInputBase64 | FileInputUrl;
13
+ export declare function getFileInput(executeFunctions: IExecuteFunctions, itemIndex: number): Promise<FileInput>;
14
+ export declare function getMultipleFileInputs(executeFunctions: IExecuteFunctions, itemIndex: number): Promise<FileInput[]>;
15
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFileInput = getFileInput;
4
+ exports.getMultipleFileInputs = getMultipleFileInputs;
5
+ async function getFileInput(executeFunctions, itemIndex) {
6
+ const fileInputMode = executeFunctions.getNodeParameter("fileInputMode", itemIndex);
7
+ const fileName = executeFunctions.getNodeParameter("fileName", itemIndex);
8
+ if (fileInputMode === "url") {
9
+ const fileUrl = executeFunctions.getNodeParameter("fileUrl", itemIndex);
10
+ return { type: "url", name: fileName, url: fileUrl };
11
+ }
12
+ const binaryPropertyName = executeFunctions.getNodeParameter("fileBinaryPropertyName", itemIndex);
13
+ const binaryData = await executeFunctions.helpers.getBinaryDataBuffer(itemIndex, binaryPropertyName);
14
+ return {
15
+ type: "base64",
16
+ name: fileName,
17
+ base64: binaryData.toString("base64"),
18
+ };
19
+ }
20
+ async function getMultipleFileInputs(executeFunctions, itemIndex) {
21
+ const filesCollection = executeFunctions.getNodeParameter("files", itemIndex, {});
22
+ const fileEntries = filesCollection.fileValues ?? [];
23
+ const fileInputs = [];
24
+ for (const entry of fileEntries) {
25
+ if (entry.fileInputMode === "url") {
26
+ fileInputs.push({
27
+ type: "url",
28
+ name: entry.fileName,
29
+ url: entry.fileUrl ?? "",
30
+ });
31
+ }
32
+ else {
33
+ const binaryPropertyName = entry.fileBinaryPropertyName ?? "data";
34
+ const binaryData = await executeFunctions.helpers.getBinaryDataBuffer(itemIndex, binaryPropertyName);
35
+ fileInputs.push({
36
+ type: "base64",
37
+ name: entry.fileName,
38
+ base64: binaryData.toString("base64"),
39
+ });
40
+ }
41
+ }
42
+ return fileInputs;
43
+ }
@@ -0,0 +1,7 @@
1
+ <svg viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="500" height="500" rx="170" fill="black"/>
3
+ <rect x="50" y="50" width="400" height="400" rx="140" fill="white"/>
4
+ <rect x="100" y="100" width="300" height="300" rx="90" fill="black"/>
5
+ <rect x="150" y="150" width="200" height="200" rx="60" fill="white"/>
6
+ <rect x="200" y="200" width="100" height="100" rx="30" fill="black"/>
7
+ </svg>
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "n8n-nodes-iterationlayer",
3
+ "version": "1.0.1",
4
+ "description": "n8n community node for the Iteration Layer API — document extraction, image transformation, image generation, and document generation.",
5
+ "keywords": [
6
+ "n8n-community-node-package"
7
+ ],
8
+ "license": "MIT",
9
+ "author": {
10
+ "name": "Iteration Layer",
11
+ "email": "support@iterationlayer.com"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/iterationlayer/n8n-nodes-iterationlayer"
16
+ },
17
+ "homepage": "https://iterationlayer.com/docs/n8n",
18
+ "main": "index.js",
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "n8n": {
23
+ "n8nNodesApiVersion": 1,
24
+ "credentials": [
25
+ "dist/credentials/IterationLayerApi.credentials.js"
26
+ ],
27
+ "nodes": [
28
+ "dist/nodes/IterationLayer/IterationLayer.node.js"
29
+ ]
30
+ },
31
+ "scripts": {
32
+ "build": "tsc -p tsconfig.json && cp src/nodes/IterationLayer/iterationlayer.svg dist/nodes/IterationLayer/",
33
+ "typecheck": "tsc --noEmit",
34
+ "lint": "biome check src __tests__",
35
+ "format": "biome format --write src __tests__ *.ts *.json",
36
+ "format:check": "biome format src __tests__ *.ts *.json",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest"
39
+ },
40
+ "peerDependencies": {
41
+ "n8n-workflow": ">=1.0.0"
42
+ },
43
+ "devDependencies": {
44
+ "@biomejs/biome": "2.4.6",
45
+ "@types/node": "22.19.15",
46
+ "n8n-workflow": "1.72.0",
47
+ "typescript": "5.8.3",
48
+ "vitest": "4.0.18"
49
+ }
50
+ }