n8n-nodes-innotes 2.0.16 → 2.0.18
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/dist/credentials/Logo_128.png +0 -0
- package/dist/descriptions/ContactDescription.js +41 -71
- package/dist/descriptions/ContactDescription.js.map +1 -1
- package/dist/descriptions/JobDescription.js +35 -61
- package/dist/descriptions/JobDescription.js.map +1 -1
- package/dist/icons/Logo_128.png +0 -0
- package/dist/nodes/InNotes/InNotes.node.js +120 -394
- package/dist/nodes/InNotes/InNotes.node.js.map +1 -1
- package/dist/nodes/InNotes/Logo_128.png +0 -0
- package/dist/package.json +1 -6
- package/dist/types/InNotesTypes.js +1 -1
- package/dist/types/InNotesTypes.js.map +1 -1
- package/package.json +1 -6
- package/dist/credentials/InNotesApi.credentials.ts +0 -98
- package/dist/test/InNotes.node.test.js +0 -1531
- package/dist/test/InNotes.node.test.js.map +0 -1
- package/dist/test/setup.js +0 -40
- package/dist/test/setup.js.map +0 -1
- package/dist/utils/helpers.js +0 -172
- package/dist/utils/helpers.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../nodes/InNotes/InNotes.node.ts"],"names":[],"mappings":"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","file":"InNotes.node.js","sourcesContent":["/**\n * @author Marco\n * @date 2025-06-28\n */\n\nimport {\n\tIDataObject,\n\tIExecuteFunctions,\n\tIHttpRequestMethods,\n\tILoadOptionsFunctions,\n\tINodeExecutionData,\n\tINodePropertyOptions,\n\tINodeType,\n\tINodeTypeDescription,\n\tNodeApiError,\n} from 'n8n-workflow';\n\nimport {contactFields, contactOperations} from '../../descriptions/ContactDescription';\nimport {noteFields, noteOperations} from '../../descriptions/NoteDescription';\nimport {jobFields, jobOperations} from '../../descriptions/JobDescription';\nimport {statusFields, statusOperations} from '../../descriptions/StatusDescription';\nimport {tagFields, tagOperations} from '../../descriptions/TagDescription';\nimport {userFields, userOperations} from '../../descriptions/UserDescription';\nimport {automationFields, automationOperations} from '../../descriptions/AutomationDescription';\nimport {IContactDetail} from '../../types/InNotesTypes';\n\n/**\n * Turn the \"Phone & Email\" fixedCollection into the array the API takes.\n *\n * n8n hands a fixedCollection over as `{ entry: [{...}, ...] }`, and the update\n * operation posts its collection of fields straight through as the request body\n * — so without this the API would receive an object where it requires an array\n * and answer 400, for a field the user filled in correctly.\n *\n * Returns undefined when the field was never used, which leaves the stored\n * recapiti alone. Rows that were configured but are all unusable raise, on\n * update only — see `raiseWhenUnusable`.\n *\n * Undefined and NOT an empty array, deliberately. An empty array is a request to\n * DELETE every number and address the contact has, and a workflow run before its\n * upstream data arrived would quietly empty the field on a live contact and\n * answer 200. Clearing is not expressible through this node; the REST route and\n * the MCP tool both take an explicit `[]` for anyone who means it.\n * Author: Marco, August 10, 2026\n */\nexport function contactDetailsFromCollection(\n\traw: unknown,\n\traiseWhenUnusable = false,\n): IContactDetail[] | undefined {\n\tif (raw === undefined || raw === null) return undefined;\n\t// A fixedCollection can be set to an expression, and `{{ $json.contact_details }}`\n\t// carrying the API's own shape arrives as a bare array rather than {entry: [...]}.\n\t// Reading only `.entry` there returns undefined and writes nothing, under a 200.\n\tconst entries = Array.isArray(raw) ? raw : (raw as IDataObject).entry;\n\tif (!Array.isArray(entries) || entries.length === 0) return undefined;\n\n\tconst details = entries\n\t\t.map((entry) => {\n\t\t\tconst row = entry as IDataObject;\n\t\t\tconst label = typeof row.label === 'string' ? row.label.trim() : '';\n\t\t\t// Coerced, not discarded: an expression is the normal way to fill this\n\t\t\t// in, and `{{ $json.phone }}` resolving to a NUMBER is a filled-in row.\n\t\t\tconst value = row.value === undefined || row.value === null ? '' : String(row.value).trim();\n\t\t\treturn {type: row.type, value, ...(label ? {label} : {})} as IContactDetail;\n\t\t})\n\t\t// `type` is a dropdown but expression-settable, so a workflow can resolve\n\t\t// it to 'mobile'. Dropping beats defaulting to email, which would send a\n\t\t// phone number as an address and earn a 400 about the value, not the type.\n\t\t.filter((detail) => detail.value !== '' && (detail.type === 'email' || detail.type === 'phone'));\n\n\t// Rows were configured and none survived. On UPDATE that has to raise: the\n\t// field would be deleted from the body, nothing would be written, and the\n\t// node would report 200 to an operator who filled in three rows.\n\t//\n\t// On CREATE it must NOT raise. There the contact itself is the point and the\n\t// recapiti are optional, so a row whose expression resolved to \"\" for this\n\t// item would abort the whole create — importing 100 contacts would silently\n\t// skip the 30 with no phone number. Author: Marco, 2026-08-10\n\tif (details.length === 0) {\n\t\tif (raiseWhenUnusable) {\n\t\t\tthrow new Error(\n\t\t\t\t'Phone & Email: no usable entry. Each row needs a Value, and a Type of exactly \"email\" or \"phone\".',\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\treturn details;\n}\n\nexport class InNotes implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'InNotes',\n\t\tname: 'inNotes',\n\t\ticon: 'file:Logo_128.png',\n\t\tgroup: ['output'],\n\t\tversion: 1,\n\t\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\t\tdescription: 'Consume InNotes CRM API',\n\t\tdefaults: {\n\t\t\tname: 'InNotes',\n\t\t},\n\t\tinputs: ['main'],\n\t\toutputs: ['main'],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'inNotesApi',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Automation',\n\t\t\t\t\t\tvalue: 'automation',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Contact',\n\t\t\t\t\t\tvalue: 'contact',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Note',\n\t\t\t\t\t\tvalue: 'note',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Job',\n\t\t\t\t\t\tvalue: 'job',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Status',\n\t\t\t\t\t\tvalue: 'status',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Tag',\n\t\t\t\t\t\tvalue: 'tag',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'User',\n\t\t\t\t\t\tvalue: 'user',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'contact',\n\t\t\t},\n\t\t\t...automationOperations,\n\t\t\t...contactOperations,\n\t\t\t...noteOperations,\n\t\t\t...jobOperations,\n\t\t\t...statusOperations,\n\t\t\t...tagOperations,\n\t\t\t...userOperations,\n\t\t\t...automationFields,\n\t\t\t...contactFields,\n\t\t\t...noteFields,\n\t\t\t...jobFields,\n\t\t\t...statusFields,\n\t\t\t...tagFields,\n\t\t\t...userFields,\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add Option',\n\t\t\t\tdefault: {},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Batch Size',\n\t\t\t\t\t\tname: 'batchSize',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tdefault: 10,\n\t\t\t\t\t\tdescription: 'Number of items to process in each batch (to avoid rate limiting)',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tminValue: 1,\n\t\t\t\t\t\t\tmaxValue: 100,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Timeout Between Batches (ms)',\n\t\t\t\t\t\tname: 'timeoutBetweenBatches',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tdefault: 1000,\n\t\t\t\t\t\tdescription: 'Delay in milliseconds between processing batches (to avoid rate limiting)',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tminValue: 0,\n\t\t\t\t\t\t\tmaxValue: 30000,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n\n\tmethods = {\n\t\tloadOptions: {\n\t\t\tasync jobStatuses(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\ttry {\n\t\t\t\t\tconst credentials = await this.getCredentials('inNotesApi');\n\t\t\t\t\tconst baseUrl = credentials.baseUrl as string;\n\n\t\t\t\t\tconst response = await this.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\t\t\turl: `${baseUrl}/api/statuses`,\n\t\t\t\t\t\t\tqs: { type: 'job' },\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\tconst statuses = Array.isArray(response) ? response : [response];\n\t\t\t\t\treturn statuses.map((status: any) => ({\n\t\t\t\t\t\tname: status.name,\n\t\t\t\t\t\tvalue: status.name,\n\t\t\t\t\t}));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\t\t\tmessage: `Failed to load job statuses: ${(error as Error).message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: IDataObject[] = [];\n\t\tconst resource = this.getNodeParameter('resource', 0);\n\t\tconst operation = this.getNodeParameter('operation', 0);\n\n\t\t// Get batch options\n\t\tconst options = this.getNodeParameter('options', 0, {}) as IDataObject;\n\t\tconst batchSize = options.batchSize as number || 10;\n\t\tconst timeoutBetweenBatches = options.timeoutBetweenBatches as number || 1000;\n\n\t\t// Create a node instance to access the methods\n\t\tconst nodeInstance = new InNotes();\n\n\t\t// Helper function to add delay between batches\n\t\tconst delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\n\t\tif (resource === 'job' && operation === 'batchExists') {\n\t\t\tconst credentials = await this.getCredentials('inNotesApi');\n\t\t\tconst baseUrl = credentials.baseUrl as string;\n\t\t\tconst batchLimit = 200;\n\n\t\t\tconst idsRaw = this.getNodeParameter('ids', 0, '') as string;\n\t\t\tconst allExtIds = idsRaw.split(',').map(id => id.trim()).filter(id => id.length > 0);\n\n\t\t\tif (allExtIds.length === 0) {\n\t\t\t\treturn [this.helpers.returnJsonArray([{ error: 'No valid IDs provided' }])];\n\t\t\t}\n\n\t\t\tconst allResults: Record<string, boolean> = {};\n\n\t\t\tfor (let offset = 0; offset < allExtIds.length; offset += batchLimit) {\n\t\t\t\tconst chunk = allExtIds.slice(offset, offset + batchLimit);\n\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await this.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: 'POST' as IHttpRequestMethods,\n\t\t\t\t\t\t\turl: `${baseUrl}/api/job/batch-exists`,\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbody: { ext_ids: chunk },\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\tconst results = (response as IDataObject).results as Record<string, boolean> ?? {};\n\t\t\t\t\tObject.assign(allResults, results);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\t\tfor (const extId of chunk) {\n\t\t\t\t\t\t\tallResults[extId] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const extId of allExtIds) {\n\t\t\t\treturnData.push({\n\t\t\t\t\text_id: extId,\n\t\t\t\t\texists: allResults[extId] ?? false,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn [this.helpers.returnJsonArray(returnData)];\n\t\t}\n\n\t\t// Process items in batches\n\t\tfor (let batchStart = 0; batchStart < items.length; batchStart += batchSize) {\n\t\t\tconst batchEnd = Math.min(batchStart + batchSize, items.length);\n\t\t\tconst currentBatch = items.slice(batchStart, batchEnd);\n\n\t\t\t// Process current batch\n\t\t\tfor (let i = 0; i < currentBatch.length; i++) {\n\t\t\t\tconst actualIndex = batchStart + i;\n\t\t\t\ttry {\n\t\t\t\t\tlet responseData: IDataObject | IDataObject[] = {};\n\n\t\t\t\t\tif (resource === 'automation') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeAutomationOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'contact') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeContactOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'note') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeNoteOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'job') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeJobOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'status') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeStatusOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'tag') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeTagOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'user') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeUserOperation(this, actualIndex, operation);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Array.isArray(responseData)) {\n\t\t\t\t\t\treturnData.push(...responseData);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturnData.push(responseData);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\t\treturnData.push({ error: (error as Error).message });\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add delay between batches (except after the last batch)\n\t\t\tif (batchEnd < items.length && timeoutBetweenBatches > 0) {\n\t\t\t\tawait delay(timeoutBetweenBatches);\n\t\t\t}\n\t\t}\n\n\t\treturn [this.helpers.returnJsonArray(returnData)];\n\t}\n\n\tprivate async executeAutomationOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tconst credentials = await executeFunctions.getCredentials('inNotesApi');\n\t\tconst baseUrl = credentials.baseUrl as string;\n\n\t\tif (operation === 'getConfig') {\n\t\t\ttry {\n\t\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\t\turl: `${baseUrl}/api/automation/config`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to get automation config: ${(error as Error).message}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'reportJobCreated') {\n\t\t\tconst jobsAdded = executeFunctions.getNodeParameter('jobsAdded', itemIndex, 1) as number;\n\t\t\tconst status = executeFunctions.getNodeParameter('status', itemIndex, 'success') as string;\n\t\t\tconst errorMessage = executeFunctions.getNodeParameter('errorMessage', itemIndex, '') as string;\n\n\t\t\t// Get the callback secret from credentials\n\t\t\tconst callbackSecret = credentials.callbackSecret as string;\n\t\t\tif (!callbackSecret) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: 'Callback secret not configured in InNotes API credentials. Please add the callback secret to your credentials.',\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Get user ID from the API\n\t\t\tlet userId: string;\n\t\t\ttry {\n\t\t\t\tconst userResponse = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\t\turl: `${baseUrl}/api/user`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tuserId = userResponse.id;\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to get user ID: ${(error as Error).message}`,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst body: IDataObject = {\n\t\t\t\tuserId,\n\t\t\t\tstatus,\n\t\t\t\tjobsAdded,\n\t\t\t\tsecret: callbackSecret,\n\t\t\t\t...(status === 'error' && errorMessage && { error: errorMessage }),\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST' as IHttpRequestMethods,\n\t\t\t\t\t\turl: `${baseUrl}/api/automation/callback`,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\t...response,\n\t\t\t\t\tjobsAdded,\n\t\t\t\t\tstatus,\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to report job created: ${(error as Error).message}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"automation\"!`,\n\t\t});\n\t}\n\n\tprivate async executeContactOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tconst credentials = await executeFunctions.getCredentials('inNotesApi');\n\t\tconst baseUrl = credentials.baseUrl as string;\n\n\t\tif (operation === 'create') {\n\t\t\tconst name = executeFunctions.getNodeParameter('name', itemIndex) as string;\n\t\t\tconst linkedin_key = executeFunctions.getNodeParameter('linkedin_key', itemIndex) as string;\n\t\t\tconst linkedin_user = executeFunctions.getNodeParameter('linkedin_user', itemIndex, '') as string;\n\t\t\tconst location = executeFunctions.getNodeParameter('location', itemIndex, '') as string;\n\t\t\tconst current_company = executeFunctions.getNodeParameter('current_company', itemIndex, '') as string;\n\t\t\tconst picture_url = executeFunctions.getNodeParameter('picture_url', itemIndex, '') as string;\n\t\t\tconst tags = executeFunctions.getNodeParameter('tags', itemIndex, '') as string;\n\t\t\tconst status_id = executeFunctions.getNodeParameter('status_id', itemIndex, '') as string;\n\t\t\tconst contact_details = contactDetailsFromCollection(\n\t\t\t\texecuteFunctions.getNodeParameter('contact_details', itemIndex, {}),\n\t\t\t);\n\n\t\t\tconst body: IDataObject = {\n\t\t\t\tname,\n\t\t\t\tlinkedin_key,\n\t\t\t\t...(linkedin_user && { linkedin_user }),\n\t\t\t\t...(location && { location }),\n\t\t\t\t...(current_company && { current_company }),\n\t\t\t\t...(picture_url && { picture_url }),\n\t\t\t\t...(tags && { tags: tags.split(',').map((tag: string) => tag.trim()) }),\n\t\t\t\t...(status_id && { status_id }),\n\t\t\t\t...(contact_details && { contact_details }),\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST' as IHttpRequestMethods,\n\t\t\t\t\t\turl: `${baseUrl}/api/contacts`,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\tconst requestParams = {\n\t\t\t\t\tname,\n\t\t\t\t\tlinkedin_key,\n\t\t\t\t\t...(linkedin_user && { linkedin_user }),\n\t\t\t\t\t...(location && { location }),\n\t\t\t\t\t...(current_company && { current_company }),\n\t\t\t\t\t...(picture_url && { picture_url }),\n\t\t\t\t\t...(tags && { tags: tags.split(',').map((tag: string) => tag.trim()) }),\n\t\t\t\t\t...(status_id && { status_id }),\n\t\t\t\t\t// The COUNT, never the values: this object is interpolated into a\n\t\t\t\t\t// NodeApiError message and n8n persists execution data, so the\n\t\t\t\t\t// numbers and addresses would sit in a third party's workflow\n\t\t\t\t\t// history. Author: Marco, 2026-08-10\n\t\t\t\t\t...(contact_details && { contact_details: `${contact_details.length} entr(y|ies)` }),\n\t\t\t\t};\n\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to create contact: ${(error as Error).message}. Request parameters: ${JSON.stringify(requestParams, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'get') {\n\t\t\tconst contactId = executeFunctions.getNodeParameter('contactId', itemIndex) as string;\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/contacts/${contactId}`,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'getAll') {\n\t\t\tconst returnAll = executeFunctions.getNodeParameter('returnAll', itemIndex, false) as boolean;\n\t\t\tconst search = executeFunctions.getNodeParameter('search', itemIndex, '') as string;\n\t\t\tconst tags = executeFunctions.getNodeParameter('tags', itemIndex, '') as string;\n\n\t\t\tconst qs: IDataObject = {};\n\t\t\tif (search) qs.search = search;\n\t\t\tif (tags) qs.tags = tags;\n\n\t\t\tif (!returnAll) {\n\t\t\t\tconst limit = executeFunctions.getNodeParameter('limit', itemIndex, 24);\n\t\t\t\tqs.pageSize = limit;\n\t\t\t\tqs.page = 1;\n\t\t\t}\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/contacts`,\n\t\t\t\t\tqs,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t}\n\n\t\tif (operation === 'update') {\n\t\t\tconst contactId = executeFunctions.getNodeParameter('contactId', itemIndex) as string;\n\t\t\tconst updateFields = executeFunctions.getNodeParameter('updateFields', itemIndex) as IDataObject;\n\n\t\t\t// The collection goes through as the request body verbatim, so the one\n\t\t\t// field whose n8n shape differs from the API's is rewritten here rather\n\t\t\t// than shipped as an object the route refuses.\n\t\t\t// Raises when rows were configured and none are usable: on update the\n\t\t\t// alternative is dropping the field and reporting success.\n\t\t\tconst contact_details = contactDetailsFromCollection(updateFields.contact_details, true);\n\t\t\tconst body: IDataObject = {\n\t\t\t\t...updateFields,\n\t\t\t\t...(contact_details ? {contact_details} : {}),\n\t\t\t};\n\t\t\tif (contact_details === undefined) delete body.contact_details;\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'PUT' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/contacts/${contactId}`,\n\t\t\t\t\tbody,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'delete') {\n\t\t\tconst contactId = executeFunctions.getNodeParameter('contactId', itemIndex) as string;\n\n\t\t\tawait executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'DELETE' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/contacts/${contactId}`,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn { success: true };\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"contact\"!`,\n\t\t});\n\t}\n\n\tprivate async executeNoteOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tconst credentials = await executeFunctions.getCredentials('inNotesApi');\n\t\tconst baseUrl = credentials.baseUrl as string;\n\n\t\tif (operation === 'create') {\n\t\t\tconst content = executeFunctions.getNodeParameter('content', itemIndex) as string;\n\t\t\tconst contactId = executeFunctions.getNodeParameter('contactId', itemIndex) as string | number;\n\t\t\tconst visibility = executeFunctions.getNodeParameter('visibility', itemIndex, '') as string;\n\t\t\tconst ext_table_name = executeFunctions.getNodeParameter('ext_table_name', itemIndex, '') as string;\n\n\t\t\tconst body: IDataObject = {\n\t\t\t\tcontent,\n\t\t\t\tcontact_id: contactId,\n\t\t\t\t...(visibility && { visibility }),\n\t\t\t\t...(ext_table_name && { ext_table_name }),\n\t\t\t};\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'POST' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/note`,\n\t\t\t\t\tbody,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'get') {\n\t\t\tconst noteId = executeFunctions.getNodeParameter('noteId', itemIndex) as string | number;\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/note/${noteId}`,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'getAll') {\n\t\t\tconst contactId = executeFunctions.getNodeParameter('contactId', itemIndex) as string | number;\n\t\t\tconst returnAll = executeFunctions.getNodeParameter('returnAll', itemIndex, false) as boolean;\n\n\t\t\tconst qs: IDataObject = {\n\t\t\t\tcontact_id: contactId,\n\t\t\t};\n\n\t\t\tif (!returnAll) {\n\t\t\t\tconst limit = executeFunctions.getNodeParameter('limit', itemIndex, 24);\n\t\t\t\tqs.pageSize = limit;\n\t\t\t\tqs.page = 1;\n\t\t\t}\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/note`,\n\t\t\t\t\tqs,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t}\n\n\t\tif (operation === 'update') {\n\t\t\tconst noteId = executeFunctions.getNodeParameter('noteId', itemIndex) as string | number;\n\t\t\tconst updateFields = executeFunctions.getNodeParameter('updateFields', itemIndex);\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'PUT' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/note/${noteId}`,\n\t\t\t\t\tbody: updateFields,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'delete') {\n\t\t\tconst noteId = executeFunctions.getNodeParameter('noteId', itemIndex) as string | number;\n\n\t\t\tawait executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'DELETE' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/note/${noteId}`,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn { success: true };\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"note\"!`,\n\t\t});\n\t}\n\n\tprivate async executeJobOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tconst credentials = await executeFunctions.getCredentials('inNotesApi');\n\t\tconst baseUrl = credentials.baseUrl as string;\n\n\t\tif (operation === 'create') {\n\t\t\tconst name = executeFunctions.getNodeParameter('name', itemIndex) as string;\n\t\t\tconst company_name = executeFunctions.getNodeParameter('company_name', itemIndex) as string;\n\t\t\tconst status = executeFunctions.getNodeParameter('status', itemIndex, '') as string;\n\t\t\tconst description = executeFunctions.getNodeParameter('description', itemIndex, '') as string;\n\t\t\tconst location = executeFunctions.getNodeParameter('location', itemIndex, '') as string;\n\t\t\tconst remote_setting = executeFunctions.getNodeParameter('remote_setting', itemIndex, '') as string;\n\t\t\tconst company_url = executeFunctions.getNodeParameter('company_url', itemIndex, '') as string;\n\t\t\tconst provider = executeFunctions.getNodeParameter('provider', itemIndex, 'external') as string;\n\t\t\tconst url = executeFunctions.getNodeParameter('url', itemIndex, '') as string;\n\t\t\tconst ext_id = executeFunctions.getNodeParameter('ext_id', itemIndex, '') as string;\n\t\t\tconst picture_url = executeFunctions.getNodeParameter('picture_url', itemIndex, '') as string;\n\t\t\tconst tags = executeFunctions.getNodeParameter('tags', itemIndex, '') as string;\n\n\t\t\tlet status_id: number | undefined;\n\n\t\t\t// If status is provided, lookup the status ID\n\t\t\tif (status) {\n\t\t\t\ttry {\n\t\t\t\t\t// Get all job statuses\n\t\t\t\t\tconst statusResponse = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\t\t\turl: `${baseUrl}/api/statuses`,\n\t\t\t\t\t\t\tqs: { type: 'job' },\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\t// Find matching status by name (case-insensitive)\n\t\t\t\t\tconst statuses = Array.isArray(statusResponse) ? statusResponse : [statusResponse];\n\t\t\t\t\tconst matchingStatus = statuses.find((s: any) =>\n\t\t\t\t\t\ts.name?.toLowerCase() === status.toLowerCase(),\n\t\t\t\t\t);\n\n\t\t\t\t\tif (matchingStatus) {\n\t\t\t\t\t\tstatus_id = parseInt(matchingStatus.id, 10);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\t\t\tmessage: `Status \"${status}\" not found. Available statuses: ${statuses.map((s: any) => s.name).join(', ')}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (error instanceof NodeApiError) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\t\tmessage: `Failed to lookup status \"${status}\": ${(error as Error).message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst body: IDataObject = {\n\t\t\t\tname,\n\t\t\t\tcompany_name,\n\t\t\t\t...(description && { description }),\n\t\t\t\t...(location && { location }),\n\t\t\t\t...(remote_setting && { remote_setting }),\n\t\t\t\t...(company_url && { company_url }),\n\t\t\t\t...(provider && { provider }),\n\t\t\t\t...(url && { url }),\n\t\t\t\t...(status_id && { status_id }),\n\t\t\t\t...(ext_id && { ext_id }),\n\t\t\t\t...(picture_url && picture_url !== 'Not Available' && { picture_url }),\n\t\t\t\t...(tags && { tags: tags.split(',').map((tag: string) => tag.trim()) }),\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'POST' as IHttpRequestMethods,\n\t\t\t\t\t\turl: `${baseUrl}/api/job`,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\tconst requestParams = {\n\t\t\t\t\tname,\n\t\t\t\t\tcompany_name,\n\t\t\t\t\t...(description && { description }),\n\t\t\t\t\t...(location && { location }),\n\t\t\t\t\t...(remote_setting && { remote_setting }),\n\t\t\t\t\t...(company_url && { company_url }),\n\t\t\t\t\t...(provider && { provider }),\n\t\t\t\t\t...(url && { url }),\n\t\t\t\t\t...(status_id && { status_id }),\n\t\t\t\t\t...(ext_id && { ext_id }),\n\t\t\t\t\t...(picture_url && picture_url !== 'Not Available' && { picture_url }),\n\t\t\t\t\t...(tags && { tags: tags.split(',').map((tag: string) => tag.trim()) }),\n\t\t\t\t};\n\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to create job: ${(error as Error).message}. Request parameters: ${JSON.stringify(requestParams, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'get') {\n\t\t\tconst jobId = executeFunctions.getNodeParameter('jobId', itemIndex) as string | number;\n\n\t\t\ttry {\n\t\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\t\turl: `${baseUrl}/api/job/${jobId}`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to get job: ${(error as Error).message}. Request parameters: ${JSON.stringify({ jobId }, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'getAll') {\n\t\t\tconst returnAll = executeFunctions.getNodeParameter('returnAll', itemIndex, false) as boolean;\n\t\t\tconst search = executeFunctions.getNodeParameter('search', itemIndex, '') as string;\n\t\t\tconst tags = executeFunctions.getNodeParameter('tags', itemIndex, '') as string;\n\n\t\t\tconst qs: IDataObject = {};\n\t\t\tif (search) qs.search = search;\n\t\t\tif (tags) qs.tags = tags;\n\n\t\t\tif (!returnAll) {\n\t\t\t\tconst limit = executeFunctions.getNodeParameter('limit', itemIndex, 24);\n\t\t\t\tqs.pageSize = limit;\n\t\t\t\tqs.page = 1;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\t\turl: `${baseUrl}/api/job`,\n\t\t\t\t\t\tqs,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to get all jobs: ${(error as Error).message}. Request parameters: ${JSON.stringify({ returnAll, search, tags, queryParams: qs }, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'update') {\n\t\t\tconst jobId = executeFunctions.getNodeParameter('jobId', itemIndex) as string | number;\n\t\t\tconst updateFields = executeFunctions.getNodeParameter('updateFields', itemIndex);\n\n\t\t\t// Handle status string lookup if provided\n\t\t\tif (updateFields.status && typeof updateFields.status === 'string') {\n\t\t\t\ttry {\n\t\t\t\t\t// Get all job statuses\n\t\t\t\t\tconst statusResponse = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\t\t\turl: `${baseUrl}/api/statuses`,\n\t\t\t\t\t\t\tqs: { type: 'job' },\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\t// Find matching status by name (case-insensitive)\n\t\t\t\t\tconst statuses = Array.isArray(statusResponse) ? statusResponse : [statusResponse];\n\t\t\t\t\tconst matchingStatus = statuses.find((s: any) =>\n\t\t\t\t\t\ts.name?.toLowerCase() === (updateFields.status as string).toLowerCase(),\n\t\t\t\t\t);\n\n\t\t\t\t\tif (matchingStatus) {\n\t\t\t\t\t// Replace status with status_id and remove status field\n\t\t\t\t\t\tupdateFields.status_id = parseInt(matchingStatus.id, 10);\n\t\t\t\t\t\tdelete updateFields.status;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\t\t\tmessage: `Status \"${updateFields.status}\" not found. Available statuses: ${statuses.map((s: any) => s.name).join(', ')}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (error instanceof NodeApiError) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\t\tmessage: `Failed to lookup status \"${updateFields.status}\": ${(error as Error).message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Process tags if provided as comma-separated string\n\t\t\tif (updateFields.tags && typeof updateFields.tags === 'string') {\n\t\t\t\tupdateFields.tags = (updateFields.tags).split(',').map((tag: string) => tag.trim());\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'PUT' as IHttpRequestMethods,\n\t\t\t\t\t\turl: `${baseUrl}/api/job/${jobId}`,\n\t\t\t\t\t\tbody: updateFields,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to update job: ${(error as Error).message}. Request parameters: ${JSON.stringify({ jobId, updateFields }, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'delete') {\n\t\t\tconst jobId = executeFunctions.getNodeParameter('jobId', itemIndex) as string | number;\n\n\t\t\ttry {\n\t\t\t\tawait executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: 'DELETE' as IHttpRequestMethods,\n\t\t\t\t\t\turl: `${baseUrl}/api/job/${jobId}`,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\treturn { success: true };\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to delete job: ${(error as Error).message}. Request parameters: ${JSON.stringify({ jobId }, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'search') {\n\t\t\tconst searchMethod = executeFunctions.getNodeParameter('searchMethod', itemIndex) as string;\n\t\t\tconst searchQuery = executeFunctions.getNodeParameter('searchQuery', itemIndex) as string;\n\t\t\tconst searchOptions = executeFunctions.getNodeParameter('searchOptions', itemIndex, {}) as IDataObject;\n\n\t\t\tconst qs: IDataObject = {};\n\n\t\t\t// Handle different search methods\n\t\t\tswitch (searchMethod) {\n\t\t\tcase 'general':\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t\tbreak;\n\t\t\tcase 'ext_id':\n\t\t\t\tqs.ext_id = searchQuery;\n\t\t\t\tbreak;\n\t\t\tcase 'title':\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t\tqs.searchField = 'title';\n\t\t\t\tbreak;\n\t\t\tcase 'company':\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t\tqs.searchField = 'company';\n\t\t\t\tbreak;\n\t\t\tcase 'location':\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t\tqs.searchField = 'location';\n\t\t\t\tbreak;\n\t\t\tcase 'description':\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t\tqs.searchField = 'description';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t}\n\n\t\t\t// Add additional filter parameters\n\t\t\tif (searchOptions.remote_setting) qs.remote_setting = searchOptions.remote_setting;\n\t\t\tif (searchOptions.status) qs.status = searchOptions.status;\n\t\t\tif (searchOptions.tags) qs.tags = searchOptions.tags;\n\n\t\t\t// Set limit with default value\n\t\t\tconst limit = (searchOptions.limit as number) || 24;\n\t\t\tqs.pageSize = limit;\n\t\t\tqs.page = 1;\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/job`,\n\t\t\t\t\tqs,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t}\n\n\t\tif (operation === 'exists') {\n\t\t\tconst id = executeFunctions.getNodeParameter('id', itemIndex) as string;\n\n\t\t\ttry {\n\t\t\t\t// First try to get by job ID\n\t\t\t\ttry {\n\t\t\t\t\tawait executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\t\t\turl: `${baseUrl}/api/job/${id}`,\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\t// If we get here, the job exists by ID\n\t\t\t\t\treturn { exists: true, found_by: 'job_id', id };\n\t\t\t\t} catch {\n\t\t\t\t\t// Job not found by ID, try searching by ext_id\n\t\t\t\t\tconst searchResponse = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t'inNotesApi',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\t\t\turl: `${baseUrl}/api/job`,\n\t\t\t\t\t\t\tqs: { ext_id: id },\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\t// Check if any results were returned\n\t\t\t\t\tconst results = Array.isArray(searchResponse) ? searchResponse : [searchResponse];\n\t\t\t\t\tif (results.length > 0 && results[0]) {\n\t\t\t\t\t\treturn { exists: true, found_by: 'ext_id', id };\n\t\t\t\t\t}\n\n\t\t\t\t\t// Not found by either ID or ext_id\n\t\t\t\t\treturn { exists: false, id };\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// If there's an error during the search, return false\n\t\t\t\treturn { exists: false, id, error: (error as Error).message };\n\t\t\t}\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"job\"!`,\n\t\t});\n\t}\n\n\tprivate async executeStatusOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tconst credentials = await executeFunctions.getCredentials('inNotesApi');\n\t\tconst baseUrl = credentials.baseUrl as string;\n\n\t\tif (operation === 'create') {\n\t\t\tconst name = executeFunctions.getNodeParameter('name', itemIndex) as string;\n\t\t\tconst type = executeFunctions.getNodeParameter('type', itemIndex) as string;\n\t\t\tconst color = executeFunctions.getNodeParameter('color', itemIndex, '') as string;\n\n\t\t\tconst body: IDataObject = {\n\t\t\t\tname,\n\t\t\t\ttype,\n\t\t\t\t...(color && { color }),\n\t\t\t};\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'POST' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/statuses`,\n\t\t\t\t\tbody,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'getAll') {\n\t\t\tconst type = executeFunctions.getNodeParameter('type', itemIndex, 'contact') as string;\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/statuses`,\n\t\t\t\t\tqs: { type },\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t}\n\n\t\tif (operation === 'update') {\n\t\t\tconst statusId = executeFunctions.getNodeParameter('statusId', itemIndex) as string | number;\n\t\t\tconst updateFields = executeFunctions.getNodeParameter('updateFields', itemIndex);\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'PUT' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/statuses/${statusId}`,\n\t\t\t\t\tbody: updateFields,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'delete') {\n\t\t\tconst statusId = executeFunctions.getNodeParameter('statusId', itemIndex) as string | number;\n\n\t\t\tawait executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'DELETE' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/statuses/${statusId}`,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn { success: true };\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"status\"!`,\n\t\t});\n\t}\n\n\tprivate async executeTagOperation(executeFunctions: IExecuteFunctions, _itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tconst credentials = await executeFunctions.getCredentials('inNotesApi');\n\t\tconst baseUrl = credentials.baseUrl as string;\n\n\t\tif (operation === 'getAll') {\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/tags`,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"tag\"! Supported operations: getAll`,\n\t\t});\n\t}\n\n\tprivate async executeUserOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tconst credentials = await executeFunctions.getCredentials('inNotesApi');\n\t\tconst baseUrl = credentials.baseUrl as string;\n\n\t\tif (operation === 'get') {\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/user`,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'getCv') {\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'GET' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/user`,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\t// Return only CV-related fields\n\t\t\tconst { cv, job_preferences, cv_updated_at } = response;\n\n\t\t\t// Parse job_preferences if it's a JSON string\n\t\t\tlet parsedPreferences = null;\n\t\t\tlet searchJobTitles = [];\n\t\t\tlet locations = [];\n\t\t\tlet titleBlacklist = [];\n\t\t\tlet companyBlacklist = [];\n\t\t\tlet penalize = [];\n\n\t\t\tif (job_preferences) {\n\t\t\t\ttry {\n\t\t\t\t\tparsedPreferences = typeof job_preferences === 'string'\n\t\t\t\t\t\t? JSON.parse(job_preferences)\n\t\t\t\t\t\t: job_preferences;\n\n\t\t\t\t\tsearchJobTitles = parsedPreferences.searchJobTitles ?? [];\n\t\t\t\t\tlocations = parsedPreferences.locations ?? [];\n\n\t\t\t\t\t// Handle both new blacklist structure and legacy structure\n\t\t\t\t\tif (parsedPreferences.blacklist) {\n\t\t\t\t\t\ttitleBlacklist = parsedPreferences.blacklist.titleBlacklist ?? [];\n\t\t\t\t\t\tcompanyBlacklist = parsedPreferences.blacklist.companyBlacklist ?? [];\n\t\t\t\t\t\tpenalize = parsedPreferences.blacklist.penalize ?? [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Legacy support\n\t\t\t\t\t\ttitleBlacklist = parsedPreferences.titleBlacklist ?? [];\n\t\t\t\t\t\tcompanyBlacklist = parsedPreferences.companyBlacklist ?? [];\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// If parsing fails, keep empty arrays\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcv,\n\t\t\t\tjob_preferences: parsedPreferences,\n\t\t\t\tcv_updated_at,\n\t\t\t\tsearchJobTitles: searchJobTitles.join(', '),\n\t\t\t\tlocations: locations.join(', '),\n\t\t\t\ttitleBlacklist: titleBlacklist.join(', '),\n\t\t\t\tcompanyBlacklist: companyBlacklist.join(', '),\n\t\t\t\tpenalize: penalize.join(', '),\n\t\t\t};\n\t\t}\n\n\t\tif (operation === 'update') {\n\t\t\tconst updateFields = executeFunctions.getNodeParameter('updateFields', itemIndex);\n\n\t\t\tconst response = await executeFunctions.helpers.httpRequestWithAuthentication.call(\n\t\t\t\texecuteFunctions,\n\t\t\t\t'inNotesApi',\n\t\t\t\t{\n\t\t\t\t\tmethod: 'PUT' as IHttpRequestMethods,\n\t\t\t\t\turl: `${baseUrl}/api/user`,\n\t\t\t\t\tbody: updateFields,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAccept: 'application/json',\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"user\"! Supported operations: get, getCv, update`,\n\t\t});\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../nodes/InNotes/InNotes.node.ts"],"names":[],"mappings":"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","file":"InNotes.node.js","sourcesContent":["/**\n * @author Marco\n * @date 2026-09-09\n */\n\nimport {\n\tIDataObject,\n\tIExecuteFunctions,\n\tIHttpRequestMethods,\n\tILoadOptionsFunctions,\n\tINodeExecutionData,\n\tINodePropertyOptions,\n\tINodeType,\n\tINodeTypeDescription,\n\tNodeApiError,\n} from 'n8n-workflow';\n\nimport {contactFields, contactOperations} from '../../descriptions/ContactDescription';\nimport {noteFields, noteOperations} from '../../descriptions/NoteDescription';\nimport {jobFields, jobOperations} from '../../descriptions/JobDescription';\nimport {statusFields, statusOperations} from '../../descriptions/StatusDescription';\nimport {tagFields, tagOperations} from '../../descriptions/TagDescription';\nimport {userFields, userOperations} from '../../descriptions/UserDescription';\nimport {automationFields, automationOperations} from '../../descriptions/AutomationDescription';\nimport {IContactDetail} from '../../types/InNotesTypes';\n\ntype InNotesApiContext = IExecuteFunctions | ILoadOptionsFunctions;\n\n/**\n * One authenticated call to the InNotes API.\n *\n * `Content-Type` is derived from the presence of a body and `qs` is spread only\n * when given: that is what every call site sent before this helper existed, and\n * a header or an empty `qs` added here would change all of them at once.\n *\n * HTTP only: response normalisation and every catch block stay at the call site.\n *\n * @author Marco\n * @date 2026-09-09\n */\nasync function apiRequest(\n\tctx: InNotesApiContext,\n\tmethod: IHttpRequestMethods,\n\tpath: string,\n\toptions: { qs?: IDataObject; body?: IDataObject } = {},\n): Promise<any> {\n\tconst credentials = await ctx.getCredentials('inNotesApi');\n\treturn ctx.helpers.httpRequestWithAuthentication.call(ctx, 'inNotesApi', {\n\t\tmethod,\n\t\turl: `${credentials.baseUrl as string}${path}`,\n\t\t...(options.qs ? { qs: options.qs } : {}),\n\t\t...(options.body ? { body: options.body } : {}),\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t...(options.body ? { 'Content-Type': 'application/json' } : {}),\n\t\t},\n\t});\n}\n\n/**\n * Fail on an unusable credential BEFORE entering a catch that would absorb it.\n *\n * `apiRequest` resolves the credential per request, i.e. inside whatever try the\n * caller wrote. Two of those catches answer a failure with a successful \"does not\n * exist\" item — one always, the other under continueOnFail — so a credential\n * fault resolved in there would report that the job does not exist. Call this\n * first at those sites; do not delete it because the result is unused.\n *\n * @author Marco\n * @date 2026-09-09\n */\nasync function assertCredentials(ctx: InNotesApiContext): Promise<void> {\n\tawait ctx.getCredentials('inNotesApi');\n}\n\n/**\n * Resolve a job status NAME to its numeric id, case-insensitively.\n *\n * The caller keeps the decision about what to do with the result: job create\n * drops a falsy id from the body, job update assigns it unconditionally. That\n * divergence predates this helper and is preserved unchanged; whether it was\n * ever intended is not established — see the two call sites.\n *\n * @author Marco\n * @date 2026-09-09\n */\nasync function resolveJobStatusId(\n\texecuteFunctions: IExecuteFunctions,\n\tstatusName: string,\n): Promise<number> {\n\ttry {\n\t\tconst statusResponse = await apiRequest(executeFunctions, 'GET', '/api/statuses', {\n\t\t\tqs: { type: 'job' },\n\t\t});\n\n\t\tconst statuses = Array.isArray(statusResponse) ? statusResponse : [statusResponse];\n\t\tconst matchingStatus = statuses.find((s: any) =>\n\t\t\ts.name?.toLowerCase() === statusName.toLowerCase(),\n\t\t);\n\n\t\tif (!matchingStatus) {\n\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\tmessage: `Status \"${statusName}\" not found. Available statuses: ${statuses.map((s: any) => s.name).join(', ')}`,\n\t\t\t});\n\t\t}\n\n\t\treturn parseInt(matchingStatus.id, 10);\n\t} catch (error) {\n\t\tif (error instanceof NodeApiError) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `Failed to lookup status \"${statusName}\": ${(error as Error).message}`,\n\t\t});\n\t}\n}\n\n/**\n * Turn the \"Phone & Email\" fixedCollection into the array the API takes.\n *\n * n8n hands a fixedCollection over as `{ entry: [{...}, ...] }`, and the update\n * operation posts its collection of fields straight through as the request body\n * — so without this the API would receive an object where it requires an array\n * and answer 400, for a field the user filled in correctly.\n *\n * Returns undefined when the field was never used, which leaves the stored\n * recapiti alone. Rows that were configured but are all unusable raise, on\n * update only — see `raiseWhenUnusable`.\n *\n * Undefined and NOT an empty array, deliberately. An empty array is a request to\n * DELETE every number and address the contact has, and a workflow run before its\n * upstream data arrived would quietly empty the field on a live contact and\n * answer 200. Clearing is not expressible through this node; the REST route and\n * the MCP tool both take an explicit `[]` for anyone who means it.\n * Author: Marco, August 10, 2026\n */\nexport function contactDetailsFromCollection(\n\traw: unknown,\n\traiseWhenUnusable = false,\n): IContactDetail[] | undefined {\n\tif (raw === undefined || raw === null) return undefined;\n\t// A fixedCollection can be set to an expression, and `{{ $json.contact_details }}`\n\t// carrying the API's own shape arrives as a bare array rather than {entry: [...]}.\n\t// Reading only `.entry` there returns undefined and writes nothing, under a 200.\n\tconst entries = Array.isArray(raw) ? raw : (raw as IDataObject).entry;\n\tif (!Array.isArray(entries) || entries.length === 0) return undefined;\n\n\tconst details = entries\n\t\t.map((entry) => {\n\t\t\tconst row = entry as IDataObject;\n\t\t\tconst label = typeof row.label === 'string' ? row.label.trim() : '';\n\t\t\t// Coerced, not discarded: an expression is the normal way to fill this\n\t\t\t// in, and `{{ $json.phone }}` resolving to a NUMBER is a filled-in row.\n\t\t\tconst value = row.value === undefined || row.value === null ? '' : String(row.value).trim();\n\t\t\treturn {type: row.type, value, ...(label ? {label} : {})} as IContactDetail;\n\t\t})\n\t\t// `type` is a dropdown but expression-settable, so a workflow can resolve\n\t\t// it to 'mobile'. Dropping beats defaulting to email, which would send a\n\t\t// phone number as an address and earn a 400 about the value, not the type.\n\t\t.filter((detail) => detail.value !== '' && (detail.type === 'email' || detail.type === 'phone'));\n\n\t// Rows were configured and none survived. On UPDATE that has to raise: the\n\t// field would be deleted from the body, nothing would be written, and the\n\t// node would report 200 to an operator who filled in three rows.\n\t//\n\t// On CREATE it must NOT raise. There the contact itself is the point and the\n\t// recapiti are optional, so a row whose expression resolved to \"\" for this\n\t// item would abort the whole create — importing 100 contacts would silently\n\t// skip the 30 with no phone number. Author: Marco, 2026-08-10\n\tif (details.length === 0) {\n\t\tif (raiseWhenUnusable) {\n\t\t\tthrow new Error(\n\t\t\t\t'Phone & Email: no usable entry. Each row needs a Value, and a Type of exactly \"email\" or \"phone\".',\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\treturn details;\n}\n\nexport class InNotes implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'InNotes',\n\t\tname: 'inNotes',\n\t\ticon: 'file:Logo_128.png',\n\t\tgroup: ['output'],\n\t\tversion: 1,\n\t\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\t\tdescription: 'Consume InNotes CRM API',\n\t\tdefaults: {\n\t\t\tname: 'InNotes',\n\t\t},\n\t\tinputs: ['main'],\n\t\toutputs: ['main'],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'inNotesApi',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Automation',\n\t\t\t\t\t\tvalue: 'automation',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Contact',\n\t\t\t\t\t\tvalue: 'contact',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Note',\n\t\t\t\t\t\tvalue: 'note',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Job',\n\t\t\t\t\t\tvalue: 'job',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Status',\n\t\t\t\t\t\tvalue: 'status',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Tag',\n\t\t\t\t\t\tvalue: 'tag',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'User',\n\t\t\t\t\t\tvalue: 'user',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'contact',\n\t\t\t},\n\t\t\t...automationOperations,\n\t\t\t...contactOperations,\n\t\t\t...noteOperations,\n\t\t\t...jobOperations,\n\t\t\t...statusOperations,\n\t\t\t...tagOperations,\n\t\t\t...userOperations,\n\t\t\t...automationFields,\n\t\t\t...contactFields,\n\t\t\t...noteFields,\n\t\t\t...jobFields,\n\t\t\t...statusFields,\n\t\t\t...tagFields,\n\t\t\t...userFields,\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add Option',\n\t\t\t\tdefault: {},\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Batch Size',\n\t\t\t\t\t\tname: 'batchSize',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tdefault: 10,\n\t\t\t\t\t\tdescription: 'Number of items to process in each batch (to avoid rate limiting)',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tminValue: 1,\n\t\t\t\t\t\t\tmaxValue: 100,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Timeout Between Batches (ms)',\n\t\t\t\t\t\tname: 'timeoutBetweenBatches',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tdefault: 1000,\n\t\t\t\t\t\tdescription: 'Delay in milliseconds between processing batches (to avoid rate limiting)',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tminValue: 0,\n\t\t\t\t\t\t\tmaxValue: 30000,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n\n\tmethods = {\n\t\tloadOptions: {\n\t\t\tasync jobStatuses(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await apiRequest(this, 'GET', '/api/statuses', {\n\t\t\t\t\t\tqs: { type: 'job' },\n\t\t\t\t\t});\n\n\t\t\t\t\tconst statuses = Array.isArray(response) ? response : [response];\n\t\t\t\t\treturn statuses.map((status: any) => ({\n\t\t\t\t\t\tname: status.name,\n\t\t\t\t\t\tvalue: status.name,\n\t\t\t\t\t}));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\t\t\tmessage: `Failed to load job statuses: ${(error as Error).message}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: IDataObject[] = [];\n\t\tconst resource = this.getNodeParameter('resource', 0);\n\t\tconst operation = this.getNodeParameter('operation', 0);\n\n\t\t// Get batch options\n\t\tconst options = this.getNodeParameter('options', 0, {}) as IDataObject;\n\t\tconst batchSize = options.batchSize as number || 10;\n\t\tconst timeoutBetweenBatches = options.timeoutBetweenBatches as number || 1000;\n\n\t\t// Create a node instance to access the methods\n\t\tconst nodeInstance = new InNotes();\n\n\t\t// Helper function to add delay between batches\n\t\tconst delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\n\t\tif (resource === 'job' && operation === 'batchExists') {\n\t\t\t// Under continueOnFail the catch in the loop answers a failure with\n\t\t\t// exists:false for every id.\n\t\t\tawait assertCredentials(this);\n\t\t\tconst batchLimit = 200;\n\n\t\t\tconst idsRaw = this.getNodeParameter('ids', 0, '') as string;\n\t\t\tconst allExtIds = idsRaw.split(',').map(id => id.trim()).filter(id => id.length > 0);\n\n\t\t\tif (allExtIds.length === 0) {\n\t\t\t\treturn [this.helpers.returnJsonArray([{ error: 'No valid IDs provided' }])];\n\t\t\t}\n\n\t\t\tconst allResults: Record<string, boolean> = {};\n\n\t\t\tfor (let offset = 0; offset < allExtIds.length; offset += batchLimit) {\n\t\t\t\tconst chunk = allExtIds.slice(offset, offset + batchLimit);\n\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await apiRequest(this, 'POST', '/api/job/batch-exists', {\n\t\t\t\t\t\tbody: { ext_ids: chunk },\n\t\t\t\t\t});\n\n\t\t\t\t\tconst results = (response as IDataObject).results as Record<string, boolean> ?? {};\n\t\t\t\t\tObject.assign(allResults, results);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\t\tfor (const extId of chunk) {\n\t\t\t\t\t\t\tallResults[extId] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const extId of allExtIds) {\n\t\t\t\treturnData.push({\n\t\t\t\t\text_id: extId,\n\t\t\t\t\texists: allResults[extId] ?? false,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn [this.helpers.returnJsonArray(returnData)];\n\t\t}\n\n\t\t// Process items in batches\n\t\tfor (let batchStart = 0; batchStart < items.length; batchStart += batchSize) {\n\t\t\tconst batchEnd = Math.min(batchStart + batchSize, items.length);\n\t\t\tconst currentBatch = items.slice(batchStart, batchEnd);\n\n\t\t\t// Process current batch\n\t\t\tfor (let i = 0; i < currentBatch.length; i++) {\n\t\t\t\tconst actualIndex = batchStart + i;\n\t\t\t\ttry {\n\t\t\t\t\tlet responseData: IDataObject | IDataObject[] = {};\n\n\t\t\t\t\tif (resource === 'automation') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeAutomationOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'contact') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeContactOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'note') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeNoteOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'job') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeJobOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'status') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeStatusOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'tag') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeTagOperation(this, actualIndex, operation);\n\t\t\t\t\t} else if (resource === 'user') {\n\t\t\t\t\t\tresponseData = await nodeInstance.executeUserOperation(this, actualIndex, operation);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Array.isArray(responseData)) {\n\t\t\t\t\t\treturnData.push(...responseData);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturnData.push(responseData);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\t\treturnData.push({ error: (error as Error).message });\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add delay between batches (except after the last batch)\n\t\t\tif (batchEnd < items.length && timeoutBetweenBatches > 0) {\n\t\t\t\tawait delay(timeoutBetweenBatches);\n\t\t\t}\n\t\t}\n\n\t\treturn [this.helpers.returnJsonArray(returnData)];\n\t}\n\n\tprivate async executeAutomationOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tif (operation === 'getConfig') {\n\t\t\ttry {\n\t\t\t\tconst response = await apiRequest(executeFunctions, 'GET', '/api/automation/config');\n\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to get automation config: ${(error as Error).message}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'reportJobCreated') {\n\t\t\tconst jobsAdded = executeFunctions.getNodeParameter('jobsAdded', itemIndex, 1) as number;\n\t\t\tconst status = executeFunctions.getNodeParameter('status', itemIndex, 'success') as string;\n\t\t\tconst errorMessage = executeFunctions.getNodeParameter('errorMessage', itemIndex, '') as string;\n\n\t\t\t// Get the callback secret from credentials\n\t\t\tconst credentials = await executeFunctions.getCredentials('inNotesApi');\n\t\t\tconst callbackSecret = credentials.callbackSecret as string;\n\t\t\tif (!callbackSecret) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: 'Callback secret not configured in InNotes API credentials. Please add the callback secret to your credentials.',\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Get user ID from the API\n\t\t\tlet userId: string;\n\t\t\ttry {\n\t\t\t\tconst userResponse = await apiRequest(executeFunctions, 'GET', '/api/user');\n\t\t\t\tuserId = userResponse.id;\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to get user ID: ${(error as Error).message}`,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst body: IDataObject = {\n\t\t\t\tuserId,\n\t\t\t\tstatus,\n\t\t\t\tjobsAdded,\n\t\t\t\tsecret: callbackSecret,\n\t\t\t\t...(status === 'error' && errorMessage && { error: errorMessage }),\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst response = await apiRequest(executeFunctions, 'POST', '/api/automation/callback', { body });\n\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\t...response,\n\t\t\t\t\tjobsAdded,\n\t\t\t\t\tstatus,\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to report job created: ${(error as Error).message}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"automation\"!`,\n\t\t});\n\t}\n\n\tprivate async executeContactOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tif (operation === 'create') {\n\t\t\tconst name = executeFunctions.getNodeParameter('name', itemIndex) as string;\n\t\t\tconst linkedin_key = executeFunctions.getNodeParameter('linkedin_key', itemIndex) as string;\n\t\t\tconst linkedin_user = executeFunctions.getNodeParameter('linkedin_user', itemIndex, '') as string;\n\t\t\tconst location = executeFunctions.getNodeParameter('location', itemIndex, '') as string;\n\t\t\tconst current_company = executeFunctions.getNodeParameter('current_company', itemIndex, '') as string;\n\t\t\tconst picture_url = executeFunctions.getNodeParameter('picture_url', itemIndex, '') as string;\n\t\t\tconst tags = executeFunctions.getNodeParameter('tags', itemIndex, '') as string;\n\t\t\tconst status_id = executeFunctions.getNodeParameter('status_id', itemIndex, '') as string;\n\t\t\tconst contact_details = contactDetailsFromCollection(\n\t\t\t\texecuteFunctions.getNodeParameter('contact_details', itemIndex, {}),\n\t\t\t);\n\n\t\t\tconst body: IDataObject = {\n\t\t\t\tname,\n\t\t\t\tlinkedin_key,\n\t\t\t\t...(linkedin_user && { linkedin_user }),\n\t\t\t\t...(location && { location }),\n\t\t\t\t...(current_company && { current_company }),\n\t\t\t\t...(picture_url && { picture_url }),\n\t\t\t\t...(tags && { tags: tags.split(',').map((tag: string) => tag.trim()) }),\n\t\t\t\t...(status_id && { status_id }),\n\t\t\t\t...(contact_details && { contact_details }),\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst response = await apiRequest(executeFunctions, 'POST', '/api/contacts', { body });\n\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\t// The COUNT, never the values: this object is interpolated into a\n\t\t\t\t// NodeApiError message and n8n persists execution data, so the\n\t\t\t\t// numbers and addresses would sit in a third party's workflow\n\t\t\t\t// history. Author: Marco, 2026-08-10\n\t\t\t\tconst requestParams = contact_details\n\t\t\t\t\t? { ...body, contact_details: `${contact_details.length} entr(y|ies)` }\n\t\t\t\t\t: body;\n\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to create contact: ${(error as Error).message}. Request parameters: ${JSON.stringify(requestParams, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'get') {\n\t\t\tconst contactId = executeFunctions.getNodeParameter('contactId', itemIndex) as string;\n\n\t\t\tconst response = await apiRequest(executeFunctions, 'GET', `/api/contacts/${contactId}`);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'getAll') {\n\t\t\tconst returnAll = executeFunctions.getNodeParameter('returnAll', itemIndex, false) as boolean;\n\t\t\tconst search = executeFunctions.getNodeParameter('search', itemIndex, '') as string;\n\t\t\tconst tags = executeFunctions.getNodeParameter('tags', itemIndex, '') as string;\n\n\t\t\tconst qs: IDataObject = {};\n\t\t\tif (search) qs.search = search;\n\t\t\tif (tags) qs.tags = tags;\n\n\t\t\tif (!returnAll) {\n\t\t\t\tconst limit = executeFunctions.getNodeParameter('limit', itemIndex, 24);\n\t\t\t\tqs.pageSize = limit;\n\t\t\t\tqs.page = 1;\n\t\t\t}\n\n\t\t\tconst response = await apiRequest(executeFunctions, 'GET', '/api/contacts', { qs });\n\n\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t}\n\n\t\tif (operation === 'update') {\n\t\t\tconst contactId = executeFunctions.getNodeParameter('contactId', itemIndex) as string;\n\t\t\tconst updateFields = executeFunctions.getNodeParameter('updateFields', itemIndex) as IDataObject;\n\n\t\t\t// The collection goes through as the request body verbatim, so the one\n\t\t\t// field whose n8n shape differs from the API's is rewritten here rather\n\t\t\t// than shipped as an object the route refuses.\n\t\t\t// Raises when rows were configured and none are usable: on update the\n\t\t\t// alternative is dropping the field and reporting success.\n\t\t\tconst contact_details = contactDetailsFromCollection(updateFields.contact_details, true);\n\t\t\tconst body: IDataObject = {\n\t\t\t\t...updateFields,\n\t\t\t\t...(contact_details ? {contact_details} : {}),\n\t\t\t};\n\t\t\tif (contact_details === undefined) delete body.contact_details;\n\n\t\t\tconst response = await apiRequest(executeFunctions, 'PUT', `/api/contacts/${contactId}`, { body });\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'delete') {\n\t\t\tconst contactId = executeFunctions.getNodeParameter('contactId', itemIndex) as string;\n\n\t\t\tawait apiRequest(executeFunctions, 'DELETE', `/api/contacts/${contactId}`);\n\n\t\t\treturn { success: true };\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"contact\"!`,\n\t\t});\n\t}\n\n\tprivate async executeNoteOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tif (operation === 'create') {\n\t\t\tconst content = executeFunctions.getNodeParameter('content', itemIndex) as string;\n\t\t\tconst contactId = executeFunctions.getNodeParameter('contactId', itemIndex) as string | number;\n\t\t\tconst visibility = executeFunctions.getNodeParameter('visibility', itemIndex, '') as string;\n\t\t\tconst ext_table_name = executeFunctions.getNodeParameter('ext_table_name', itemIndex, '') as string;\n\n\t\t\tconst body: IDataObject = {\n\t\t\t\tcontent,\n\t\t\t\tcontact_id: contactId,\n\t\t\t\t...(visibility && { visibility }),\n\t\t\t\t...(ext_table_name && { ext_table_name }),\n\t\t\t};\n\n\t\t\tconst response = await apiRequest(executeFunctions, 'POST', '/api/note', { body });\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'get') {\n\t\t\tconst noteId = executeFunctions.getNodeParameter('noteId', itemIndex) as string | number;\n\n\t\t\tconst response = await apiRequest(executeFunctions, 'GET', `/api/note/${noteId}`);\n\n\t\t\treturn response;\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"note\"!`,\n\t\t});\n\t}\n\n\tprivate async executeJobOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tif (operation === 'create') {\n\t\t\tconst name = executeFunctions.getNodeParameter('name', itemIndex) as string;\n\t\t\tconst company_name = executeFunctions.getNodeParameter('company_name', itemIndex) as string;\n\t\t\tconst status = executeFunctions.getNodeParameter('status', itemIndex, '') as string;\n\t\t\tconst description = executeFunctions.getNodeParameter('description', itemIndex, '') as string;\n\t\t\tconst location = executeFunctions.getNodeParameter('location', itemIndex, '') as string;\n\t\t\tconst remote_setting = executeFunctions.getNodeParameter('remote_setting', itemIndex, '') as string;\n\t\t\tconst company_url = executeFunctions.getNodeParameter('company_url', itemIndex, '') as string;\n\t\t\tconst provider = executeFunctions.getNodeParameter('provider', itemIndex, 'external') as string;\n\t\t\tconst url = executeFunctions.getNodeParameter('url', itemIndex, '') as string;\n\t\t\tconst ext_id = executeFunctions.getNodeParameter('ext_id', itemIndex, '') as string;\n\t\t\tconst picture_url = executeFunctions.getNodeParameter('picture_url', itemIndex, '') as string;\n\t\t\tconst tags = executeFunctions.getNodeParameter('tags', itemIndex, '') as string;\n\n\t\t\tlet status_id: number | undefined;\n\n\t\t\t// If status is provided, lookup the status ID\n\t\t\tif (status) {\n\t\t\t\tstatus_id = await resolveJobStatusId(executeFunctions, status);\n\t\t\t}\n\n\t\t\tconst body: IDataObject = {\n\t\t\t\tname,\n\t\t\t\tcompany_name,\n\t\t\t\t...(description && { description }),\n\t\t\t\t...(location && { location }),\n\t\t\t\t...(remote_setting && { remote_setting }),\n\t\t\t\t...(company_url && { company_url }),\n\t\t\t\t...(provider && { provider }),\n\t\t\t\t...(url && { url }),\n\t\t\t\t...(status_id && { status_id }),\n\t\t\t\t...(ext_id && { ext_id }),\n\t\t\t\t...(picture_url && picture_url !== 'Not Available' && { picture_url }),\n\t\t\t\t...(tags && { tags: tags.split(',').map((tag: string) => tag.trim()) }),\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst response = await apiRequest(executeFunctions, 'POST', '/api/job', { body });\n\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to create job: ${(error as Error).message}. Request parameters: ${JSON.stringify(body, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'get') {\n\t\t\tconst jobId = executeFunctions.getNodeParameter('jobId', itemIndex) as string | number;\n\n\t\t\ttry {\n\t\t\t\tconst response = await apiRequest(executeFunctions, 'GET', `/api/job/${jobId}`);\n\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to get job: ${(error as Error).message}. Request parameters: ${JSON.stringify({ jobId }, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'getAll') {\n\t\t\tconst returnAll = executeFunctions.getNodeParameter('returnAll', itemIndex, false) as boolean;\n\t\t\tconst search = executeFunctions.getNodeParameter('search', itemIndex, '') as string;\n\t\t\tconst tags = executeFunctions.getNodeParameter('tags', itemIndex, '') as string;\n\n\t\t\tconst qs: IDataObject = {};\n\t\t\tif (search) qs.search = search;\n\t\t\tif (tags) qs.tags = tags;\n\n\t\t\tif (!returnAll) {\n\t\t\t\tconst limit = executeFunctions.getNodeParameter('limit', itemIndex, 24);\n\t\t\t\tqs.pageSize = limit;\n\t\t\t\tqs.page = 1;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst response = await apiRequest(executeFunctions, 'GET', '/api/job', { qs });\n\n\t\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to get all jobs: ${(error as Error).message}. Request parameters: ${JSON.stringify({ returnAll, search, tags, queryParams: qs }, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'update') {\n\t\t\tconst jobId = executeFunctions.getNodeParameter('jobId', itemIndex) as string | number;\n\t\t\tconst updateFields = executeFunctions.getNodeParameter('updateFields', itemIndex);\n\n\t\t\t// Handle status string lookup if provided\n\t\t\tif (updateFields.status && typeof updateFields.status === 'string') {\n\t\t\t\tupdateFields.status_id = await resolveJobStatusId(executeFunctions, updateFields.status);\n\t\t\t\tdelete updateFields.status;\n\t\t\t}\n\n\t\t\t// Process tags if provided as comma-separated string\n\t\t\tif (updateFields.tags && typeof updateFields.tags === 'string') {\n\t\t\t\tupdateFields.tags = (updateFields.tags).split(',').map((tag: string) => tag.trim());\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst response = await apiRequest(executeFunctions, 'PUT', `/api/job/${jobId}`, { body: updateFields });\n\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to update job: ${(error as Error).message}. Request parameters: ${JSON.stringify({ jobId, updateFields }, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'delete') {\n\t\t\tconst jobId = executeFunctions.getNodeParameter('jobId', itemIndex) as string | number;\n\n\t\t\ttry {\n\t\t\t\tawait apiRequest(executeFunctions, 'DELETE', `/api/job/${jobId}`);\n\n\t\t\t\treturn { success: true };\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\t\t\tmessage: `Failed to delete job: ${(error as Error).message}. Request parameters: ${JSON.stringify({ jobId }, null, 2)}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (operation === 'search') {\n\t\t\tconst searchMethod = executeFunctions.getNodeParameter('searchMethod', itemIndex) as string;\n\t\t\tconst searchQuery = executeFunctions.getNodeParameter('searchQuery', itemIndex) as string;\n\t\t\tconst searchOptions = executeFunctions.getNodeParameter('searchOptions', itemIndex, {}) as IDataObject;\n\n\t\t\tconst qs: IDataObject = {};\n\n\t\t\t// Handle different search methods\n\t\t\tswitch (searchMethod) {\n\t\t\tcase 'general':\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t\tbreak;\n\t\t\tcase 'ext_id':\n\t\t\t\tqs.ext_id = searchQuery;\n\t\t\t\tbreak;\n\t\t\tcase 'title':\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t\tqs.searchField = 'title';\n\t\t\t\tbreak;\n\t\t\tcase 'company':\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t\tqs.searchField = 'company';\n\t\t\t\tbreak;\n\t\t\tcase 'location':\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t\tqs.searchField = 'location';\n\t\t\t\tbreak;\n\t\t\tcase 'description':\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t\tqs.searchField = 'description';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tqs.searchTerm = searchQuery;\n\t\t\t}\n\n\t\t\t// Add additional filter parameters\n\t\t\tif (searchOptions.remote_setting) qs.remote_setting = searchOptions.remote_setting;\n\t\t\tif (searchOptions.status) qs.status = searchOptions.status;\n\t\t\tif (searchOptions.tags) qs.tags = searchOptions.tags;\n\n\t\t\t// Set limit with default value\n\t\t\tconst limit = (searchOptions.limit as number) || 24;\n\t\t\tqs.pageSize = limit;\n\t\t\tqs.page = 1;\n\n\t\t\tconst response = await apiRequest(executeFunctions, 'GET', '/api/job', { qs });\n\n\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t}\n\n\t\tif (operation === 'exists') {\n\t\t\tconst id = executeFunctions.getNodeParameter('id', itemIndex) as string;\n\n\t\t\t// Both catches below treat any failure as \"not found\".\n\t\t\tawait assertCredentials(executeFunctions);\n\n\t\t\ttry {\n\t\t\t\t// First try to get by job ID\n\t\t\t\ttry {\n\t\t\t\t\tawait apiRequest(executeFunctions, 'GET', `/api/job/${id}`);\n\t\t\t\t\t// If we get here, the job exists by ID\n\t\t\t\t\treturn { exists: true, found_by: 'job_id', id };\n\t\t\t\t} catch {\n\t\t\t\t\t// Job not found by ID, try searching by ext_id\n\t\t\t\t\tconst searchResponse = await apiRequest(executeFunctions, 'GET', '/api/job', {\n\t\t\t\t\t\tqs: { ext_id: id },\n\t\t\t\t\t});\n\n\t\t\t\t\t// Check if any results were returned\n\t\t\t\t\tconst results = Array.isArray(searchResponse) ? searchResponse : [searchResponse];\n\t\t\t\t\tif (results.length > 0 && results[0]) {\n\t\t\t\t\t\treturn { exists: true, found_by: 'ext_id', id };\n\t\t\t\t\t}\n\n\t\t\t\t\t// Not found by either ID or ext_id\n\t\t\t\t\treturn { exists: false, id };\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// If there's an error during the search, return false\n\t\t\t\treturn { exists: false, id, error: (error as Error).message };\n\t\t\t}\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"job\"!`,\n\t\t});\n\t}\n\n\tprivate async executeStatusOperation(executeFunctions: IExecuteFunctions, itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tif (operation === 'create') {\n\t\t\tconst name = executeFunctions.getNodeParameter('name', itemIndex) as string;\n\t\t\tconst type = executeFunctions.getNodeParameter('type', itemIndex) as string;\n\n\t\t\tconst body: IDataObject = { name, type };\n\n\t\t\tconst response = await apiRequest(executeFunctions, 'POST', '/api/statuses', { body });\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'getAll') {\n\t\t\tconst type = executeFunctions.getNodeParameter('type', itemIndex, 'contact') as string;\n\n\t\t\tconst response = await apiRequest(executeFunctions, 'GET', '/api/statuses', { qs: { type } });\n\n\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"status\"!`,\n\t\t});\n\t}\n\n\tprivate async executeTagOperation(executeFunctions: IExecuteFunctions, _itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tif (operation === 'getAll') {\n\t\t\tconst response = await apiRequest(executeFunctions, 'GET', '/api/tags');\n\n\t\t\treturn Array.isArray(response) ? response : [response];\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"tag\"! Supported operations: getAll`,\n\t\t});\n\t}\n\n\tprivate async executeUserOperation(executeFunctions: IExecuteFunctions, _itemIndex: number, operation: string): Promise<IDataObject | IDataObject[]> {\n\t\tif (operation === 'get') {\n\t\t\tconst response = await apiRequest(executeFunctions, 'GET', '/api/user');\n\n\t\t\treturn response;\n\t\t}\n\n\t\tif (operation === 'getCv') {\n\t\t\tconst response = await apiRequest(executeFunctions, 'GET', '/api/user');\n\n\t\t\t// Return only CV-related fields\n\t\t\tconst { cv, job_preferences, cv_updated_at } = response;\n\n\t\t\t// Parse job_preferences if it's a JSON string\n\t\t\tlet parsedPreferences = null;\n\t\t\tlet searchJobTitles = [];\n\t\t\tlet locations = [];\n\t\t\tlet titleBlacklist = [];\n\t\t\tlet companyBlacklist = [];\n\t\t\tlet penalize = [];\n\n\t\t\tif (job_preferences) {\n\t\t\t\ttry {\n\t\t\t\t\tparsedPreferences = typeof job_preferences === 'string'\n\t\t\t\t\t\t? JSON.parse(job_preferences)\n\t\t\t\t\t\t: job_preferences;\n\n\t\t\t\t\tsearchJobTitles = parsedPreferences.searchJobTitles ?? [];\n\t\t\t\t\tlocations = parsedPreferences.locations ?? [];\n\n\t\t\t\t\t// Handle both new blacklist structure and legacy structure\n\t\t\t\t\tif (parsedPreferences.blacklist) {\n\t\t\t\t\t\ttitleBlacklist = parsedPreferences.blacklist.titleBlacklist ?? [];\n\t\t\t\t\t\tcompanyBlacklist = parsedPreferences.blacklist.companyBlacklist ?? [];\n\t\t\t\t\t\tpenalize = parsedPreferences.blacklist.penalize ?? [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Legacy support\n\t\t\t\t\t\ttitleBlacklist = parsedPreferences.titleBlacklist ?? [];\n\t\t\t\t\t\tcompanyBlacklist = parsedPreferences.companyBlacklist ?? [];\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// If parsing fails, keep empty arrays\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcv,\n\t\t\t\tjob_preferences: parsedPreferences,\n\t\t\t\tcv_updated_at,\n\t\t\t\tsearchJobTitles: searchJobTitles.join(', '),\n\t\t\t\tlocations: locations.join(', '),\n\t\t\t\ttitleBlacklist: titleBlacklist.join(', '),\n\t\t\t\tcompanyBlacklist: companyBlacklist.join(', '),\n\t\t\t\tpenalize: penalize.join(', '),\n\t\t\t};\n\t\t}\n\n\t\tthrow new NodeApiError(executeFunctions.getNode(), {\n\t\t\tmessage: `The operation \"${operation}\" is not supported for resource \"user\"! Supported operations: get, getCv`,\n\t\t});\n\t}\n}\n"]}
|
|
Binary file
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-innotes",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.18",
|
|
4
4
|
"description": "N8N node for InNotes CRM API integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -24,11 +24,9 @@
|
|
|
24
24
|
"yarn": ">=1.22.0"
|
|
25
25
|
},
|
|
26
26
|
"packageManager": "yarn@1.22.19",
|
|
27
|
-
"main": "index.js",
|
|
28
27
|
"scripts": {
|
|
29
28
|
"build": "gulp build",
|
|
30
29
|
"dev": "gulp dev",
|
|
31
|
-
"format": "prettier . --write",
|
|
32
30
|
"lint": "eslint .",
|
|
33
31
|
"lintfix": "eslint . --fix",
|
|
34
32
|
"test": "jest",
|
|
@@ -58,15 +56,12 @@
|
|
|
58
56
|
"gulp-sourcemaps": "^3.0.0",
|
|
59
57
|
"gulp-typescript": "^6.0.0-alpha.1",
|
|
60
58
|
"jest": "^30.4.2",
|
|
61
|
-
"n8n-core": "2.16.1",
|
|
62
59
|
"n8n-workflow": "2.16.0",
|
|
63
|
-
"prettier": "^3.0.3",
|
|
64
60
|
"ts-jest": "^29.1.1",
|
|
65
61
|
"typescript": "^6.0.3",
|
|
66
62
|
"typescript-eslint": "^8.58.0"
|
|
67
63
|
},
|
|
68
64
|
"peerDependencies": {
|
|
69
|
-
"n8n-core": "*",
|
|
70
65
|
"n8n-workflow": "*"
|
|
71
66
|
},
|
|
72
67
|
"resolutions": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../types/InNotesTypes.ts"],"names":[],"mappings":";AAAA;;;GAGG","file":"InNotesTypes.js","sourcesContent":["/**\n * @author Marco Visin\n * @date
|
|
1
|
+
{"version":3,"sources":["../types/InNotesTypes.ts"],"names":[],"mappings":";AAAA;;;GAGG","file":"InNotesTypes.js","sourcesContent":["/**\n * @author Marco Visin\n * @date 2026-09-08\n */\n\nexport interface IContactDetail {\n\ttype: 'email' | 'phone';\n\tvalue: string;\n\tlabel?: string | null;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-innotes",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.18",
|
|
4
4
|
"description": "N8N node for InNotes CRM API integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -24,11 +24,9 @@
|
|
|
24
24
|
"yarn": ">=1.22.0"
|
|
25
25
|
},
|
|
26
26
|
"packageManager": "yarn@1.22.19",
|
|
27
|
-
"main": "index.js",
|
|
28
27
|
"scripts": {
|
|
29
28
|
"build": "gulp build",
|
|
30
29
|
"dev": "gulp dev",
|
|
31
|
-
"format": "prettier . --write",
|
|
32
30
|
"lint": "eslint .",
|
|
33
31
|
"lintfix": "eslint . --fix",
|
|
34
32
|
"test": "jest",
|
|
@@ -58,15 +56,12 @@
|
|
|
58
56
|
"gulp-sourcemaps": "^3.0.0",
|
|
59
57
|
"gulp-typescript": "^6.0.0-alpha.1",
|
|
60
58
|
"jest": "^30.4.2",
|
|
61
|
-
"n8n-core": "2.16.1",
|
|
62
59
|
"n8n-workflow": "2.16.0",
|
|
63
|
-
"prettier": "^3.0.3",
|
|
64
60
|
"ts-jest": "^29.1.1",
|
|
65
61
|
"typescript": "^6.0.3",
|
|
66
62
|
"typescript-eslint": "^8.58.0"
|
|
67
63
|
},
|
|
68
64
|
"peerDependencies": {
|
|
69
|
-
"n8n-core": "*",
|
|
70
65
|
"n8n-workflow": "*"
|
|
71
66
|
},
|
|
72
67
|
"resolutions": {
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Author: Marco Visin
|
|
3
|
-
* Date: 2025-06-02
|
|
4
|
-
* Updated to support Bearer token authentication
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
IAuthenticateGeneric,
|
|
9
|
-
ICredentialTestRequest,
|
|
10
|
-
ICredentialType,
|
|
11
|
-
INodeProperties,
|
|
12
|
-
Icon,
|
|
13
|
-
} from 'n8n-workflow';
|
|
14
|
-
|
|
15
|
-
export class InNotesApi implements ICredentialType {
|
|
16
|
-
name = 'inNotesApi';
|
|
17
|
-
displayName = 'InNotes API';
|
|
18
|
-
documentationUrl = 'https://innotes.me';
|
|
19
|
-
icon: Icon = 'file:Logo_128.png';
|
|
20
|
-
properties: INodeProperties[] = [
|
|
21
|
-
{
|
|
22
|
-
displayName: 'Base URL',
|
|
23
|
-
name: 'baseUrl',
|
|
24
|
-
type: 'string',
|
|
25
|
-
default: 'https://innotes.me',
|
|
26
|
-
description: 'The base URL of your InNotes instance',
|
|
27
|
-
required: true,
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
displayName: 'Bearer Token',
|
|
31
|
-
name: 'token',
|
|
32
|
-
type: 'string',
|
|
33
|
-
typeOptions: {
|
|
34
|
-
password: true,
|
|
35
|
-
},
|
|
36
|
-
default: '',
|
|
37
|
-
description: 'Your InNotes API Bearer token. Generate one in your dashboard settings.',
|
|
38
|
-
required: true,
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
displayName: 'Callback Secret',
|
|
42
|
-
name: 'callbackSecret',
|
|
43
|
-
type: 'string',
|
|
44
|
-
typeOptions: {
|
|
45
|
-
password: true,
|
|
46
|
-
},
|
|
47
|
-
default: '',
|
|
48
|
-
// The old text said "Found in your InNotes dashboard automation
|
|
49
|
-
// settings". That screen exists (app/dashboard/profile/AutomationSettings)
|
|
50
|
-
// and renders no secret — the value is injected server-side when InNotes
|
|
51
|
-
// provisions the credential, and the identifier appears nowhere under
|
|
52
|
-
// app/ or components/. So the instruction could not be followed by
|
|
53
|
-
// anyone setting this up by hand, which is the only case it addressed.
|
|
54
|
-
//
|
|
55
|
-
// It does NOT say "optional, leave it empty" either: the node throws
|
|
56
|
-
// without it (InNotes.node.ts checks callbackSecret and raises
|
|
57
|
-
// NodeApiError before building the request), so that advice would break
|
|
58
|
-
// the very action the field exists for.
|
|
59
|
-
// Author: Marco — 2026-08-03
|
|
60
|
-
// Nor does it say the VALUE has to be obtained from somewhere. Since the
|
|
61
|
-
// callback started authenticating with the API token above, the server
|
|
62
|
-
// compares this secret only when no token is present — and the node
|
|
63
|
-
// always sends one. What still matters is that the field is non-empty,
|
|
64
|
-
// because the node checks that locally before it builds the request.
|
|
65
|
-
// Saying otherwise stranded anyone whose credential predates this field:
|
|
66
|
-
// provisioning writes it once and there is no back-fill.
|
|
67
|
-
description:
|
|
68
|
-
'Required for the "Report Job Created" action — the node refuses to run without a ' +
|
|
69
|
-
'value. InNotes fills it in automatically when it provisions your automation. If you ' +
|
|
70
|
-
'are setting this credential up by hand, any non-empty value will do: the callback ' +
|
|
71
|
-
'authenticates with the API token above.',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
displayName: 'Allowed Domains',
|
|
75
|
-
name: 'allowedDomains',
|
|
76
|
-
type: 'string',
|
|
77
|
-
default: '*',
|
|
78
|
-
description: 'Domains allowed to use this credential (use * for all)',
|
|
79
|
-
},
|
|
80
|
-
];
|
|
81
|
-
|
|
82
|
-
authenticate: IAuthenticateGeneric = {
|
|
83
|
-
type: 'generic',
|
|
84
|
-
properties: {
|
|
85
|
-
headers: {
|
|
86
|
-
'Authorization': '=Bearer {{$credentials.token}}',
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
test: ICredentialTestRequest = {
|
|
92
|
-
request: {
|
|
93
|
-
baseURL: '={{$credentials.baseUrl}}',
|
|
94
|
-
url: '/api/user',
|
|
95
|
-
method: 'GET',
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
}
|