@flatmark-dev/n8n-nodes-flatmark 0.0.0-bootstrap.0 → 1.0.0

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 ADDED
@@ -0,0 +1,32 @@
1
+ # @flatmark-dev/n8n-nodes-flatmark
2
+
3
+ An [n8n](https://n8n.io) community node for the [flatmark API](https://flatmark.dev).
4
+
5
+ Document to Markdown API and MCP server for PDF, Word, PowerPoint, Excel and HTML. OCR queue for large files. Hosted in Germany.
6
+
7
+ flatmark converts PDF, Word, PowerPoint, Excel and HTML to Markdown over a REST API and an MCP server. Files up to 8 MB convert in one call with MarkItDown. Files up to 25 MB and 200 pages go through a queue that runs Docling with OCR and table detection. The queue returns Markdown and a JSON structure file, by polling or a signed webhook. The servers are in Germany. The free plan has 100 credits a month and needs no card.
8
+
9
+ ## Installation
10
+
11
+ In n8n, open **Settings > Community Nodes**, choose **Install** and enter `@flatmark-dev/n8n-nodes-flatmark`.
12
+
13
+ ## Credentials
14
+
15
+ [Create an API key](https://flatmark.dev/go/n8n?to=/app/api-keys), then add an **flatmark API** credential in n8n and paste the key.
16
+
17
+ ## Operations
18
+
19
+ | Resource | Operation | What it does |
20
+ |---|---|---|
21
+ | Account | Get Me | Your plan, remaining requests, and remaining credits |
22
+ | Job | Get Job | Get one queued job by ID |
23
+ | Job | List Jobs | List your queued jobs, newest first |
24
+ | Flatmark | Convert Document | Convert a document to Markdown in one call |
25
+ | Flatmark | Submit Conversion Job | Queue a document for conversion with OCR and tables |
26
+ | Flatmark | Get Conversion Result | Download a queued job's Markdown or JSON |
27
+
28
+ File inputs read an input binary field (default `data`). JSON answers become the item; text and XML answers come back as `data`; files as the binary field `data`. Queued jobs are polled until they finish.
29
+
30
+ ## Support
31
+
32
+ https://flatmark.dev/support
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class FlatmarkApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ icon: Icon;
6
+ documentationUrl: string;
7
+ properties: INodeProperties[];
8
+ authenticate: IAuthenticateGeneric;
9
+ test: ICredentialTestRequest;
10
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlatmarkApi = void 0;
4
+ class FlatmarkApi {
5
+ constructor() {
6
+ this.name = 'flatmarkApi';
7
+ this.displayName = 'Flatmark API';
8
+ this.icon = { light: 'file:../icons/flatmark.svg', dark: 'file:../icons/flatmark.svg' };
9
+ this.documentationUrl = 'https://flatmark.dev/go/n8n?to=/app/api-keys';
10
+ this.properties = [
11
+ {
12
+ displayName: 'API Key',
13
+ name: 'apiKey',
14
+ type: 'string',
15
+ typeOptions: { password: true },
16
+ default: '',
17
+ required: true,
18
+ description: 'Create a key at https://flatmark.dev/go/n8n?to=/app/api-keys',
19
+ },
20
+ ];
21
+ this.authenticate = {
22
+ type: 'generic',
23
+ properties: {
24
+ headers: {
25
+ 'X-API-Key': '={{$credentials.apiKey}}',
26
+ },
27
+ },
28
+ };
29
+ this.test = {
30
+ request: {
31
+ baseURL: 'https://api.flatmark.dev',
32
+ url: '/v1/me',
33
+ method: 'GET',
34
+ },
35
+ };
36
+ }
37
+ }
38
+ exports.FlatmarkApi = FlatmarkApi;
39
+ //# sourceMappingURL=FlatmarkApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlatmarkApi.credentials.js","sourceRoot":"","sources":["../../credentials/FlatmarkApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,WAAW;IAAxB;QACC,SAAI,GAAG,aAAa,CAAC;QAErB,gBAAW,GAAG,cAAc,CAAC;QAE7B,SAAI,GAAS,EAAE,KAAK,EAAE,4BAA4B,EAAE,IAAI,EAAE,4BAA4B,EAAE,CAAC;QAEzF,qBAAgB,GAAG,8CAA8C,CAAC;QAElE,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,8DAA8D;aAC3E;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,WAAW,EAAE,0BAA0B;iBACvC;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,0BAA0B;gBACnC,GAAG,EAAE,QAAQ;gBACb,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AArCD,kCAqCC"}
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none" aria-hidden="true">
2
+ <path d="M5 14 12 6 20 15 27 7" stroke="#9064ec" stroke-width="3" stroke-linecap="square" stroke-linejoin="miter"/>
3
+ <path d="M5 25h22" stroke="#9064ec" stroke-width="3" stroke-linecap="square"/>
4
+ </svg>
@@ -0,0 +1,5 @@
1
+ import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class Flatmark implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,512 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Flatmark = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const BASE_URL = 'https://api.flatmark.dev';
6
+ const CREDENTIAL = 'flatmarkApi';
7
+ const POLL_SECONDS = 5;
8
+ const POLL_LIMIT = 360;
9
+ function jsonValue(value) {
10
+ return typeof value === 'string' ? (0, n8n_workflow_1.jsonParse)(value) : value;
11
+ }
12
+ async function request(ctx, method, path, qs = {}, body) {
13
+ return (await ctx.helpers.httpRequestWithAuthentication.call(ctx, CREDENTIAL, {
14
+ method,
15
+ url: BASE_URL + path,
16
+ qs,
17
+ arrayFormat: 'repeat',
18
+ body,
19
+ encoding: 'arraybuffer',
20
+ returnFullResponse: true,
21
+ }));
22
+ }
23
+ async function send(ctx, op, i) {
24
+ var _a, _b;
25
+ const extra = ctx.getNodeParameter('additionalFields', i, {});
26
+ const binary = (_a = ctx.getInputData()[i].binary) !== null && _a !== void 0 ? _a : {};
27
+ let path = op.path;
28
+ const qs = {};
29
+ const json = {};
30
+ const form = new FormData();
31
+ for (const field of op.fields) {
32
+ const topLevel = field.required || field.location === 'file';
33
+ const value = topLevel ? ctx.getNodeParameter(field.param, i, '') : extra[field.param];
34
+ if (value === undefined || value === '')
35
+ continue;
36
+ if (field.location === 'file') {
37
+ const property = String(value);
38
+ if (!field.required && !binary[property])
39
+ continue;
40
+ const meta = ctx.helpers.assertBinaryData(i, property);
41
+ const buffer = await ctx.helpers.getBinaryDataBuffer(i, property);
42
+ form.append(field.name, new Blob([new Uint8Array(buffer)], { type: meta.mimeType }), (_b = meta.fileName) !== null && _b !== void 0 ? _b : field.name);
43
+ }
44
+ else if (field.location === 'path') {
45
+ path = path.replace(`{${field.name}}`, encodeURIComponent(String(value)));
46
+ }
47
+ else if (field.location === 'query') {
48
+ qs[field.name] =
49
+ field.type === 'array'
50
+ ? String(value)
51
+ .split(',')
52
+ .map((v) => v.trim())
53
+ .filter((v) => v)
54
+ : value;
55
+ }
56
+ else if (field.location === 'json') {
57
+ json[field.name] = (field.type === 'object' || field.type === 'array' ? jsonValue(value) : value);
58
+ }
59
+ else {
60
+ form.append(field.name, String(value));
61
+ }
62
+ }
63
+ const body = op.body === 'form' ? form : op.body === 'json' ? json : undefined;
64
+ return await request(ctx, op.method, path, qs, body);
65
+ }
66
+ function onePath(path, id) {
67
+ return path.replace(/\{[^}]+\}/, encodeURIComponent(id));
68
+ }
69
+ async function decode(ctx, response, i) {
70
+ var _a, _b;
71
+ const header = response.headers['content-type'];
72
+ const mimeType = String(Array.isArray(header) ? header[0] : (header !== null && header !== void 0 ? header : '')).split(';')[0].trim();
73
+ const data = Buffer.from(response.body);
74
+ if (mimeType === 'application/json' || mimeType.endsWith('+json')) {
75
+ const parsed = (0, n8n_workflow_1.jsonParse)(data.toString('utf8'));
76
+ const item = parsed && typeof parsed === 'object' && !Array.isArray(parsed)
77
+ ? parsed
78
+ : { data: parsed };
79
+ return { json: item, pairedItem: { item: i } };
80
+ }
81
+ if (mimeType.startsWith('text/') || mimeType.endsWith('xml')) {
82
+ return { json: { data: data.toString('utf8'), mimeType }, pairedItem: { item: i } };
83
+ }
84
+ const disposition = String((_a = response.headers['content-disposition']) !== null && _a !== void 0 ? _a : '');
85
+ const fileName = (_b = /filename="?([^";]+)"?/.exec(disposition)) === null || _b === void 0 ? void 0 : _b[1];
86
+ const file = await ctx.helpers.prepareBinaryData(data, fileName, mimeType || undefined);
87
+ return {
88
+ json: { fileName: file.fileName, mimeType: file.mimeType, fileSize: file.fileSize },
89
+ binary: { data: file },
90
+ pairedItem: { item: i },
91
+ };
92
+ }
93
+ async function runJob(ctx, job, submitted, i) {
94
+ var _a, _b, _c;
95
+ const id = String((_b = (_a = submitted.job_id) !== null && _a !== void 0 ? _a : submitted.id) !== null && _b !== void 0 ? _b : '');
96
+ const poll = OPERATIONS[job.poll];
97
+ const result = OPERATIONS[job.result];
98
+ for (let attempt = 0; attempt < POLL_LIMIT; attempt++) {
99
+ await (0, n8n_workflow_1.sleep)(POLL_SECONDS * 1000);
100
+ const state = (await decode(ctx, await request(ctx, poll.method, onePath(poll.path, id)), i))
101
+ .json;
102
+ if (state.status === 'succeeded') {
103
+ return await request(ctx, result.method, onePath(result.path, id));
104
+ }
105
+ if (state.status === 'failed') {
106
+ throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), `Job ${id} failed: ${String((_c = state.error) !== null && _c !== void 0 ? _c : '')}`, {
107
+ itemIndex: i,
108
+ });
109
+ }
110
+ }
111
+ throw new n8n_workflow_1.NodeOperationError(ctx.getNode(), `Job ${id} did not finish in time`, { itemIndex: i });
112
+ }
113
+ const OPERATIONS = {
114
+ get_me: {
115
+ method: 'GET',
116
+ path: '/v1/me',
117
+ body: 'none',
118
+ fields: [],
119
+ },
120
+ get_job: {
121
+ method: 'GET',
122
+ path: '/v1/jobs/{job_id}',
123
+ body: 'none',
124
+ fields: [
125
+ {
126
+ name: 'job_id',
127
+ param: 'jobId',
128
+ location: 'path',
129
+ type: 'string',
130
+ required: true,
131
+ },
132
+ ],
133
+ },
134
+ list_jobs: {
135
+ method: 'GET',
136
+ path: '/v1/jobs',
137
+ body: 'none',
138
+ fields: [
139
+ {
140
+ name: 'limit',
141
+ param: 'limit',
142
+ location: 'query',
143
+ type: 'integer',
144
+ required: false,
145
+ },
146
+ {
147
+ name: 'cursor',
148
+ param: 'cursor',
149
+ location: 'query',
150
+ type: 'string',
151
+ required: false,
152
+ },
153
+ ],
154
+ },
155
+ convert_document: {
156
+ method: 'POST',
157
+ path: '/v1/convert',
158
+ body: 'form',
159
+ fields: [
160
+ {
161
+ name: 'file',
162
+ param: 'binaryPropertyName',
163
+ location: 'file',
164
+ type: 'string',
165
+ required: true,
166
+ },
167
+ ],
168
+ },
169
+ submit_conversion_job: {
170
+ method: 'POST',
171
+ path: '/v1/convert/jobs',
172
+ body: 'form',
173
+ fields: [
174
+ {
175
+ name: 'file',
176
+ param: 'binaryPropertyName',
177
+ location: 'file',
178
+ type: 'string',
179
+ required: true,
180
+ },
181
+ {
182
+ name: 'webhook_url',
183
+ param: 'webhookUrl',
184
+ location: 'form',
185
+ type: 'string',
186
+ required: false,
187
+ },
188
+ ],
189
+ job: {
190
+ poll: 'get_job',
191
+ result: 'get_conversion_result',
192
+ },
193
+ },
194
+ get_conversion_result: {
195
+ method: 'GET',
196
+ path: '/v1/convert/jobs/{job_id}/result',
197
+ body: 'none',
198
+ fields: [
199
+ {
200
+ name: 'job_id',
201
+ param: 'jobId',
202
+ location: 'path',
203
+ type: 'string',
204
+ required: true,
205
+ },
206
+ {
207
+ name: 'format',
208
+ param: 'format',
209
+ location: 'query',
210
+ type: 'string',
211
+ required: false,
212
+ },
213
+ ],
214
+ },
215
+ };
216
+ class Flatmark {
217
+ constructor() {
218
+ this.description = {
219
+ displayName: 'flatmark',
220
+ name: 'flatmark',
221
+ icon: {
222
+ light: 'file:../../icons/flatmark.svg',
223
+ dark: 'file:../../icons/flatmark.svg',
224
+ },
225
+ group: ['transform'],
226
+ version: 1,
227
+ subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
228
+ description: 'Document to Markdown API and MCP server for PDF, Word, PowerPoint, Excel and HTML. OCR queue for large files. Hosted in Germany.',
229
+ defaults: {
230
+ name: 'flatmark',
231
+ },
232
+ usableAsTool: true,
233
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
234
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
235
+ credentials: [
236
+ {
237
+ name: 'flatmarkApi',
238
+ required: true,
239
+ },
240
+ ],
241
+ properties: [
242
+ {
243
+ displayName: 'Resource',
244
+ name: 'resource',
245
+ type: 'options',
246
+ noDataExpression: true,
247
+ options: [
248
+ {
249
+ name: 'Account',
250
+ value: 'account',
251
+ },
252
+ {
253
+ name: 'Flatmark',
254
+ value: 'flatmark',
255
+ },
256
+ {
257
+ name: 'Job',
258
+ value: 'job',
259
+ },
260
+ ],
261
+ default: 'flatmark',
262
+ },
263
+ {
264
+ displayName: 'Operation',
265
+ name: 'operation',
266
+ type: 'options',
267
+ noDataExpression: true,
268
+ displayOptions: {
269
+ show: {
270
+ resource: ['account'],
271
+ },
272
+ },
273
+ options: [
274
+ {
275
+ name: 'Get Me',
276
+ value: 'get_me',
277
+ description: 'Your plan, remaining requests, and remaining credits',
278
+ action: 'Get me',
279
+ },
280
+ ],
281
+ default: 'get_me',
282
+ },
283
+ {
284
+ displayName: 'Operation',
285
+ name: 'operation',
286
+ type: 'options',
287
+ noDataExpression: true,
288
+ displayOptions: {
289
+ show: {
290
+ resource: ['job'],
291
+ },
292
+ },
293
+ options: [
294
+ {
295
+ name: 'Get Job',
296
+ value: 'get_job',
297
+ description: 'Get one queued job by ID',
298
+ action: 'Get job',
299
+ },
300
+ {
301
+ name: 'List Jobs',
302
+ value: 'list_jobs',
303
+ description: 'List your queued jobs, newest first',
304
+ action: 'List jobs',
305
+ },
306
+ ],
307
+ default: 'get_job',
308
+ },
309
+ {
310
+ displayName: 'Operation',
311
+ name: 'operation',
312
+ type: 'options',
313
+ noDataExpression: true,
314
+ displayOptions: {
315
+ show: {
316
+ resource: ['flatmark'],
317
+ },
318
+ },
319
+ options: [
320
+ {
321
+ name: 'Convert Document',
322
+ value: 'convert_document',
323
+ description: 'Convert a document to Markdown in one call',
324
+ action: 'Convert document',
325
+ },
326
+ {
327
+ name: 'Get Conversion Result',
328
+ value: 'get_conversion_result',
329
+ description: 'Download a queued job\'s Markdown or JSON',
330
+ action: 'Get conversion result',
331
+ },
332
+ {
333
+ name: 'Submit Conversion Job',
334
+ value: 'submit_conversion_job',
335
+ description: 'Queue a document for conversion with OCR and tables',
336
+ action: 'Submit conversion job',
337
+ },
338
+ ],
339
+ default: 'convert_document',
340
+ },
341
+ {
342
+ displayName: 'Job ID',
343
+ name: 'jobId',
344
+ type: 'string',
345
+ default: '',
346
+ required: true,
347
+ displayOptions: {
348
+ show: {
349
+ resource: ['job'],
350
+ operation: ['get_job'],
351
+ },
352
+ },
353
+ description: 'The \'job_id\' from the submit response',
354
+ },
355
+ {
356
+ displayName: 'Additional Fields',
357
+ name: 'additionalFields',
358
+ type: 'collection',
359
+ placeholder: 'Add Field',
360
+ default: {},
361
+ displayOptions: {
362
+ show: {
363
+ resource: ['job'],
364
+ operation: ['list_jobs'],
365
+ },
366
+ },
367
+ options: [
368
+ {
369
+ displayName: 'Cursor',
370
+ name: 'cursor',
371
+ type: 'string',
372
+ default: '',
373
+ description: 'The \'next_cursor\' from the previous page',
374
+ },
375
+ {
376
+ displayName: 'Limit',
377
+ name: 'limit',
378
+ type: 'number',
379
+ default: 50,
380
+ typeOptions: {
381
+ minValue: 1,
382
+ },
383
+ description: 'Max number of results to return',
384
+ },
385
+ ],
386
+ },
387
+ {
388
+ displayName: 'Input Binary Field',
389
+ name: 'binaryPropertyName',
390
+ type: 'string',
391
+ default: 'data',
392
+ hint: 'The name of the input binary field containing the file to be uploaded',
393
+ required: true,
394
+ displayOptions: {
395
+ show: {
396
+ resource: ['flatmark'],
397
+ operation: ['convert_document'],
398
+ },
399
+ },
400
+ description: 'The document, sent as multipart form data with its Content-Type',
401
+ },
402
+ {
403
+ displayName: 'Input Binary Field',
404
+ name: 'binaryPropertyName',
405
+ type: 'string',
406
+ default: 'data',
407
+ hint: 'The name of the input binary field containing the file to be uploaded',
408
+ required: true,
409
+ displayOptions: {
410
+ show: {
411
+ resource: ['flatmark'],
412
+ operation: ['submit_conversion_job'],
413
+ },
414
+ },
415
+ description: 'The document, sent as multipart form data with its Content-Type',
416
+ },
417
+ {
418
+ displayName: 'Additional Fields',
419
+ name: 'additionalFields',
420
+ type: 'collection',
421
+ placeholder: 'Add Field',
422
+ default: {},
423
+ displayOptions: {
424
+ show: {
425
+ resource: ['flatmark'],
426
+ operation: ['submit_conversion_job'],
427
+ },
428
+ },
429
+ options: [
430
+ {
431
+ displayName: 'Webhook URL',
432
+ name: 'webhookUrl',
433
+ type: 'string',
434
+ default: '',
435
+ description: 'Optional. A public http or https URL that receives a POST when the job finishes.',
436
+ },
437
+ ],
438
+ },
439
+ {
440
+ displayName: 'Job ID',
441
+ name: 'jobId',
442
+ type: 'string',
443
+ default: '',
444
+ required: true,
445
+ displayOptions: {
446
+ show: {
447
+ resource: ['flatmark'],
448
+ operation: ['get_conversion_result'],
449
+ },
450
+ },
451
+ },
452
+ {
453
+ displayName: 'Additional Fields',
454
+ name: 'additionalFields',
455
+ type: 'collection',
456
+ placeholder: 'Add Field',
457
+ default: {},
458
+ displayOptions: {
459
+ show: {
460
+ resource: ['flatmark'],
461
+ operation: ['get_conversion_result'],
462
+ },
463
+ },
464
+ options: [
465
+ {
466
+ displayName: 'Format',
467
+ name: 'format',
468
+ type: 'options',
469
+ options: [
470
+ {
471
+ name: 'JSON',
472
+ value: 'json',
473
+ },
474
+ {
475
+ name: 'Markdown',
476
+ value: 'markdown',
477
+ },
478
+ ],
479
+ default: 'markdown',
480
+ description: '\'markdown\' (default) or \'JSON\' for the DoclingDocument structure file',
481
+ },
482
+ ],
483
+ },
484
+ ],
485
+ };
486
+ }
487
+ async execute() {
488
+ const items = this.getInputData();
489
+ const out = [];
490
+ for (let i = 0; i < items.length; i++) {
491
+ try {
492
+ const op = OPERATIONS[this.getNodeParameter('operation', i)];
493
+ let response = await send(this, op, i);
494
+ if (op.job) {
495
+ const submitted = (await decode(this, response, i)).json;
496
+ response = await runJob(this, op.job, submitted, i);
497
+ }
498
+ out.push(await decode(this, response, i));
499
+ }
500
+ catch (error) {
501
+ if (this.continueOnFail()) {
502
+ out.push({ json: { error: error.message }, pairedItem: { item: i } });
503
+ continue;
504
+ }
505
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error, { itemIndex: i });
506
+ }
507
+ }
508
+ return [out];
509
+ }
510
+ }
511
+ exports.Flatmark = Flatmark;
512
+ //# sourceMappingURL=Flatmark.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Flatmark.node.js","sourceRoot":"","sources":["../../../nodes/Flatmark/Flatmark.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ {
2
+ "node": "@flatmark-dev/n8n-nodes-flatmark.flatmark",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": [
6
+ "Utility"
7
+ ],
8
+ "resources": {
9
+ "credentialDocumentation": [
10
+ {
11
+ "url": "https://flatmark.dev/go/n8n?to=/app/api-keys"
12
+ }
13
+ ],
14
+ "primaryDocumentation": [
15
+ {
16
+ "url": "https://github.com/flatmark-dev/flatmark-integrations/tree/main/n8n"
17
+ }
18
+ ]
19
+ }
20
+ }