@ixiam/n8n-nodes-civicrm 1.1.41 → 2.1.2
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/CiviCrmApi.credentials.js +1 -0
- package/dist/src/nodes/CiviCrm/CiviCrm.node.js +432 -422
- package/dist/src/nodes/transport/GenericFunctions.js +5 -5
- package/package.json +2 -5
- package/.release-it.json +0 -6
- package/credentials/CiviCrmApi.credentials.ts +0 -58
- package/credentials/CiviCrmApi.credentials.ts.bak +0 -52
- package/debug-auth.js +0 -94
- package/eslint.config.mjs +0 -3
- package/jest.config.cjs +0 -9
- package/reload-in-docker.md +0 -68
- package/src/index.ts +0 -12
- package/src/nodes/CiviCrm/CiviCrm.node.ts +0 -1257
- package/src/nodes/CiviCrm/civicrm.svg +0 -28
- package/src/nodes/CiviCrm/descriptions/generic.ts +0 -9
- package/src/nodes/CiviCrm/descriptions/resources.ts +0 -43
- package/src/nodes/transport/GenericFunctions.ts +0 -52
- package/sxkeychain erase +0 -7
- package/test/helpers/mockServer.ts +0 -27
- package/test/nodes/CiviCrm.test.ts +0 -67
- package/test/tsconfig.json +0 -10
- package/tsconfig.json +0 -23
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
<svg xml:space="preserve" style="max-height: 500px" viewBox="190.4982463465553 39.1683 70.07818371607516 70.33139999999999" y="0px" x="0px" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" id="Layer_1" version="1.1" width="70.07818371607516" height="70.33139999999999">
|
|
2
|
-
<style type="text/css">
|
|
3
|
-
.st0{fill:#086287;}
|
|
4
|
-
.st1{fill:#81C459;}
|
|
5
|
-
</style>
|
|
6
|
-
<g>
|
|
7
|
-
<g>
|
|
8
|
-
<g>
|
|
9
|
-
<path d="M216.26,104.26C216.26,104.26,216.26,104.26,216.26,104.26c-3.77-0.07-5.2-4.43-5.35-4.92l-12.85-42.11
				c-0.76-2.47-0.58-4.46,0.51-5.92c0.71-0.94,2.12-2.04,4.83-1.99c0.99,0.02,1.77,0.19,1.85,0.21l42.78,9.97
				c2.75,0.64,4.44,1.94,5.02,3.85c0.93,3.04-1.65,5.92-1.95,6.24l-29.94,32.12C219.57,103.43,217.91,104.29,216.26,104.26z
				 M203.19,53.73c-0.77-0.01-1.02,0.19-1.06,0.26c-0.22,0.31-0.26,0.44,0.19,1.93l12.85,42.11c0.29,0.9,0.76,1.74,1.18,1.77l0,0
				c0.01,0,0.52,0,1.57-1.13l29.94-32.12c0.55-0.61,1.06-1.6,0.95-1.9c-0.08-0.22-0.43-0.5-1.77-0.81l-42.78-9.97l0,0
				C204.24,53.87,203.7,53.74,203.19,53.73z" class="st0"/>
|
|
10
|
-
</g>
|
|
11
|
-
<g>
|
|
12
|
-
<path d="M211.45,100.83c-1.38,0.51-2.83,0.61-3.96,0.24c0,0,0,0,0,0c-3.57-1.17-3.68-5.74-3.68-6.26l0-41l4.21,0.94
				l0.02,40.15c0.01,0.94,0.25,1.84,0.83,1.94l0,0c0,0,0.3,0.09,1.15-0.3L211.45,100.83z M214.02,94.31l34.62-20.03
				c0.7-0.42,1.53-1.04,1.46-1.54c-0.01-0.07-0.17-0.52-0.92-1.05l2.9-3.3c1.64,1.25,2.47,2.71,2.47,4.35c0,3.17-3.3,5.17-3.68,5.39
				l-35.51,20.4L214.02,94.31z M245.14,69.42l-34.02-19.79c0,0-0.85-0.54-1.34-0.7c-0.73-0.24-1.08,0-1.15,0.05
				c-0.2,0.14-0.27,0.24-0.35,1.24l-4.38-0.82c0.24-1.82,0.95-3.17,2.12-4.03c0.95-0.69,2.62-1.33,5.19-0.5
				c0.94,0.31,1.63,0.7,1.71,0.74l35.39,20.42L245.14,69.42z" class="st1"/>
|
|
13
|
-
</g>
|
|
14
|
-
</g>
|
|
15
|
-
<g>
|
|
16
|
-
<path d="M183.02,66.82c-0.48-0.28-0.86-0.67-1.15-1.15c-0.28-0.48-0.42-1-0.42-1.57c0-0.56,0.14-1.09,0.42-1.57
			s0.66-0.86,1.15-1.15s1-0.42,1.57-0.42s1.09,0.14,1.57,0.42s0.86,0.66,1.15,1.15s0.42,1,0.42,1.57c0,0.57-0.14,1.09-0.42,1.57
			c-0.28,0.48-0.66,0.86-1.15,1.15s-1,0.42-1.57,0.42S183.5,67.1,183.02,66.82z M185.93,66.42c0.41-0.24,0.74-0.57,0.98-0.98
			c0.24-0.41,0.36-0.86,0.36-1.35c0-0.48-0.12-0.93-0.36-1.34c-0.24-0.41-0.57-0.73-0.98-0.98c-0.41-0.24-0.86-0.36-1.35-0.36
			c-0.48,0-0.93,0.12-1.34,0.36c-0.41,0.24-0.73,0.57-0.98,0.98c-0.24,0.41-0.36,0.85-0.36,1.34c0,0.49,0.12,0.94,0.36,1.35
			c0.24,0.41,0.57,0.74,0.98,0.98s0.85,0.36,1.34,0.36C185.07,66.79,185.52,66.66,185.93,66.42z M183.37,65.8
			c-0.06-0.05-0.08-0.12-0.08-0.21v-2.83c0-0.11,0.04-0.21,0.11-0.28s0.17-0.12,0.28-0.12h1.05c0.46,0,0.8,0.1,1.03,0.29
			s0.34,0.45,0.34,0.76c0,0.21-0.06,0.39-0.18,0.53c-0.12,0.14-0.28,0.25-0.46,0.32c0.16,0.06,0.3,0.18,0.42,0.35
			c0.12,0.18,0.18,0.42,0.18,0.74v0.24c0,0.08-0.03,0.15-0.09,0.21c-0.06,0.06-0.13,0.09-0.21,0.09s-0.15-0.03-0.21-0.09
			c-0.06-0.06-0.09-0.13-0.09-0.21v-0.16c0-0.25-0.04-0.46-0.11-0.63c-0.07-0.17-0.25-0.26-0.53-0.26h-0.95v1.06
			c0,0.08-0.03,0.15-0.09,0.21c-0.06,0.06-0.13,0.08-0.21,0.08C183.49,65.88,183.42,65.86,183.37,65.8z M184.7,64.02
			c0.25,0,0.45-0.05,0.6-0.15c0.15-0.1,0.22-0.25,0.22-0.44c0-0.18-0.06-0.32-0.19-0.42c-0.13-0.1-0.34-0.14-0.65-0.14h-0.81v1.15
			H184.7z" class="st0"/>
|
|
17
|
-
</g>
|
|
18
|
-
<g>
|
|
19
|
-
<path d="M31.72,88.55c-2.15-1.18-3.85-2.87-5.08-5.08c-1.23-2.21-1.85-4.79-1.85-7.74s0.62-5.53,1.85-7.74
			c1.23-2.21,2.93-3.9,5.08-5.08c2.15-1.18,4.58-1.77,7.29-1.77c1.84,0,3.49,0.22,4.94,0.65c1.45,0.43,2.89,1.06,4.33,1.87
			c0.6,0.32,0.89,0.84,0.89,1.54c0,0.41-0.15,0.77-0.45,1.08c-0.3,0.31-0.69,0.47-1.18,0.47c-0.27,0-0.51-0.05-0.73-0.16
			c-1.19-0.62-2.36-1.1-3.49-1.42c-1.14-0.32-2.45-0.49-3.94-0.49c-2.33,0-4.31,0.48-5.95,1.44c-1.64,0.96-2.87,2.28-3.7,3.94
			c-0.83,1.67-1.24,3.55-1.24,5.67s0.41,4,1.24,5.67c0.83,1.67,2.06,2.98,3.7,3.94c1.64,0.96,3.62,1.44,5.95,1.44
			c1.49,0,2.8-0.16,3.94-0.49c1.14-0.32,2.3-0.8,3.49-1.42c0.22-0.11,0.46-0.16,0.73-0.16c0.49,0,0.88,0.15,1.18,0.45
			c0.3,0.3,0.45,0.66,0.45,1.1c0,0.7-0.3,1.22-0.89,1.54c-1.44,0.81-2.88,1.44-4.33,1.87c-1.45,0.43-3.09,0.65-4.94,0.65
			C36.3,90.32,33.87,89.73,31.72,88.55z" class="st0"/>
|
|
20
|
-
<path d="M53.47,64.35c-0.41-0.41-0.61-0.89-0.61-1.46v-0.16c0-0.57,0.2-1.06,0.61-1.46c0.41-0.41,0.89-0.61,1.46-0.61
			h0.24c0.57,0,1.06,0.2,1.46,0.61s0.61,0.89,0.61,1.46v0.16c0,0.57-0.2,1.06-0.61,1.46c-0.41,0.41-0.89,0.61-1.46,0.61h-0.24
			C54.37,64.96,53.88,64.76,53.47,64.35z M53.72,89.58c-0.35-0.35-0.53-0.79-0.53-1.3V70.86c0-0.51,0.18-0.96,0.53-1.32
			c0.35-0.37,0.79-0.55,1.3-0.55c0.54,0,0.99,0.18,1.34,0.53c0.35,0.35,0.53,0.8,0.53,1.34v17.43c0,0.51-0.18,0.95-0.55,1.3
			c-0.37,0.35-0.81,0.53-1.32,0.53C54.5,90.11,54.07,89.94,53.72,89.58z" class="st0"/>
|
|
21
|
-
<path d="M68.5,89.69c-0.41-0.28-0.7-0.64-0.89-1.08l-7.07-16.9c-0.14-0.32-0.2-0.61-0.2-0.85
			c0-0.51,0.18-0.96,0.53-1.32c0.35-0.37,0.79-0.55,1.3-0.55c0.35,0,0.68,0.1,1,0.3c0.31,0.2,0.53,0.45,0.67,0.75l6.22,15.76
			l6.22-15.76c0.14-0.3,0.36-0.55,0.67-0.75c0.31-0.2,0.64-0.3,1-0.3c0.51,0,0.95,0.18,1.3,0.55c0.35,0.37,0.53,0.81,0.53,1.32
			c0,0.24-0.07,0.53-0.2,0.85l-7.07,16.9c-0.19,0.43-0.49,0.79-0.89,1.08s-0.85,0.43-1.34,0.43h-0.41
			C69.36,90.11,68.91,89.97,68.5,89.69z" class="st0"/>
|
|
22
|
-
<path d="M83.5,64.35c-0.41-0.41-0.61-0.89-0.61-1.46v-0.16c0-0.57,0.2-1.06,0.61-1.46c0.41-0.41,0.89-0.61,1.46-0.61
			h0.24c0.57,0,1.06,0.2,1.46,0.61s0.61,0.89,0.61,1.46v0.16c0,0.57-0.2,1.06-0.61,1.46c-0.41,0.41-0.89,0.61-1.46,0.61h-0.24
			C84.39,64.96,83.9,64.76,83.5,64.35z M83.74,89.58c-0.35-0.35-0.53-0.79-0.53-1.3V70.86c0-0.51,0.18-0.96,0.53-1.32
			c0.35-0.37,0.79-0.55,1.3-0.55c0.54,0,0.99,0.18,1.34,0.53c0.35,0.35,0.53,0.8,0.53,1.34v17.43c0,0.51-0.18,0.95-0.55,1.3
			c-0.37,0.35-0.81,0.53-1.32,0.53C84.53,90.11,84.09,89.94,83.74,89.58z" class="st0"/>
|
|
23
|
-
<path d="M97.65,88.55c-2.15-1.18-3.85-2.87-5.08-5.08c-1.23-2.21-1.85-4.79-1.85-7.74s0.62-5.53,1.85-7.74
			c1.23-2.21,2.93-3.9,5.08-5.08c2.15-1.18,4.58-1.77,7.29-1.77c1.84,0,3.49,0.22,4.94,0.65c1.45,0.43,2.89,1.06,4.33,1.87
			c0.6,0.32,0.89,0.84,0.89,1.54c0,0.41-0.15,0.77-0.45,1.08c-0.3,0.31-0.69,0.47-1.18,0.47c-0.27,0-0.51-0.05-0.73-0.16
			c-1.19-0.62-2.36-1.1-3.49-1.42c-1.14-0.32-2.45-0.49-3.94-0.49c-2.33,0-4.31,0.48-5.95,1.44c-1.64,0.96-2.87,2.28-3.7,3.94
			c-0.83,1.67-1.24,3.55-1.24,5.67s0.41,4,1.24,5.67c0.83,1.67,2.06,2.98,3.7,3.94c1.64,0.96,3.62,1.44,5.95,1.44
			c1.49,0,2.8-0.16,3.94-0.49c1.14-0.32,2.3-0.8,3.49-1.42c0.22-0.11,0.46-0.16,0.73-0.16c0.49,0,0.88,0.15,1.18,0.45
			c0.3,0.3,0.45,0.66,0.45,1.1c0,0.7-0.3,1.22-0.89,1.54c-1.44,0.81-2.88,1.44-4.33,1.87c-1.45,0.43-3.09,0.65-4.94,0.65
			C102.24,90.32,99.81,89.73,97.65,88.55z" class="st0"/>
|
|
24
|
-
<path d="M119.9,89.58c-0.35-0.35-0.53-0.79-0.53-1.3V63.42c0-0.51,0.18-0.96,0.53-1.32s0.79-0.55,1.3-0.55h9.47
			c3.68,0,6.45,0.76,8.29,2.28c1.84,1.52,2.76,3.51,2.76,5.97c0,1.62-0.45,3.11-1.36,4.45c-0.91,1.34-2.23,2.31-3.96,2.9
			c1.95,0.51,3.28,1.73,4,3.64c0.72,1.91,1.08,3.79,1.08,5.63v1.87c0,0.51-0.18,0.95-0.53,1.3c-0.35,0.35-0.79,0.53-1.3,0.53
			c-0.57,0-1.02-0.17-1.36-0.51c-0.34-0.34-0.51-0.78-0.51-1.32v-1.22c0-1.35-0.12-2.61-0.37-3.76s-0.83-2.18-1.75-3.09
			c-0.92-0.91-2.32-1.36-4.18-1.36h-8.41v9.43c0,0.51-0.18,0.95-0.55,1.3s-0.81,0.53-1.32,0.53
			C120.68,90.11,120.25,89.94,119.9,89.58z M130.42,75.37c2.33,0,4.18-0.46,5.55-1.38c1.37-0.92,2.05-2.22,2.05-3.9
			c0-1.62-0.59-2.87-1.77-3.74c-1.18-0.87-3.19-1.3-6.03-1.3h-7.15v10.32H130.42z" class="st0"/>
|
|
25
|
-
<path d="M146.71,89.58c-0.35-0.35-0.53-0.79-0.53-1.3V64.03c0-0.73,0.26-1.36,0.77-1.89
			c0.51-0.53,1.14-0.79,1.87-0.79h1.34c0.54,0,1.04,0.16,1.48,0.49c0.45,0.33,0.78,0.73,1,1.22l9.22,22.99l9.22-22.99
			c0.22-0.49,0.55-0.89,1-1.22c0.45-0.32,0.94-0.49,1.48-0.49h1.34c0.73,0,1.35,0.26,1.87,0.79c0.51,0.53,0.77,1.16,0.77,1.89v24.25
			c0,0.51-0.18,0.95-0.53,1.3c-0.35,0.35-0.79,0.53-1.3,0.53c-0.52,0-0.96-0.18-1.32-0.53c-0.37-0.35-0.55-0.79-0.55-1.3V65.21
			l-9.38,23.2c-0.22,0.51-0.56,0.93-1.04,1.24c-0.47,0.31-1,0.47-1.56,0.47s-1.09-0.16-1.56-0.47c-0.47-0.31-0.82-0.72-1.04-1.24
			l-9.38-23.2v23.08c0,0.51-0.18,0.95-0.55,1.3s-0.81,0.53-1.32,0.53C147.5,90.11,147.06,89.94,146.71,89.58z" class="st0"/>
|
|
26
|
-
</g>
|
|
27
|
-
</g>
|
|
28
|
-
</svg>
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { INodeProperties } from 'n8n-workflow';
|
|
2
|
-
export const genericFields: INodeProperties[] = [
|
|
3
|
-
{ displayName: 'Return All', name: 'returnAll', type: 'boolean', default: false, description: 'Whether to return all results or only up to a given limit.', displayOptions: { show: { operation: ['getMany'] } } },
|
|
4
|
-
{ displayName: 'Limit', name: 'limit', type: 'number', typeOptions: { minValue: 1, maxValue: 1000 }, default: 100, description: 'Max number of results to return.', displayOptions: { show: { operation: ['getMany'], returnAll: [false] } } },
|
|
5
|
-
{ displayName: 'Where (JSON)', name: 'whereJson', type: 'string', default: '', placeholder: `[["first_name","=","Alice"]]`, description: 'JSON array of arrays for filtering. Example: [["first_name","=","Alice"], ["contact_type","=","Individual"]]', displayOptions: { show: { operation: ['getMany'] } } },
|
|
6
|
-
];
|
|
7
|
-
export const upsertFields: INodeProperties[] = [
|
|
8
|
-
{ displayName: 'Fields', name: 'fields', type: 'fixedCollection', typeOptions: { multipleValues: true }, default: {}, description: 'Fields to set for the entity.', options: [{ name: 'field', displayName: 'Field', values: [{ displayName: 'Name', name: 'fieldName', type: 'string', default: '', description: 'Name of the field (e.g. first_name).' }, { displayName: 'Value', name: 'fieldValue', type: 'string', default: '', description: 'Value to set.' }] }], displayOptions: { show: { operation: ['create', 'update'] } } }
|
|
9
|
-
];
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import type { INodeProperties } from 'n8n-workflow';
|
|
2
|
-
|
|
3
|
-
//
|
|
4
|
-
// =======================
|
|
5
|
-
// RESOURCE SELECTOR
|
|
6
|
-
// =======================
|
|
7
|
-
//
|
|
8
|
-
export const resourceProp: INodeProperties = {
|
|
9
|
-
displayName: 'Resource',
|
|
10
|
-
name: 'resource',
|
|
11
|
-
type: 'options',
|
|
12
|
-
default: 'contact',
|
|
13
|
-
description: 'The entity to operate on. Choose "Custom API Call" to access any CiviCRM APIv4 entity not listed.',
|
|
14
|
-
options: [
|
|
15
|
-
{ name: 'Contact', value: 'contact' },
|
|
16
|
-
{ name: 'Membership', value: 'membership' },
|
|
17
|
-
{ name: 'Group', value: 'group' },
|
|
18
|
-
{ name: 'Relationship', value: 'relationship' },
|
|
19
|
-
{ name: 'Activity', value: 'activity' },
|
|
20
|
-
{ name: 'Custom API Call', value: 'customApi' },
|
|
21
|
-
],
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
//
|
|
25
|
-
// =======================
|
|
26
|
-
// OPERATION SELECTOR
|
|
27
|
-
// =======================
|
|
28
|
-
//
|
|
29
|
-
export const operationProp: INodeProperties = {
|
|
30
|
-
displayName: 'Operation',
|
|
31
|
-
name: 'operation',
|
|
32
|
-
type: 'options',
|
|
33
|
-
default: 'getMany',
|
|
34
|
-
noDataExpression: true,
|
|
35
|
-
description: 'The action to perform on the selected resource.',
|
|
36
|
-
options: [
|
|
37
|
-
{ name: 'Create', value: 'create' },
|
|
38
|
-
{ name: 'Delete', value: 'delete' },
|
|
39
|
-
{ name: 'Get', value: 'get' },
|
|
40
|
-
{ name: 'Get Many', value: 'getMany' },
|
|
41
|
-
{ name: 'Update', value: 'update' },
|
|
42
|
-
],
|
|
43
|
-
};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { IExecuteFunctions, IHttpRequestOptions, JsonObject } from 'n8n-workflow';
|
|
2
|
-
import { NodeApiError } from 'n8n-workflow';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Ejecuta una llamada a la API de CiviCRM v4 (Civi-Go)
|
|
6
|
-
* Usa form-urlencoded con el campo "params" serializado
|
|
7
|
-
*/
|
|
8
|
-
export async function civicrmApiRequest(
|
|
9
|
-
this: IExecuteFunctions,
|
|
10
|
-
method: 'POST',
|
|
11
|
-
path: string,
|
|
12
|
-
body: Record<string, unknown>,
|
|
13
|
-
) {
|
|
14
|
-
const credentials = await this.getCredentials('civiCrmApi');
|
|
15
|
-
const baseUrl = (credentials.baseUrl as string).replace(/\/$/, '');
|
|
16
|
-
|
|
17
|
-
const options: IHttpRequestOptions = {
|
|
18
|
-
method,
|
|
19
|
-
url: `${baseUrl}${path}`,
|
|
20
|
-
headers: {
|
|
21
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
22
|
-
},
|
|
23
|
-
// cuerpo plano como espera Civi-Go
|
|
24
|
-
body: {
|
|
25
|
-
params: JSON.stringify(body.params ?? body),
|
|
26
|
-
},
|
|
27
|
-
json: true,
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
const response = await this.helpers.httpRequestWithAuthentication.call(
|
|
32
|
-
this,
|
|
33
|
-
'civiCrmApi',
|
|
34
|
-
options,
|
|
35
|
-
);
|
|
36
|
-
return response;
|
|
37
|
-
} catch (error: unknown) {
|
|
38
|
-
throw new NodeApiError(this.getNode(), error as JsonObject);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Devuelve el cuerpo estándar para las llamadas API4 (plano)
|
|
44
|
-
*/
|
|
45
|
-
export function api4(
|
|
46
|
-
entity: string,
|
|
47
|
-
action: string,
|
|
48
|
-
params: Record<string, unknown> = {},
|
|
49
|
-
) {
|
|
50
|
-
// devolvemos los parámetros planos, no anidados
|
|
51
|
-
return params;
|
|
52
|
-
}
|
package/sxkeychain erase
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import http from "http";
|
|
2
|
-
|
|
3
|
-
export function startMockCiviServer(port = 5555) {
|
|
4
|
-
let lastRequestBody: any = null;
|
|
5
|
-
|
|
6
|
-
const server = http.createServer((req, res) => {
|
|
7
|
-
if (req.method === "POST") {
|
|
8
|
-
let data = "";
|
|
9
|
-
req.on("data", chunk => (data += chunk));
|
|
10
|
-
req.on("end", () => {
|
|
11
|
-
try {
|
|
12
|
-
const raw = decodeURIComponent(data.replace("params=", ""));
|
|
13
|
-
lastRequestBody = JSON.parse(raw) || {};
|
|
14
|
-
} catch {
|
|
15
|
-
lastRequestBody = data;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
res.writeHead(200, { "Content-Type": "application/json" });
|
|
19
|
-
res.end(JSON.stringify({ values: [{ id: 999, ...lastRequestBody }], is_error: 0 }));
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
return new Promise(resolve =>
|
|
25
|
-
server.listen(port, () => resolve({ server, lastRequest: () => lastRequestBody }))
|
|
26
|
-
);
|
|
27
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { CiviCrm } from "../../dist/nodes/CiviCrm/CiviCrm.node";
|
|
2
|
-
import type { IExecuteFunctions, INodeExecutionData } from "n8n-workflow";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Minimal mock context required by n8n for community node validation.
|
|
6
|
-
*/
|
|
7
|
-
function mockExecuteContext(items: any[]): IExecuteFunctions {
|
|
8
|
-
return {
|
|
9
|
-
// Mock de parámetros del nodo
|
|
10
|
-
getNodeParameter: jest.fn((name: string, _index: number, fallback: any) => {
|
|
11
|
-
const params: Record<string, any> = {
|
|
12
|
-
resource: "contact",
|
|
13
|
-
operation: "getMany",
|
|
14
|
-
returnAll: true,
|
|
15
|
-
whereJson: "[]",
|
|
16
|
-
};
|
|
17
|
-
return Object.prototype.hasOwnProperty.call(params, name) ? params[name] : fallback;
|
|
18
|
-
}) as any,
|
|
19
|
-
|
|
20
|
-
// Mock de credenciales
|
|
21
|
-
getCredentials: jest.fn(async () => ({
|
|
22
|
-
baseUrl: "https://mock",
|
|
23
|
-
apiToken: "123",
|
|
24
|
-
})) as any,
|
|
25
|
-
|
|
26
|
-
// Mock de llamadas HTTP (API4)
|
|
27
|
-
helpers: {
|
|
28
|
-
httpRequest: jest.fn(async () => ({
|
|
29
|
-
values: [{ id: 1 }],
|
|
30
|
-
})),
|
|
31
|
-
},
|
|
32
|
-
|
|
33
|
-
// Items de entrada
|
|
34
|
-
getInputData: jest.fn(() => items),
|
|
35
|
-
|
|
36
|
-
continueOnFail: jest.fn(() => false),
|
|
37
|
-
getExecutionId: () => "1",
|
|
38
|
-
} as unknown as IExecuteFunctions;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
describe("CiviCRM Node (n8n validation tests)", () => {
|
|
42
|
-
test("Node loads metadata", () => {
|
|
43
|
-
const node = new CiviCrm();
|
|
44
|
-
|
|
45
|
-
expect(node.description).toBeDefined();
|
|
46
|
-
expect(node.description.displayName).toBe("CiviCRM");
|
|
47
|
-
expect(Array.isArray(node.description.properties)).toBe(true);
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
test("Node executes minimal GET MANY", async () => {
|
|
51
|
-
const node = new CiviCrm();
|
|
52
|
-
|
|
53
|
-
const ctx = mockExecuteContext([{ json: {} }]);
|
|
54
|
-
|
|
55
|
-
const result = await node.execute.call(ctx);
|
|
56
|
-
|
|
57
|
-
// result es INodeExecutionData[][]
|
|
58
|
-
expect(result).toBeDefined();
|
|
59
|
-
expect(Array.isArray(result)).toBe(true);
|
|
60
|
-
expect(Array.isArray(result[0])).toBe(true);
|
|
61
|
-
|
|
62
|
-
const firstItem = result[0][0] as INodeExecutionData;
|
|
63
|
-
|
|
64
|
-
expect(firstItem.json).toBeDefined();
|
|
65
|
-
expect(firstItem.json.id).toBe(1);
|
|
66
|
-
});
|
|
67
|
-
});
|
package/test/tsconfig.json
DELETED
package/tsconfig.json
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"module": "CommonJS",
|
|
4
|
-
"target": "ES2019",
|
|
5
|
-
"lib": [
|
|
6
|
-
"ES2020"
|
|
7
|
-
],
|
|
8
|
-
"outDir": "dist",
|
|
9
|
-
"rootDir": ".",
|
|
10
|
-
"strict": true,
|
|
11
|
-
"esModuleInterop": true,
|
|
12
|
-
"resolveJsonModule": true,
|
|
13
|
-
"skipLibCheck": true
|
|
14
|
-
},
|
|
15
|
-
"include": [
|
|
16
|
-
"src/**/*",
|
|
17
|
-
"credentials/**/*"
|
|
18
|
-
],
|
|
19
|
-
"exclude": [
|
|
20
|
-
"node_modules",
|
|
21
|
-
"dist"
|
|
22
|
-
]
|
|
23
|
-
}
|