n8n-nodes-innotes 2.0.11 → 2.0.12

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 CHANGED
@@ -1,311 +1,100 @@
1
- # InNotes N8N Node
1
+ # n8n-nodes-innotes
2
2
 
3
- An N8N custom node that enables seamless integration with the InNotes LinkedIn CRM application. This node allows you to automate workflows involving contacts, notes, jobs, statuses, tags, and user management within the InNotes platform.
3
+ An n8n community node for the [InNotes](https://innotes.me) LinkedIn CRM API:
4
+ contacts, notes, jobs, statuses, tags, the current user, and the job-automation
5
+ callback.
4
6
 
5
- > **Note**
6
- > The LinkedIn scraper microservice node now lives in `../n8n_linkedin_scraper_node` so it can be published as an independent community package.
7
-
8
- ## Features
9
-
10
- - **Complete CRUD Operations**: Create, read, update, and delete operations for all InNotes resources
11
- - **LinkedIn CRM Integration**: Specifically designed for LinkedIn-based contact management
12
- - **Comprehensive Resource Support**:
13
- - Contacts (LinkedIn profiles, emails, phone numbers)
14
- - Notes (conversation logs, meeting notes, follow-ups)
15
- - Jobs (job applications, opportunities, tracking)
16
- - Statuses (contact status management)
17
- - Tags (categorization and organization)
18
- - Users (user account management)
19
- - **Advanced Filtering**: Search and filter capabilities for efficient data retrieval
20
- - **Pagination Support**: Handle large datasets with built-in pagination
21
- - **Error Handling**: Robust error handling with meaningful error messages
22
- - **Authentication**: Secure API authentication using a Bearer token
7
+ The LinkedIn scraper node is a separate package,
8
+ [`n8n-nodes-linkedin-scraper`](https://github.com/mrc527/InNotes/tree/main/n8n_linkedin_scraper_node).
23
9
 
24
10
  ## Installation
25
11
 
26
- ### Prerequisites
27
-
28
- - N8N instance (self-hosted or cloud)
29
- - Node.js 18+ and yarn package manager
30
- - Access to InNotes API credentials
31
-
32
- ### Building the Node
33
-
34
- 1. Clone or download this node package to your local machine
35
- 2. Install dependencies:
36
- ```bash
37
- yarn install
38
- ```
39
-
40
- 3. Build the node:
41
- ```bash
42
- yarn build
43
- ```
12
+ In n8n: **Settings → Community Nodes → Install** → `n8n-nodes-innotes`.
44
13
 
45
- 4. Link the node to your N8N installation:
46
- ```bash
47
- # For local N8N development
48
- yarn link
49
- cd /path/to/your/n8n
50
- yarn link n8n-nodes-innotes
51
-
52
- # Or copy the dist folder to your N8N custom nodes directory
53
- cp -r dist/* ~/.n8n/custom/
54
- ```
55
-
56
- ### Development
57
-
58
- For development and testing:
14
+ Manual build from source (Node >= 18.10, yarn 1):
59
15
 
60
16
  ```bash
61
- # Install dependencies
62
17
  yarn install
63
-
64
- # Run linting
65
- yarn lint
66
-
67
- # Run tests
68
- yarn test
69
-
70
- # Watch mode for development
71
- yarn dev
72
-
73
- # Build for production
74
18
  yarn build
19
+ cp -r dist/* ~/.n8n/custom/ # then restart n8n
75
20
  ```
76
21
 
77
- ## Configuration
78
-
79
- ### API Credentials
80
-
81
- Before using the InNotes node, you need to configure your API credentials:
82
-
83
- 1. In N8N, go to **Credentials** → **Create New**
84
- 2. Search for **InNotes API** and select it
85
- 3. Fill in the required fields:
86
- - **Bearer Token**: Generate one in your InNotes dashboard, under settings
87
- - **Base URL**: Your InNotes instance URL (e.g., `https://app.innotes.com`)
88
-
89
- > Versions before 2.0.0 also offered "Username/Password (Legacy)". That
90
- > scheme has been removed from InNotes; regenerate the credential with a
91
- > Bearer token.
92
-
93
- ### Node Setup
94
-
95
- 1. Add the **InNotes** node to your workflow
96
- 2. Select your configured credentials
97
- 3. Choose the **Resource** (Contact, Note, Job, Status, Tag, User)
98
- 4. Select the desired **Operation** (Get, Create, Update, Delete, etc.)
99
- 5. Configure the specific parameters for your operation
100
-
101
- ## Usage Examples
102
-
103
- ### Managing Contacts
104
-
105
- #### Get All Contacts
106
- - **Resource**: Contact
107
- - **Operation**: Get All
108
- - **Parameters**:
109
- - Limit: Number of contacts to retrieve (default: 50)
110
- - Return All: Whether to return all contacts or paginate
111
-
112
- #### Create New Contact
113
- - **Resource**: Contact
114
- - **Operation**: Create
115
- - **Required Fields**:
116
- - Name: Contact's full name
117
- - LinkedIn URL: LinkedIn profile URL
118
- - **Optional Fields**:
119
- - Email, Phone, Company, Position, etc.
120
-
121
- #### Update Contact
122
- - **Resource**: Contact
123
- - **Operation**: Update
124
- - **Required Fields**:
125
- - Contact ID: ID of the contact to update
126
- - **Update Fields**: Any contact fields you want to modify
22
+ ## Credentials
127
23
 
128
- #### Search Contacts
129
- - **Resource**: Contact
130
- - **Operation**: Search
131
- - **Parameters**:
132
- - Query: Search term (name, email, company)
133
- - Filters: Additional filtering options
24
+ Create an **InNotes API** credential:
134
25
 
135
- ### Managing Notes
26
+ | Field | Notes |
27
+ |---|---|
28
+ | Base URL | Your InNotes instance. Default `https://innotes.me` |
29
+ | Bearer Token | Generate in the InNotes dashboard settings |
30
+ | Callback Secret | Required — the node refuses to run **Automation → Report Job Created** without a value. InNotes fills it in when it provisions your automation; setting the credential up by hand, any non-empty value works, because the callback authenticates with the Bearer token above |
31
+ | Allowed Domains | `*` for all |
136
32
 
137
- #### Create Note
138
- - **Resource**: Note
139
- - **Operation**: Create
140
- - **Required Fields**:
141
- - Contact ID: ID of the associated contact
142
- - Content: Note content (supports rich text)
143
- - **Optional Fields**:
144
- - Type: Note type (meeting, call, email, etc.)
145
- - Tags: Associated tags
33
+ The credential is tested against `GET /api/user`.
146
34
 
147
- #### Get Notes for Contact
148
- - **Resource**: Note
149
- - **Operation**: Get All
150
- - **Parameters**:
151
- - Contact ID: Filter notes by contact
152
- - Date Range: Filter by creation date
35
+ Username/password auth was removed in 2.0.0. Regenerate any older credential
36
+ with a Bearer token.
153
37
 
154
- ### Managing Jobs
38
+ ## Resources and operations
155
39
 
156
- #### Track Job Application
157
- - **Resource**: Job
158
- - **Operation**: Create
159
- - **Required Fields**:
160
- - Title: Job title
161
- - Company: Company name
162
- - **Optional Fields**:
163
- - Status, URL, Description, Salary Range, etc.
40
+ | Resource | Operations |
41
+ |---|---|
42
+ | Automation | Get Config, Report Job Created |
43
+ | Contact | Create, Get, Get Many, Update, Delete |
44
+ | Note | Create, Get (both broken — see below) |
45
+ | Job | Create, Get, Get All, Search, Update, Delete, Exists, Batch Exists |
46
+ | Status | Get All, Create |
47
+ | Tag | Get All |
48
+ | User | Get, Get CV |
164
49
 
165
- #### Update Job Status
166
- - **Resource**: Job
167
- - **Operation**: Update
168
- - **Fields**:
169
- - Job ID: ID of the job to update
170
- - Status: New status (applied, interviewing, offer, etc.)
50
+ Required fields: Contact create needs **Name** and **LinkedIn Key**; Job create
51
+ needs **Job Name** and **Company Name**.
171
52
 
172
- ### Managing Tags and Statuses
53
+ **The Note resource is broken.** Its required fields are **External ID** and
54
+ **Note Text**, but the executor reads `content`/`contactId` on create and
55
+ `noteId` on get — declared nowhere — so a UI-filled node throws on the missing
56
+ parameter, and *Get* would call `/api/note/{noteId}` rather than look up by
57
+ external ID.
173
58
 
174
- #### Create Custom Tags
175
- - **Resource**: Tag
176
- - **Operation**: Create
177
- - **Fields**:
178
- - Name: Tag name
179
- - Color: Tag color (hex code)
59
+ Job **Search** takes a search method: `general`, `ext_id`, `title`, `company`,
60
+ `location`, `description`. **Batch Exists** takes a comma-separated list of
61
+ external IDs and posts them to `/api/job/batch-exists` in chunks of 200.
180
62
 
181
- #### Update Contact Status
182
- - **Resource**: Status
183
- - **Operation**: Create/Update
184
- - **Fields**:
185
- - Contact ID: Associated contact
186
- - Status: Status value
187
- - Type: Status type
63
+ ### Pagination
188
64
 
189
- ## Workflow Integration Examples
65
+ Contact *Get Many* takes **Return All** or a **Limit** (default 24). The limit
66
+ is capped at 200 because `GET /api/contacts` clamps `pageSize` there — without
67
+ the cap a request for 500 returns 200 rows with a 200 status and nothing to say
68
+ it was truncated.
190
69
 
191
- ### Automated LinkedIn Outreach
192
- 1. **Trigger**: Webhook or schedule
193
- 2. **InNotes Node**: Get contacts with specific tags
194
- 3. **Filter**: Process only contacts without recent notes
195
- 4. **InNotes Node**: Create follow-up notes
196
- 5. **Email/LinkedIn Node**: Send personalized messages
70
+ Job *Get All* offers neither: it exposes only Search Term and External ID, while
71
+ the executor reads an undeclared `returnAll`/`limit`, so every call requests
72
+ `pageSize=24, page=1` and cannot be changed.
197
73
 
198
- ### Job Application Tracking
199
- 1. **Trigger**: New job posting (webhook/RSS)
200
- 2. **InNotes Node**: Create new job entry
201
- 3. **InNotes Node**: Link to relevant contacts
202
- 4. **InNotes Node**: Create application tracking note
203
- 5. **Calendar Node**: Schedule follow-up reminders
74
+ ### Options
204
75
 
205
- ### Contact Enrichment
206
- 1. **Trigger**: New contact created
207
- 2. **External API**: Enrich contact data (company info, etc.)
208
- 3. **InNotes Node**: Update contact with enriched data
209
- 4. **InNotes Node**: Create initial contact note
210
- 5. **InNotes Node**: Apply relevant tags
76
+ A node-level **Options** collection with **Batch Size** (default 10, max 100)
77
+ and **Timeout Between Batches** in ms (default 1000), to stay under rate limits.
211
78
 
212
- ## API Reference
79
+ ## Errors
213
80
 
214
- ### Resources
81
+ Failures raise `NodeApiError` with the operation and the request parameters.
82
+ Contact creation reports only the **count** of `contact_details` entries, never
83
+ the values — n8n persists execution data, and those are a third party's phone
84
+ numbers and email addresses.
215
85
 
216
- | Resource | Operations | Description |
217
- |----------|------------|-------------|
218
- | Contact | Get All, Get, Create, Update, Delete, Search | LinkedIn contact management |
219
- | Note | Get All, Get, Create, Update, Delete | Conversation and meeting notes |
220
- | Job | Get All, Get, Create, Update, Delete | Job application tracking |
221
- | Status | Get All, Get, Create, Update, Delete | Contact status management |
222
- | Tag | Get All, Get, Create, Update, Delete | Categorization and organization |
223
- | User | Get, Update | User account management |
224
-
225
- ### Common Parameters
226
-
227
- - **Limit**: Maximum number of items to return (pagination)
228
- - **Return All**: Override limit and return all items
229
- - **Sort By**: Field to sort results by
230
- - **Sort Order**: Ascending or descending sort
231
- - **Filters**: Resource-specific filtering options
232
-
233
- ### Error Handling
234
-
235
- The node provides comprehensive error handling:
236
-
237
- - **Authentication Errors**: Invalid credentials or expired sessions
238
- - **Validation Errors**: Missing required fields or invalid data
239
- - **API Errors**: Server errors or rate limiting
240
- - **Network Errors**: Connection issues or timeouts
241
-
242
- All errors include detailed messages to help with troubleshooting.
243
-
244
- ## Contributing
245
-
246
- ### Development Setup
247
-
248
- 1. Fork the repository
249
- 2. Install dependencies: `yarn install`
250
- 3. Make your changes
251
- 4. Run tests: `yarn test`
252
- 5. Run linting: `yarn lint`
253
- 6. Build: `yarn build`
254
- 7. Submit a pull request
255
-
256
- ### Code Style
257
-
258
- - Follow TypeScript best practices
259
- - Use ESLint configuration provided
260
- - Add JSDoc comments for public methods
261
- - Include unit tests for new features
262
- - Follow existing naming conventions
263
-
264
- ### Testing
86
+ ## Development
265
87
 
266
88
  ```bash
267
- # Run all tests
268
- yarn test
269
-
270
- # Run tests in watch mode
271
- yarn test:watch
272
-
273
- # Run tests with coverage
274
- yarn test:coverage
89
+ yarn install
90
+ yarn lint # eslint (flat config, eslint.config.mjs)
91
+ yarn test # jest
92
+ yarn build # gulp: tsc -> dist/, plus icons, credentials, package.json
93
+ yarn dev # build + watch
275
94
  ```
276
95
 
277
- ## Support
278
-
279
- ### Documentation
280
- - [InNotes API Documentation](https://docs.innotes.com)
281
- - [N8N Documentation](https://docs.n8n.io)
282
-
283
- ### Issues
284
- If you encounter any issues or have feature requests, please:
285
- 1. Check existing issues in the repository
286
- 2. Create a new issue with detailed description
287
- 3. Include error messages and steps to reproduce
288
-
289
- ### Community
290
- - Join the N8N Community Discord
291
- - Check the InNotes user community
96
+ Publishing is automated — see `CI_SETUP.md`. Do not `npm publish` by hand.
292
97
 
293
98
  ## License
294
99
 
295
- This project is licensed under the MIT License - see the LICENSE file for details.
296
-
297
- ## Changelog
298
-
299
- ### Version 1.0.0
300
- - Initial release
301
- - Support for all InNotes resources (Contact, Note, Job, Status, Tag, User)
302
- - Complete CRUD operations
303
- - Search and filtering capabilities
304
- - Pagination support
305
- - Comprehensive error handling
306
- - Full TypeScript support
307
-
308
- ---
309
-
310
- **Author**: marco
311
- **Last Updated**: 2025-06-01
100
+ MIT.
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-innotes",
3
- "version": "2.0.11",
3
+ "version": "2.0.12",
4
4
  "description": "N8N node for InNotes CRM API integration",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-innotes",
3
- "version": "2.0.11",
3
+ "version": "2.0.12",
4
4
  "description": "N8N node for InNotes CRM API integration",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",