n8n-nodes-netsendo 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 (36) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +88 -0
  3. package/dist/credentials/NetSendoApi.credentials.d.ts +10 -0
  4. package/dist/credentials/NetSendoApi.credentials.js +49 -0
  5. package/dist/credentials/NetSendoApi.credentials.js.map +1 -0
  6. package/dist/icons/github.dark.svg +3 -0
  7. package/dist/icons/github.svg +3 -0
  8. package/dist/icons/netsendo.svg +19 -0
  9. package/dist/nodes/Example/Example.node.d.ts +5 -0
  10. package/dist/nodes/Example/Example.node.js +61 -0
  11. package/dist/nodes/Example/Example.node.js.map +1 -0
  12. package/dist/nodes/Example/Example.node.json +18 -0
  13. package/dist/nodes/Example/example.dark.svg +13 -0
  14. package/dist/nodes/Example/example.svg +13 -0
  15. package/dist/nodes/NetSendo/NetSendo.node.d.ts +10 -0
  16. package/dist/nodes/NetSendo/NetSendo.node.js +76 -0
  17. package/dist/nodes/NetSendo/NetSendo.node.js.map +1 -0
  18. package/dist/nodes/NetSendo/NetSendo.node.json +14 -0
  19. package/dist/nodes/NetSendo/listSearch/getLists.d.ts +2 -0
  20. package/dist/nodes/NetSendo/listSearch/getLists.js +13 -0
  21. package/dist/nodes/NetSendo/listSearch/getLists.js.map +1 -0
  22. package/dist/nodes/NetSendo/resources/list/index.d.ts +2 -0
  23. package/dist/nodes/NetSendo/resources/list/index.js +243 -0
  24. package/dist/nodes/NetSendo/resources/list/index.js.map +1 -0
  25. package/dist/nodes/NetSendo/resources/subscriber/index.d.ts +2 -0
  26. package/dist/nodes/NetSendo/resources/subscriber/index.js +494 -0
  27. package/dist/nodes/NetSendo/resources/subscriber/index.js.map +1 -0
  28. package/dist/nodes/NetSendo/resources/tag/index.d.ts +2 -0
  29. package/dist/nodes/NetSendo/resources/tag/index.js +139 -0
  30. package/dist/nodes/NetSendo/resources/tag/index.js.map +1 -0
  31. package/dist/nodes/NetSendo/shared/transport.d.ts +2 -0
  32. package/dist/nodes/NetSendo/shared/transport.js +23 -0
  33. package/dist/nodes/NetSendo/shared/transport.js.map +1 -0
  34. package/dist/package.json +54 -0
  35. package/dist/tsconfig.tsbuildinfo +1 -0
  36. package/package.json +54 -0
package/LICENSE.md ADDED
@@ -0,0 +1,19 @@
1
+ Copyright 2022 n8n
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,88 @@
1
+ ![NetSendo Logo](https://gregciupek.com/wp-content/uploads/2025/12/Logo-NetSendo-1700-x-500-px.png)
2
+
3
+ # n8n-nodes-netsendo
4
+
5
+ This is an n8n community node for **[NetSendo](https://netsendo.com)** – a powerful, self-hosted email marketing automation platform.
6
+
7
+ This node allows you to automate your email marketing workflows directly within [n8n](https://n8n.io), connecting NetSendo with thousands of other apps and services.
8
+
9
+ ---
10
+
11
+ ## 🚀 Features
12
+
13
+ With the NetSendo node, you can seamlessly interact with your Netsendo instance to:
14
+
15
+ - **Manage Subscribers**: Create, update, delete, and search for subscribers.
16
+ - **Manage Lists**: Retrieve contact lists and their subscribers.
17
+ - **Manage Tags**: Access and organize your tags.
18
+ - **Dynamic Dropdowns**: Automatically loads your contact lists for easy selection.
19
+
20
+ ## 📦 Installation
21
+
22
+ To install this node in your n8n instance:
23
+
24
+ 1. Go to **Settings > Community Nodes**.
25
+ 2. Select **Install**.
26
+ 3. Enter `n8n-nodes-netsendo` as the package name.
27
+ 4. Click **Install**.
28
+
29
+ Alternatively, if you are running n8n via Docker or npm, you can install it manually:
30
+
31
+ ```bash
32
+ npm install n8n-nodes-netsendo
33
+ ```
34
+
35
+ ## 🔐 Credentials Setup
36
+
37
+ To use this node, you need to connect it to your NetSendo installation.
38
+
39
+ 1. In n8n, go to **Credentials** and click **Create New**.
40
+ 2. Search for **NetSendo API**.
41
+ 3. Enter the following details:
42
+ - **Base URL**: The URL of your NetSendo installation (e.g., `https://premium.gregciupek.com`). _Do not include `/api/v1` at the end._
43
+ - **API Key**: Your personal API token. You can generate this in your NetSendo dashboard under **Settings > API Keys** (format: `ns_live_...`).
44
+
45
+ ## 🛠️ Operations
46
+
47
+ ### 📂 Resource: List
48
+
49
+ Manage your contact lists.
50
+
51
+ - **Get Many**: Retrieve all contact lists (supports pagination and sorting).
52
+ - **Get**: Get details of a specific list by ID.
53
+ - **Get Subscribers**: Fetch all subscribers belonging to a specific list.
54
+
55
+ ### 👤 Resource: Subscriber
56
+
57
+ Manage your email subscribers.
58
+
59
+ - **Get Many**: Retrieve a list of subscribers.
60
+ - _Filters available_: Contact List, Status (Active, Inactive, etc.), Pagination, Sorting.
61
+ - **Get**: Get details of a single subscriber by ID.
62
+ - **Get by Email**: Find a subscriber using their email address.
63
+ - **Create**: Add a new subscriber.
64
+ - _Required_: Email, Contact List.
65
+ - _Optional_: First Name, Last Name, Phone, Status, Source, Tags.
66
+ - **Update**: Update an existing subscriber's data.
67
+ - **Delete**: Remove a subscriber (soft delete).
68
+
69
+ ### 🏷️ Resource: Tag
70
+
71
+ Access your tags.
72
+
73
+ - **Get Many**: Retrieve all available tags.
74
+ - **Get**: Get details of a specific tag by ID.
75
+
76
+ ## 📚 Resources
77
+
78
+ - **[NetSendo Website](https://netsendo.com)**
79
+ - **[NetSendo Repository](https://github.com/NetSendo/NetSendo/)**
80
+ - **[n8n Website](https://n8n.io)**
81
+
82
+ ## 📄 License
83
+
84
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE.md) file for details.
85
+
86
+ ---
87
+
88
+ _Built with ❤️ for the NetSendo Community._
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class NetSendoApi 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,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NetSendoApi = void 0;
4
+ class NetSendoApi {
5
+ constructor() {
6
+ this.name = 'netSendoApi';
7
+ this.displayName = 'NetSendo API';
8
+ this.icon = 'file:../icons/netsendo.svg';
9
+ this.documentationUrl = 'https://github.com/NetSendo/NetSendo';
10
+ this.properties = [
11
+ {
12
+ displayName: 'Base URL',
13
+ name: 'baseUrl',
14
+ type: 'string',
15
+ default: '',
16
+ placeholder: 'https://twoja-domena.pl',
17
+ description: 'Wklej domenę swojej instalacji NetSendo (bez /api/v1), np. https://premium.gregciupek.com',
18
+ required: true,
19
+ },
20
+ {
21
+ displayName: 'API Key',
22
+ name: 'apiKey',
23
+ type: 'string',
24
+ typeOptions: { password: true },
25
+ default: '',
26
+ placeholder: 'ns_live_...',
27
+ description: 'Wklej klucz API wygenerowany w NetSendo → Klucze API',
28
+ required: true,
29
+ },
30
+ ];
31
+ this.authenticate = {
32
+ type: 'generic',
33
+ properties: {
34
+ headers: {
35
+ Authorization: '=Bearer {{$credentials?.apiKey}}',
36
+ },
37
+ },
38
+ };
39
+ this.test = {
40
+ request: {
41
+ baseURL: '={{$credentials?.baseUrl.replace(/\\/$/, "")}}/api/v1',
42
+ url: '/lists',
43
+ method: 'GET',
44
+ },
45
+ };
46
+ }
47
+ }
48
+ exports.NetSendoApi = NetSendoApi;
49
+ //# sourceMappingURL=NetSendoApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetSendoApi.credentials.js","sourceRoot":"","sources":["../../credentials/NetSendoApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,WAAW;IAAxB;QACC,SAAI,GAAG,aAAa,CAAC;QAErB,gBAAW,GAAG,cAAc,CAAC;QAE7B,SAAI,GAAS,4BAA4B,CAAC;QAE1C,qBAAgB,GAAG,sCAAsC,CAAC;QAE1D,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,yBAAyB;gBACtC,WAAW,EACV,2FAA2F;gBAC5F,QAAQ,EAAE,IAAI;aACd;YACD;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,WAAW,EAAE,aAAa;gBAC1B,WAAW,EAAE,sDAAsD;gBACnE,QAAQ,EAAE,IAAI;aACd;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,kCAAkC;iBACjD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,uDAAuD;gBAChE,GAAG,EAAE,QAAQ;gBACb,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AAhDD,kCAgDC"}
@@ -0,0 +1,3 @@
1
+ <svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M20.0165 0C8.94791 0 0 9.01388 0 20.1653C0 29.0792 5.73324 36.6246 13.6868 39.2952C14.6812 39.496 15.0454 38.8613 15.0454 38.3274C15.0454 37.8599 15.0126 36.2575 15.0126 34.5879C9.4445 35.79 8.28498 32.1841 8.28498 32.1841C7.39015 29.847 6.06429 29.2463 6.06429 29.2463C4.24185 28.011 6.19704 28.011 6.19704 28.011C8.21861 28.1446 9.27938 30.081 9.27938 30.081C11.0686 33.1522 13.9518 32.2844 15.1118 31.7502C15.2773 30.4481 15.8079 29.5467 16.3713 29.046C11.9303 28.5785 7.25781 26.8425 7.25781 19.0967C7.25781 16.8932 8.05267 15.0905 9.31216 13.6884C9.11344 13.1877 8.41732 11.1174 9.51128 8.34644C9.51128 8.34644 11.2014 7.81217 15.0122 10.4164C16.6438 9.97495 18.3263 9.7504 20.0165 9.74851C21.7067 9.74851 23.4295 9.98246 25.0205 10.4164C28.8317 7.81217 30.5218 8.34644 30.5218 8.34644C31.6158 11.1174 30.9192 13.1877 30.7205 13.6884C32.0132 15.0905 32.7753 16.8932 32.7753 19.0967C32.7753 26.8425 28.1028 28.5449 23.6287 29.046C24.358 29.6802 24.9873 30.882 24.9873 32.7851C24.9873 35.4893 24.9545 37.6596 24.9545 38.327C24.9545 38.8613 25.3192 39.496 26.3132 39.2956C34.2667 36.6242 39.9999 29.0792 39.9999 20.1653C40.0327 9.01388 31.052 0 20.0165 0Z" fill="white"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M20.0165 0C8.94791 0 0 9.01388 0 20.1653C0 29.0792 5.73324 36.6246 13.6868 39.2952C14.6812 39.496 15.0454 38.8613 15.0454 38.3274C15.0454 37.8599 15.0126 36.2575 15.0126 34.5879C9.4445 35.79 8.28498 32.1841 8.28498 32.1841C7.39015 29.847 6.06429 29.2463 6.06429 29.2463C4.24185 28.011 6.19704 28.011 6.19704 28.011C8.21861 28.1446 9.27938 30.081 9.27938 30.081C11.0686 33.1522 13.9518 32.2844 15.1118 31.7502C15.2773 30.4481 15.8079 29.5467 16.3713 29.046C11.9303 28.5785 7.25781 26.8425 7.25781 19.0967C7.25781 16.8932 8.05267 15.0905 9.31216 13.6884C9.11344 13.1877 8.41732 11.1174 9.51128 8.34644C9.51128 8.34644 11.2014 7.81217 15.0122 10.4164C16.6438 9.97495 18.3263 9.7504 20.0165 9.74851C21.7067 9.74851 23.4295 9.98246 25.0205 10.4164C28.8317 7.81217 30.5218 8.34644 30.5218 8.34644C31.6158 11.1174 30.9192 13.1877 30.7205 13.6884C32.0132 15.0905 32.7753 16.8932 32.7753 19.0967C32.7753 26.8425 28.1028 28.5449 23.6287 29.046C24.358 29.6802 24.9873 30.882 24.9873 32.7851C24.9873 35.4893 24.9545 37.6596 24.9545 38.327C24.9545 38.8613 25.3192 39.496 26.3132 39.2956C34.2667 36.6242 39.9999 29.0792 39.9999 20.1653C40.0327 9.01388 31.052 0 20.0165 0Z" fill="#24292F"/>
3
+ </svg>
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
2
+ <!-- Brand color: Lime Green -->
3
+ <!-- Left Bar -->
4
+ <rect x="10" y="16" width="3" height="32" rx="1.5" fill="#84cc16"/>
5
+
6
+ <!-- Right Bar -->
7
+ <rect x="51" y="16" width="3" height="32" rx="1.5" fill="#84cc16"/>
8
+
9
+ <!-- Envelope Body -->
10
+ <rect x="20" y="18" width="24" height="20" rx="2" fill="#84cc16"/>
11
+
12
+ <!-- Envelope Flap (White lines for negative space effect) -->
13
+ <!-- Top V -->
14
+ <path d="M20 18L32 28L44 18" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
15
+
16
+ <!-- Bottom Folds -->
17
+ <path d="M20 38L29 30" stroke="white" stroke-width="2" stroke-linecap="round"/>
18
+ <path d="M44 38L35 30" stroke="white" stroke-width="2" stroke-linecap="round"/>
19
+ </svg>
@@ -0,0 +1,5 @@
1
+ import type { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class Example implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Example = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ class Example {
6
+ constructor() {
7
+ this.description = {
8
+ displayName: 'Example',
9
+ name: 'example',
10
+ icon: { light: 'file:example.svg', dark: 'file:example.dark.svg' },
11
+ group: ['input'],
12
+ version: 1,
13
+ description: 'Basic Example Node',
14
+ defaults: {
15
+ name: 'Example',
16
+ },
17
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
18
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
19
+ usableAsTool: true,
20
+ properties: [
21
+ {
22
+ displayName: 'My String',
23
+ name: 'myString',
24
+ type: 'string',
25
+ default: '',
26
+ placeholder: 'Placeholder value',
27
+ description: 'The description text',
28
+ },
29
+ ],
30
+ };
31
+ }
32
+ async execute() {
33
+ const items = this.getInputData();
34
+ let item;
35
+ let myString;
36
+ for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
37
+ try {
38
+ myString = this.getNodeParameter('myString', itemIndex, '');
39
+ item = items[itemIndex];
40
+ item.json.myString = myString;
41
+ }
42
+ catch (error) {
43
+ if (this.continueOnFail()) {
44
+ items.push({ json: this.getInputData(itemIndex)[0].json, error, pairedItem: itemIndex });
45
+ }
46
+ else {
47
+ if (error.context) {
48
+ error.context.itemIndex = itemIndex;
49
+ throw error;
50
+ }
51
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), error, {
52
+ itemIndex,
53
+ });
54
+ }
55
+ }
56
+ }
57
+ return [items];
58
+ }
59
+ }
60
+ exports.Example = Example;
61
+ //# sourceMappingURL=Example.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Example.node.js","sourceRoot":"","sources":["../../../nodes/Example/Example.node.ts"],"names":[],"mappings":";;;AAMA,+CAAuE;AAEvE,MAAa,OAAO;IAApB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,uBAAuB,EAAE;YAClE,KAAK,EAAE,CAAC,OAAO,CAAC;YAChB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,oBAAoB;YACjC,QAAQ,EAAE;gBACT,IAAI,EAAE,SAAS;aACf;YACD,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE;gBAGX;oBACC,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,WAAW,EAAE,mBAAmB;oBAChC,WAAW,EAAE,sBAAsB;iBACnC;aACD;SACD,CAAC;IA2CH,CAAC;IArCA,KAAK,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAElC,IAAI,IAAwB,CAAC;QAC7B,IAAI,QAAgB,CAAC;QAKrB,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YAC/D,IAAI,CAAC;gBACJ,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAW,CAAC;gBACtE,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;gBAExB,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAGhB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC1F,CAAC;qBAAM,CAAC;oBAEP,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAGnB,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;wBACpC,MAAM,KAAK,CAAC;oBACb,CAAC;oBACD,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;wBACnD,SAAS;qBACT,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;CACD;AArED,0BAqEC"}
@@ -0,0 +1,18 @@
1
+ {
2
+ "node": "n8n-nodes-example",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Development", "Developer Tools"],
6
+ "resources": {
7
+ "credentialDocumentation": [
8
+ {
9
+ "url": "https://github.com/org/repo?tab=readme-ov-file#credentials"
10
+ }
11
+ ],
12
+ "primaryDocumentation": [
13
+ {
14
+ "url": "https://github.com/org/repo?tab=readme-ov-file"
15
+ }
16
+ ]
17
+ }
18
+ }
@@ -0,0 +1,13 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="aquamarine"
2
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-cpu">
3
+ <rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect>
4
+ <rect x="9" y="9" width="6" height="6"></rect>
5
+ <line x1="9" y1="1" x2="9" y2="4"></line>
6
+ <line x1="15" y1="1" x2="15" y2="4"></line>
7
+ <line x1="9" y1="20" x2="9" y2="23"></line>
8
+ <line x1="15" y1="20" x2="15" y2="23"></line>
9
+ <line x1="20" y1="9" x2="23" y2="9"></line>
10
+ <line x1="20" y1="14" x2="23" y2="14"></line>
11
+ <line x1="1" y1="9" x2="4" y2="9"></line>
12
+ <line x1="1" y1="14" x2="4" y2="14"></line>
13
+ </svg>
@@ -0,0 +1,13 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="darkblue"
2
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-cpu">
3
+ <rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect>
4
+ <rect x="9" y="9" width="6" height="6"></rect>
5
+ <line x1="9" y1="1" x2="9" y2="4"></line>
6
+ <line x1="15" y1="1" x2="15" y2="4"></line>
7
+ <line x1="9" y1="20" x2="9" y2="23"></line>
8
+ <line x1="15" y1="20" x2="15" y2="23"></line>
9
+ <line x1="20" y1="9" x2="23" y2="9"></line>
10
+ <line x1="20" y1="14" x2="23" y2="14"></line>
11
+ <line x1="1" y1="9" x2="4" y2="9"></line>
12
+ <line x1="1" y1="14" x2="4" y2="14"></line>
13
+ </svg>
@@ -0,0 +1,10 @@
1
+ import { type INodeType, type INodeTypeDescription } from 'n8n-workflow';
2
+ import { getLists } from './listSearch/getLists';
3
+ export declare class NetSendo implements INodeType {
4
+ description: INodeTypeDescription;
5
+ methods: {
6
+ loadOptions: {
7
+ getLists: typeof getLists;
8
+ };
9
+ };
10
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NetSendo = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const list_1 = require("./resources/list");
6
+ const subscriber_1 = require("./resources/subscriber");
7
+ const tag_1 = require("./resources/tag");
8
+ const getLists_1 = require("./listSearch/getLists");
9
+ class NetSendo {
10
+ constructor() {
11
+ this.description = {
12
+ displayName: 'NetSendo',
13
+ name: 'netSendo',
14
+ icon: 'file:../../icons/netsendo.svg',
15
+ group: ['input'],
16
+ version: 1,
17
+ subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
18
+ description: 'Interact with NetSendo Email Marketing Platform',
19
+ defaults: {
20
+ name: 'NetSendo',
21
+ },
22
+ usableAsTool: true,
23
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
24
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
25
+ credentials: [
26
+ {
27
+ name: 'netSendoApi',
28
+ required: true,
29
+ },
30
+ ],
31
+ requestDefaults: {
32
+ baseURL: '={{$credentials?.baseUrl.replace(/\\/$/, "")}}/api/v1',
33
+ headers: {
34
+ Accept: 'application/json',
35
+ 'Content-Type': 'application/json',
36
+ },
37
+ },
38
+ properties: [
39
+ {
40
+ displayName: 'Resource',
41
+ name: 'resource',
42
+ type: 'options',
43
+ noDataExpression: true,
44
+ options: [
45
+ {
46
+ name: 'List',
47
+ value: 'list',
48
+ description: 'Manage contact lists',
49
+ },
50
+ {
51
+ name: 'Subscriber',
52
+ value: 'subscriber',
53
+ description: 'Manage subscribers',
54
+ },
55
+ {
56
+ name: 'Tag',
57
+ value: 'tag',
58
+ description: 'Manage tags',
59
+ },
60
+ ],
61
+ default: 'subscriber',
62
+ },
63
+ ...list_1.listDescription,
64
+ ...subscriber_1.subscriberDescription,
65
+ ...tag_1.tagDescription,
66
+ ],
67
+ };
68
+ this.methods = {
69
+ loadOptions: {
70
+ getLists: getLists_1.getLists,
71
+ },
72
+ };
73
+ }
74
+ }
75
+ exports.NetSendo = NetSendo;
76
+ //# sourceMappingURL=NetSendo.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetSendo.node.js","sourceRoot":"","sources":["../../../nodes/NetSendo/NetSendo.node.ts"],"names":[],"mappings":";;;AAAA,+CAA8F;AAC9F,2CAAmD;AACnD,uDAA+D;AAC/D,yCAAiD;AACjD,oDAAiD;AAEjD,MAAa,QAAQ;IAArB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,UAAU;YACvB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,+BAA+B;YACrC,KAAK,EAAE,CAAC,OAAO,CAAC;YAChB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE;gBACT,IAAI,EAAE,UAAU;aAChB;YACD,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,eAAe,EAAE;gBAChB,OAAO,EAAE,uDAAuD;gBAChE,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,cAAc,EAAE,kBAAkB;iBAClC;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;4BACb,WAAW,EAAE,sBAAsB;yBACnC;wBACD;4BACC,IAAI,EAAE,YAAY;4BAClB,KAAK,EAAE,YAAY;4BACnB,WAAW,EAAE,oBAAoB;yBACjC;wBACD;4BACC,IAAI,EAAE,KAAK;4BACX,KAAK,EAAE,KAAK;4BACZ,WAAW,EAAE,aAAa;yBAC1B;qBACD;oBACD,OAAO,EAAE,YAAY;iBACrB;gBACD,GAAG,sBAAe;gBAClB,GAAG,kCAAqB;gBACxB,GAAG,oBAAc;aACjB;SACD,CAAC;QAEF,YAAO,GAAG;YACT,WAAW,EAAE;gBACZ,QAAQ,EAAR,mBAAQ;aACR;SACD,CAAC;IACH,CAAC;CAAA;AAhED,4BAgEC"}
@@ -0,0 +1,14 @@
1
+ {
2
+ "node": "n8n-nodes-base.netSendo",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Marketing & Content"],
6
+ "resources": {
7
+ "primaryDocumentation": [
8
+ {
9
+ "url": "https://github.com/NetSendo/NetSendo"
10
+ }
11
+ ]
12
+ },
13
+ "alias": ["email", "newsletter", "marketing", "subscribers", "lists"]
14
+ }
@@ -0,0 +1,2 @@
1
+ import type { INodePropertyOptions, ILoadOptionsFunctions } from 'n8n-workflow';
2
+ export declare function getLists(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLists = getLists;
4
+ const transport_1 = require("../shared/transport");
5
+ async function getLists() {
6
+ const response = (await transport_1.netSendoApiRequest.call(this, 'GET', '/lists', {}, { per_page: 100 }));
7
+ const lists = response.data || [];
8
+ return lists.map((list) => ({
9
+ name: list.name,
10
+ value: list.id,
11
+ }));
12
+ }
13
+ //# sourceMappingURL=getLists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getLists.js","sourceRoot":"","sources":["../../../../nodes/NetSendo/listSearch/getLists.ts"],"names":[],"mappings":";;AAeA,4BAiBC;AA/BD,mDAAyD;AAclD,KAAK,UAAU,QAAQ;IAG7B,MAAM,QAAQ,GAAG,CAAC,MAAM,8BAAkB,CAAC,IAAI,CAC9C,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,EAAE,EACF,EAAE,QAAQ,EAAE,GAAG,EAAE,CACjB,CAA6B,CAAC;IAE/B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;IAElC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,EAAE;KACd,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const listDescription: INodeProperties[];