n8n-nodes-linq 0.1.16 → 3.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/LICENSE.md CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Alex
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Alex
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
package/README.md CHANGED
@@ -1,193 +1,194 @@
1
- # n8n-nodes-linq
2
-
3
- Linq Partner API (v2) community node for n8n. This node lets you manage chats, messages, phone numbers, webhooks, and contacts in Linq from your n8n workflows.
4
-
5
- - Package: `n8n-nodes-linq`
6
- - Node icon: included (SVG)
7
- - API version: v2
8
- - Auth: Integration Token (`X-LINQ-INTEGRATION-TOKEN`)
9
-
10
- ## Installation (in n8n)
11
-
12
- - Using the n8n UI:
13
- 1) Settings → Community Nodes → Install
14
- 2) Enter: `n8n-nodes-linq`
15
- 3) Restart n8n if prompted
16
-
17
- - Headless / environment variable:
18
- - Add `n8n-nodes-linq` to `N8N_COMMUNITY_PACKAGES` (or install with npm in your instance) and restart n8n.
19
-
20
- ## Credentials
21
-
22
- Create a new credential of type "Linq API" and set your Integration Token:
23
-
24
- - Header used: `X-LINQ-INTEGRATION-TOKEN: <your token>`
25
- - The field is hidden in the UI (password type).
26
-
27
- Where it's defined:
28
- - [class LinqApi implements ICredentialType](credentials/LinqApi.credentials.ts:1)
29
-
30
- ## Node usage
31
-
32
- Add the "Linq" node to your workflow. The node provides Resources and Operations that map 1:1 to the documented Linq Partner API endpoints.
33
-
34
- - Node implementation:
35
- - [class Linq implements INodeType](nodes/Linq/Linq.node.ts:1)
36
- - Icon is configured at the node-level: `icon: 'file:linq.svg'`
37
- - SVG file: [linq.svg](nodes/Linq/linq.svg:1)
38
-
39
- ### Supported resources and operations
40
-
41
- The node implements all endpoints from your Linq Partner API documentation (v2):
42
-
43
- - Resource: Chat
44
- - Operations:
45
- - Get Many → GET `/chats` (with pagination, optional `phone_number`)
46
- - Get One → GET `/chats/:id`
47
- - Find → GET `/chats/find` (by `phone_number`)
48
- - Create → POST `/chats` (supports group chats via `phone_numbers[]`, and optional `send_from`, and initial `message.text`)
49
- - Share Contact → POST `/chats/share-contact` (feature must be enabled by Linq)
50
-
51
- - Resource: Chat Message
52
- - Operations:
53
- - Get Many → GET `/chat_messages?chat_id=:chatId`
54
- - Get One → GET `/chat_messages/:id`
55
- - Create → POST `/chat_messages` (`chat_id`, `text`)
56
- - Delete → DELETE `/chat_messages/:id`
57
- - Edit → POST `/chat_messages/:id/edit` (`text`)
58
- - React → POST `/chat_messages/:id/react` (`reaction`)
59
- - Get Reaction → GET `/chat_messages/:id/reaction`
60
-
61
- - Resource: Phone Number
62
- - Operations:
63
- - Get Many → GET `/phone_numbers`
64
- - Check iMessage Availability GET `/phone_numbers/:phoneNumber/check_imessage`
65
-
66
- - Resource: Webhook Subscription
67
- - Operations:
68
- - Get Many → GET `/webhook_subscriptions`
69
- - Get One → GET `/webhook_subscriptions/:id`
70
- - Create → POST `/webhook_subscriptions`
71
- - Update → PUT `/webhook_subscriptions/:id`
72
- - Delete → DELETE `/webhook_subscriptions/:id`
73
-
74
- - Resource: Contact
75
- - Operations:
76
- - Create → POST `/contacts`
77
- - Get One → GET `/contacts/:id`
78
- - Update → PUT `/contacts/:id`
79
- - Delete → DELETE `/contacts/:id`
80
-
81
- ### Linq Trigger Node
82
-
83
- Add the "Linq Trigger" node to automatically start workflows when Linq events occur. The node automatically registers a webhook with Linq when the workflow is activated.
84
-
85
- - Supported Events:
86
- - Message Sent (`message.sent`)
87
- - Message Received (`message.received`)
88
- - Message Read (`message.read`)
89
- - Call Completed (`call.completed`)
90
- - Contact Created (`contact.created`)
91
- - Contact Updated (`contact.updated`)
92
- - Contact Deleted (`contact.deleted`)
93
-
94
- - Configuration:
95
- 1. Add the "Linq Trigger" node to your workflow
96
- 2. Select which events should trigger the workflow
97
- 3. Activate the workflow (this registers the webhook with Linq)
98
- 4. Linq will send events to your workflow when they occur
99
-
100
- - Security:
101
- - The node verifies the signature of incoming events using HMAC-SHA256
102
- - Requires the same Linq API credentials as the main node
103
-
104
- ### Example workflows
105
-
106
- 1) Send a group message
107
- - Resource: Chat
108
- - Operation: Create
109
- - Fields:
110
- - Send From (optional): `+13175551234`
111
- - Display Name (optional): `Project A`
112
- - Phone Numbers: `+13341234567, +13347654321`
113
- - Message Text: `Hello from n8n!`
114
-
115
- 2) Check iMessage availability
116
- - Resource: Phone Number
117
- - Operation: Check iMessage Availability
118
- - Field:
119
- - Phone Number: `+13341234567`
120
-
121
- 3) Create a contact
122
- - Resource: Contact
123
- - Operation: Create
124
- - Fields:
125
- - First Name: `John`
126
- - Last Name: `Doe`
127
- - Email: `john@example.com`
128
- - Phone Number: `+15551234567`
129
-
130
- 4) Manage webhook subscriptions
131
- - Resource: Webhook Subscription
132
- - Operation: Create
133
- - Fields:
134
- - Webhook URL: `https://example.com/webhooks/linq`
135
- - Events: `message.sent, message.received, contact.created`
136
- - Version: `2`
137
- - Active: `true`
138
-
139
- ## Development
140
-
141
- Requirements:
142
- - Node.js ≥ 20
143
- - npm or pnpm (npm commands shown below)
144
- - n8n local instance if testing end-to-end
145
-
146
- Install and build:
147
- ```bash
148
- cd n8n-nodes-linq
149
- npm install
150
- npm run build
151
- npm run lint
152
- ```
153
-
154
- Local link for testing in a local n8n:
155
- ```bash
156
- # in this folder
157
- npm link
158
- # in your n8n folder
159
- npm link n8n-nodes-linq
160
- # restart n8n, then add "Linq" node
161
- ```
162
-
163
- Project files of interest:
164
- - Node: [Linq.node.ts](nodes/Linq/Linq.node.ts:1)
165
- - Credentials: [LinqApi.credentials.ts](credentials/LinqApi.credentials.ts:1)
166
- - Gulp (copies icons): [gulpfile.js](gulpfile.js:1)
167
- - TypeScript config: [tsconfig.json](tsconfig.json:1)
168
- - Index shim: [index.js](index.js:1)
169
-
170
- ## Publishing to npm
171
-
172
- 1) Ensure metadata is correct in [package.json](package.json:1)
173
- - name: `n8n-nodes-linq`
174
- - version: increment for each release, e.g. `0.1.0`
175
- - author: `"alexautomates"`
176
- - keywords include: `n8n-community-node-package`
177
- - `files: ["dist"]` to publish only built files
178
- - `n8n` block lists built nodes and credentials in `dist/`
179
-
180
- 2) Build and publish:
181
- ```bash
182
- npm run build
183
- npm publish --access public
184
- ```
185
-
186
- 3) Users can install from the n8n UI (Community Nodes) by typing `n8n-nodes-linq`.
187
-
188
- ## Icon / Branding
189
-
190
- - Icon file is included at: [nodes/Linq/linq.svg](nodes/Linq/linq.svg:1)
191
- - Node description references it as `icon: 'file:linq.svg'`, so it renders in the n8n UI.
192
-
193
- ## License
1
+ # n8n-nodes-linq
2
+
3
+ Linq Partner API (v2) community node for n8n. This node lets you manage chats, messages (with attachments), phone numbers, webhooks, and contacts in Linq from your n8n workflows.
4
+
5
+ - Package: `n8n-nodes-linq`
6
+ - Node icon: included (SVG)
7
+ - API version: v2
8
+ - Auth: Integration Token (`X-LINQ-INTEGRATION-TOKEN`)
9
+
10
+ ## Installation (in n8n)
11
+
12
+ - Using the n8n UI:
13
+ 1) Settings → Community Nodes → Install
14
+ 2) Enter: `n8n-nodes-linq`
15
+ 3) Restart n8n if prompted
16
+
17
+ - Headless / environment variable:
18
+ - Add `n8n-nodes-linq` to `N8N_COMMUNITY_PACKAGES` (or install with npm in your instance) and restart n8n.
19
+
20
+ ## Credentials
21
+
22
+ Create a new credential of type "Linq API" and set your Integration Token:
23
+
24
+ - Header used: `X-LINQ-INTEGRATION-TOKEN: <your token>`
25
+ - The field is hidden in the UI (password type).
26
+
27
+ Where it's defined:
28
+ - [class LinqApi implements ICredentialType](credentials/LinqApi.credentials.ts:1)
29
+
30
+ ## Node usage
31
+
32
+ Add the "Linq" node to your workflow. The node provides Resources and Operations that map 1:1 to the documented Linq Partner API endpoints.
33
+
34
+ - Node implementation:
35
+ - [class Linq implements INodeType](nodes/Linq/Linq.node.ts:1)
36
+ - Icon is configured at the node-level: `icon: 'file:linq.svg'`
37
+ - SVG file: [linq.svg](nodes/Linq/linq.svg:1)
38
+
39
+ ### Supported resources and operations
40
+
41
+ The node implements all endpoints from your Linq Partner API documentation (v2):
42
+
43
+ - Resource: Chat
44
+ - Operations:
45
+ - Get Many → GET `/chats` (requires `phone_number`; pagination supported)
46
+ - Get One → GET `/chats/:id`
47
+ - Find → GET `/chats/find` (requires your `phone_number` and `phone_numbers[]` of participants)
48
+ - Create → POST `/chats` (requires `send_from`, supports group chats via `phone_numbers[]`, optional display name, initial `message.text`)
49
+ - Share Contact → POST `/chats/{chat_id}/share_contact` (chat_id required; feature must be enabled by Linq)
50
+
51
+ - Resource: Chat Message
52
+ - Operations:
53
+ - Get Many → GET `/chats/{chat_id}/chat_messages`
54
+ - Get One → GET `/chat_messages/:id`
55
+ - Create → POST `/chats/{chat_id}/chat_messages` (supports `text`, optional `attachment_urls[]`, optional `idempotency_key`)
56
+ - Delete → DELETE `/chat_messages/:id`
57
+ - Edit → POST `/chat_messages/:id/edit` (`text`)
58
+ - React → POST `/chat_messages/:id/reactions` (`reaction`)
59
+ - Get Reaction → GET `/chat_message_reactions/:reaction_id`
60
+
61
+ - Resource: Phone Number
62
+ - Operations:
63
+ - Get Many → GET `/phone_numbers`
64
+ - UpdatePUT `/phone_numbers/:id` (optional `forward_to`, optional `label`)
65
+
66
+ - Resource: Webhook Subscription
67
+ - Operations:
68
+ - Get Many → GET `/webhook_subscriptions`
69
+ - Get One → GET `/webhook_subscriptions/:id`
70
+ - Create → POST `/webhook_subscriptions`
71
+ - Update → PUT `/webhook_subscriptions/:id`
72
+ - Delete → DELETE `/webhook_subscriptions/:id`
73
+
74
+ - Resource: Contact
75
+ - Operations:
76
+ - Create → POST `/contacts`
77
+ - Get One → GET `/contacts/:id`
78
+ - Update → PUT `/contacts/:id`
79
+ - Delete → DELETE `/contacts/:id`
80
+
81
+ ### Linq Trigger Node
82
+
83
+ Add the "Linq Trigger" node to automatically start workflows when Linq events occur. The node automatically registers a webhook with Linq when the workflow is activated.
84
+
85
+ - Supported Events:
86
+ - Message Sent (`message.sent`)
87
+ - Message Received (`message.received`)
88
+ - Message Read (`message.read`)
89
+ - Call Completed (`call.completed`)
90
+ - Contact Created (`contact.created`)
91
+ - Contact Updated (`contact.updated`)
92
+ - Contact Deleted (`contact.deleted`)
93
+
94
+ - Configuration:
95
+ 1. Add the "Linq Trigger" node to your workflow
96
+ 2. Select which events should trigger the workflow
97
+ 3. Activate the workflow (this registers the webhook with Linq)
98
+ 4. Linq will send events to your workflow when they occur
99
+
100
+ - Security:
101
+ - The node verifies the signature of incoming events using HMAC-SHA256
102
+ - Requires the same Linq API credentials as the main node
103
+
104
+ ### Example workflows
105
+
106
+ 1) Send a group message
107
+ - Resource: Chat
108
+ - Operation: Create
109
+ - Fields:
110
+ - Send From (required): `+13175551234`
111
+ - Display Name (optional): `Project A`
112
+ - Phone Numbers: `+13341234567, +13347654321`
113
+ - Message Text: `Hello from n8n!`
114
+
115
+ 2) Create a contact
116
+ - Resource: Contact
117
+ - Operation: Create
118
+ - Fields:
119
+ - First Name: `John`
120
+ - Last Name: `Doe`
121
+ - Email: `john@example.com`
122
+ - Phone Number: `+15551234567`
123
+ 3) Manage webhook subscriptions
124
+ - Resource: Webhook Subscription
125
+ - Operation: Create
126
+ - Fields:
127
+ - Webhook URL: `https://example.com/webhooks/linq`
128
+ - Events: `message.sent, message.received, contact.created`
129
+ - Version: `2`
130
+ - Active: `true`
131
+
132
+ 4) Update phone number forwarding
133
+ - Resource: Phone Number
134
+ - Operation: Update
135
+ - Fields:
136
+ - Phone Number ID: `<id>`
137
+ - Forward To (optional): `+15551230000`
138
+ - Label (optional): `Support Line`
139
+
140
+ ## Development
141
+
142
+ Requirements:
143
+ - Node.js 20
144
+ - npm or pnpm (npm commands shown below)
145
+ - n8n local instance if testing end-to-end
146
+
147
+ Install and build:
148
+ ```bash
149
+ cd n8n-nodes-linq
150
+ npm install
151
+ npm run build
152
+ npm run lint
153
+ ```
154
+
155
+ Local link for testing in a local n8n:
156
+ ```bash
157
+ # in this folder
158
+ npm link
159
+ # in your n8n folder
160
+ npm link n8n-nodes-linq
161
+ # restart n8n, then add "Linq" node
162
+ ```
163
+
164
+ Project files of interest:
165
+ - Node: [Linq.node.ts](nodes/Linq/Linq.node.ts:1)
166
+ - Credentials: [LinqApi.credentials.ts](credentials/LinqApi.credentials.ts:1)
167
+ - Gulp (copies icons): [gulpfile.js](gulpfile.js:1)
168
+ - TypeScript config: [tsconfig.json](tsconfig.json:1)
169
+ - Index shim: [index.js](index.js:1)
170
+
171
+ ## Publishing to npm
172
+
173
+ 1) Ensure metadata is correct in [package.json](package.json:1)
174
+ - name: `n8n-nodes-linq`
175
+ - version: increment for each release, e.g. `0.1.0`
176
+ - author: `"alexautomates"`
177
+ - keywords include: `n8n-community-node-package`
178
+ - `files: ["dist"]` to publish only built files
179
+ - `n8n` block lists built nodes and credentials in `dist/`
180
+
181
+ 2) Build and publish:
182
+ ```bash
183
+ npm run build
184
+ npm publish --access public
185
+ ```
186
+
187
+ 3) Users can install from the n8n UI (Community Nodes) by typing `n8n-nodes-linq`.
188
+
189
+ ## Icon / Branding
190
+
191
+ - Icon file is included at: [nodes/Linq/linq.svg](nodes/Linq/linq.svg:1)
192
+ - Node description references it as `icon: 'file:linq.svg'`, so it renders in the n8n UI.
193
+
194
+ ## License
@@ -4,4 +4,12 @@ export declare class LinqApi implements ICredentialType {
4
4
  displayName: string;
5
5
  documentationUrl: string;
6
6
  properties: INodeProperties[];
7
+ authenticate: {
8
+ readonly type: "generic";
9
+ readonly properties: {
10
+ readonly headers: {
11
+ readonly Authorization: "Bearer {{$credentials.integrationToken}}";
12
+ };
13
+ };
14
+ };
7
15
  }
@@ -5,19 +5,27 @@ class LinqApi {
5
5
  constructor() {
6
6
  this.name = 'linqApi';
7
7
  this.displayName = 'Linq API';
8
- this.documentationUrl = 'https://docs.linqapp.com';
8
+ this.documentationUrl = 'https://apidocs.linqapp.com/reference/';
9
9
  this.properties = [
10
10
  {
11
11
  displayName: 'Integration Token',
12
12
  name: 'integrationToken',
13
13
  type: 'string',
14
14
  default: '',
15
- description: 'Your X-LINQ-INTEGRATION-TOKEN',
15
+ description: 'Your Linq Integration Token',
16
16
  typeOptions: {
17
17
  password: true,
18
18
  },
19
19
  },
20
20
  ];
21
+ this.authenticate = {
22
+ type: 'generic',
23
+ properties: {
24
+ headers: {
25
+ Authorization: 'Bearer {{$credentials.integrationToken}}',
26
+ },
27
+ },
28
+ };
21
29
  }
22
30
  }
23
31
  exports.LinqApi = LinqApi;