@limetech/n8n-nodes-lime 2.3.1-dev.1 → 2.5.0-dev.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/.github/workflows/lint.yml +1 -1
- package/.github/workflows/release.yml +16 -2
- package/.github/workflows/test-and-build.yml +0 -15
- package/.releaserc.json +1 -0
- package/CHANGELOG.md +42 -2
- package/dist/credentials/FortnoxApi.credentials.d.ts +9 -0
- package/dist/credentials/FortnoxApi.credentials.js +57 -0
- package/dist/credentials/FortnoxApi.credentials.js.map +1 -0
- package/dist/credentials/LimeCrmApi.credentials.d.ts +9 -0
- package/dist/credentials/LimeCrmApi.credentials.js +70 -0
- package/dist/credentials/LimeCrmApi.credentials.js.map +1 -0
- package/dist/credentials/index.d.ts +2 -0
- package/dist/credentials/index.js +19 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/nodes/errorHandling.d.ts +11 -0
- package/dist/nodes/errorHandling.js +20 -0
- package/dist/nodes/errorHandling.js.map +1 -0
- package/dist/nodes/fortnox/Fortnox.node.d.ts +5 -0
- package/dist/nodes/fortnox/Fortnox.node.js +95 -0
- package/dist/nodes/fortnox/Fortnox.node.js.map +1 -0
- package/dist/nodes/fortnox/Fortnox.node.json +18 -0
- package/dist/nodes/fortnox/FortnoxTrigger.node.d.ts +5 -0
- package/dist/nodes/fortnox/FortnoxTrigger.node.js +155 -0
- package/dist/nodes/fortnox/FortnoxTrigger.node.js.map +1 -0
- package/dist/nodes/fortnox/FortnoxTrigger.node.json +18 -0
- package/dist/nodes/fortnox/commons.d.ts +25 -0
- package/dist/nodes/fortnox/commons.js +44 -0
- package/dist/nodes/fortnox/commons.js.map +1 -0
- package/dist/nodes/fortnox/fortnoxLogo.svg +15 -0
- package/dist/nodes/fortnox/index.d.ts +6 -0
- package/dist/nodes/fortnox/index.js +23 -0
- package/dist/nodes/fortnox/index.js.map +1 -0
- package/dist/nodes/fortnox/model.d.ts +20 -0
- package/dist/nodes/fortnox/model.js +3 -0
- package/dist/nodes/fortnox/model.js.map +1 -0
- package/dist/nodes/fortnox/resources/customers/filterParameters.d.ts +2 -0
- package/dist/nodes/fortnox/resources/customers/filterParameters.js +31 -0
- package/dist/nodes/fortnox/resources/customers/filterParameters.js.map +1 -0
- package/dist/nodes/fortnox/resources/customers/index.d.ts +7 -0
- package/dist/nodes/fortnox/resources/customers/index.js +85 -0
- package/dist/nodes/fortnox/resources/customers/index.js.map +1 -0
- package/dist/nodes/fortnox/resources/customers/model.d.ts +99 -0
- package/dist/nodes/fortnox/resources/customers/model.js +3 -0
- package/dist/nodes/fortnox/resources/customers/model.js.map +1 -0
- package/dist/nodes/fortnox/resources/customers/operations/create.operation.d.ts +10 -0
- package/dist/nodes/fortnox/resources/customers/operations/create.operation.js +281 -0
- package/dist/nodes/fortnox/resources/customers/operations/create.operation.js.map +1 -0
- package/dist/nodes/fortnox/resources/customers/operations/delete.operation.d.ts +9 -0
- package/dist/nodes/fortnox/resources/customers/operations/delete.operation.js +38 -0
- package/dist/nodes/fortnox/resources/customers/operations/delete.operation.js.map +1 -0
- package/dist/nodes/fortnox/resources/customers/operations/get.operation.d.ts +10 -0
- package/dist/nodes/fortnox/resources/customers/operations/get.operation.js +38 -0
- package/dist/nodes/fortnox/resources/customers/operations/get.operation.js.map +1 -0
- package/dist/nodes/fortnox/resources/customers/operations/getAll.operation.d.ts +10 -0
- package/dist/nodes/fortnox/resources/customers/operations/getAll.operation.js +68 -0
- package/dist/nodes/fortnox/resources/customers/operations/getAll.operation.js.map +1 -0
- package/dist/nodes/fortnox/resources/customers/operations/index.d.ts +5 -0
- package/dist/nodes/fortnox/resources/customers/operations/index.js +42 -0
- package/dist/nodes/fortnox/resources/customers/operations/index.js.map +1 -0
- package/dist/nodes/fortnox/resources/customers/operations/update.operation.d.ts +10 -0
- package/dist/nodes/fortnox/resources/customers/operations/update.operation.js +261 -0
- package/dist/nodes/fortnox/resources/customers/operations/update.operation.js.map +1 -0
- package/dist/nodes/fortnox/resources/customers/sortParameters.d.ts +2 -0
- package/dist/nodes/fortnox/resources/customers/sortParameters.js +30 -0
- package/dist/nodes/fortnox/resources/customers/sortParameters.js.map +1 -0
- package/dist/nodes/fortnox/resources/invoice/filterParameters.d.ts +2 -0
- package/dist/nodes/fortnox/resources/invoice/filterParameters.js +72 -0
- package/dist/nodes/fortnox/resources/invoice/filterParameters.js.map +1 -0
- package/dist/nodes/fortnox/resources/invoice/index.d.ts +7 -0
- package/dist/nodes/fortnox/resources/invoice/index.js +81 -0
- package/dist/nodes/fortnox/resources/invoice/index.js.map +1 -0
- package/dist/nodes/fortnox/resources/invoice/invoiceParameters.d.ts +2 -0
- package/dist/nodes/fortnox/resources/invoice/invoiceParameters.js +193 -0
- package/dist/nodes/fortnox/resources/invoice/invoiceParameters.js.map +1 -0
- package/dist/nodes/fortnox/resources/invoice/model.d.ts +147 -0
- package/dist/nodes/fortnox/resources/invoice/model.js +3 -0
- package/dist/nodes/fortnox/resources/invoice/model.js.map +1 -0
- package/dist/nodes/fortnox/resources/invoice/operations/create.operation.d.ts +10 -0
- package/dist/nodes/fortnox/resources/invoice/operations/create.operation.js +64 -0
- package/dist/nodes/fortnox/resources/invoice/operations/create.operation.js.map +1 -0
- package/dist/nodes/fortnox/resources/invoice/operations/get.operation.d.ts +10 -0
- package/dist/nodes/fortnox/resources/invoice/operations/get.operation.js +37 -0
- package/dist/nodes/fortnox/resources/invoice/operations/get.operation.js.map +1 -0
- package/dist/nodes/fortnox/resources/invoice/operations/getAll.operation.d.ts +10 -0
- package/dist/nodes/fortnox/resources/invoice/operations/getAll.operation.js +92 -0
- package/dist/nodes/fortnox/resources/invoice/operations/getAll.operation.js.map +1 -0
- package/dist/nodes/fortnox/resources/invoice/operations/index.d.ts +4 -0
- package/dist/nodes/fortnox/resources/invoice/operations/index.js +41 -0
- package/dist/nodes/fortnox/resources/invoice/operations/index.js.map +1 -0
- package/dist/nodes/fortnox/resources/invoice/operations/update.operation.d.ts +10 -0
- package/dist/nodes/fortnox/resources/invoice/operations/update.operation.js +64 -0
- package/dist/nodes/fortnox/resources/invoice/operations/update.operation.js.map +1 -0
- package/dist/nodes/fortnox/transport/errorCodes.d.ts +1 -0
- package/dist/nodes/fortnox/transport/errorCodes.js +50 -0
- package/dist/nodes/fortnox/transport/errorCodes.js.map +1 -0
- package/dist/nodes/fortnox/transport/index.d.ts +3 -0
- package/dist/nodes/fortnox/transport/index.js +76 -0
- package/dist/nodes/fortnox/transport/index.js.map +1 -0
- package/dist/nodes/index.d.ts +4 -0
- package/dist/nodes/index.js +21 -0
- package/dist/nodes/index.js.map +1 -0
- package/dist/nodes/lime-crm/LimeCrm.node.json +18 -0
- package/dist/nodes/lime-crm/LimeCrmNode.node.d.ts +19 -0
- package/dist/nodes/lime-crm/LimeCrmNode.node.js +122 -0
- package/dist/nodes/lime-crm/LimeCrmNode.node.js.map +1 -0
- package/dist/nodes/lime-crm/LimeCrmTrigger.node.d.ts +18 -0
- package/dist/nodes/lime-crm/LimeCrmTrigger.node.js +215 -0
- package/dist/nodes/lime-crm/LimeCrmTrigger.node.js.map +1 -0
- package/dist/nodes/lime-crm/assets/lime-crm.svg +1 -0
- package/dist/nodes/lime-crm/index.d.ts +9 -0
- package/dist/nodes/lime-crm/index.js +26 -0
- package/dist/nodes/lime-crm/index.js.map +1 -0
- package/dist/nodes/lime-crm/methods/getLimetypeProperties.d.ts +5 -0
- package/dist/nodes/lime-crm/methods/getLimetypeProperties.js +47 -0
- package/dist/nodes/lime-crm/methods/getLimetypeProperties.js.map +1 -0
- package/dist/nodes/lime-crm/methods/getLimetypes.d.ts +2 -0
- package/dist/nodes/lime-crm/methods/getLimetypes.js +20 -0
- package/dist/nodes/lime-crm/methods/getLimetypes.js.map +1 -0
- package/dist/nodes/lime-crm/methods/index.d.ts +3 -0
- package/dist/nodes/lime-crm/methods/index.js +15 -0
- package/dist/nodes/lime-crm/methods/index.js.map +1 -0
- package/dist/nodes/lime-crm/methods/resourceMapping.d.ts +4 -0
- package/dist/nodes/lime-crm/methods/resourceMapping.js +71 -0
- package/dist/nodes/lime-crm/methods/resourceMapping.js.map +1 -0
- package/dist/nodes/lime-crm/models/constants.d.ts +9 -0
- package/dist/nodes/lime-crm/models/constants.js +10 -0
- package/dist/nodes/lime-crm/models/constants.js.map +1 -0
- package/dist/nodes/lime-crm/models/index.d.ts +6 -0
- package/dist/nodes/lime-crm/models/index.js +13 -0
- package/dist/nodes/lime-crm/models/index.js.map +1 -0
- package/dist/nodes/lime-crm/models/limeobject.d.ts +4 -0
- package/dist/nodes/lime-crm/models/limeobject.js +3 -0
- package/dist/nodes/lime-crm/models/limeobject.js.map +1 -0
- package/dist/nodes/lime-crm/models/limetype.d.ts +24 -0
- package/dist/nodes/lime-crm/models/limetype.js +3 -0
- package/dist/nodes/lime-crm/models/limetype.js.map +1 -0
- package/dist/nodes/lime-crm/models/propertyTypes.d.ts +4 -0
- package/dist/nodes/lime-crm/models/propertyTypes.js +5 -0
- package/dist/nodes/lime-crm/models/propertyTypes.js.map +1 -0
- package/dist/nodes/lime-crm/models/users.d.ts +13 -0
- package/dist/nodes/lime-crm/models/users.js +3 -0
- package/dist/nodes/lime-crm/models/users.js.map +1 -0
- package/dist/nodes/lime-crm/models/webhook.d.ts +18 -0
- package/dist/nodes/lime-crm/models/webhook.js +3 -0
- package/dist/nodes/lime-crm/models/webhook.js.map +1 -0
- package/dist/nodes/lime-crm/resources/admin/index.d.ts +7 -0
- package/dist/nodes/lime-crm/resources/admin/index.js +89 -0
- package/dist/nodes/lime-crm/resources/admin/index.js.map +1 -0
- package/dist/nodes/lime-crm/resources/admin/operations/getManyUsers.operation.d.ts +11 -0
- package/dist/nodes/lime-crm/resources/admin/operations/getManyUsers.operation.js +123 -0
- package/dist/nodes/lime-crm/resources/admin/operations/getManyUsers.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/admin/operations/getSingleUser.operation.d.ts +11 -0
- package/dist/nodes/lime-crm/resources/admin/operations/getSingleUser.operation.js +87 -0
- package/dist/nodes/lime-crm/resources/admin/operations/getSingleUser.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/admin/operations/index.d.ts +2 -0
- package/dist/nodes/lime-crm/resources/admin/operations/index.js +39 -0
- package/dist/nodes/lime-crm/resources/admin/operations/index.js.map +1 -0
- package/dist/nodes/lime-crm/resources/data/index.d.ts +7 -0
- package/dist/nodes/lime-crm/resources/data/index.js +108 -0
- package/dist/nodes/lime-crm/resources/data/index.js.map +1 -0
- package/dist/nodes/lime-crm/resources/data/operations/createSingleObject.operation.d.ts +11 -0
- package/dist/nodes/lime-crm/resources/data/operations/createSingleObject.operation.js +124 -0
- package/dist/nodes/lime-crm/resources/data/operations/createSingleObject.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/data/operations/deleteSingleObject.operation.d.ts +10 -0
- package/dist/nodes/lime-crm/resources/data/operations/deleteSingleObject.operation.js +52 -0
- package/dist/nodes/lime-crm/resources/data/operations/deleteSingleObject.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/data/operations/getManyObjects.operation.d.ts +11 -0
- package/dist/nodes/lime-crm/resources/data/operations/getManyObjects.operation.js +299 -0
- package/dist/nodes/lime-crm/resources/data/operations/getManyObjects.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/data/operations/getSingleFile.operation.d.ts +9 -0
- package/dist/nodes/lime-crm/resources/data/operations/getSingleFile.operation.js +125 -0
- package/dist/nodes/lime-crm/resources/data/operations/getSingleFile.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/data/operations/getSingleObject.operation.d.ts +11 -0
- package/dist/nodes/lime-crm/resources/data/operations/getSingleObject.operation.js +79 -0
- package/dist/nodes/lime-crm/resources/data/operations/getSingleObject.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/data/operations/index.d.ts +6 -0
- package/dist/nodes/lime-crm/resources/data/operations/index.js +43 -0
- package/dist/nodes/lime-crm/resources/data/operations/index.js.map +1 -0
- package/dist/nodes/lime-crm/resources/data/operations/updateSingleObject.operation.d.ts +11 -0
- package/dist/nodes/lime-crm/resources/data/operations/updateSingleObject.operation.js +146 -0
- package/dist/nodes/lime-crm/resources/data/operations/updateSingleObject.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/metadata/index.d.ts +7 -0
- package/dist/nodes/lime-crm/resources/metadata/index.js +93 -0
- package/dist/nodes/lime-crm/resources/metadata/index.js.map +1 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/getAllLimetypes.operation.d.ts +10 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/getAllLimetypes.operation.js +16 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/getAllLimetypes.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/getSingleFileMetadata.operation.d.ts +11 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/getSingleFileMetadata.operation.js +113 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/getSingleFileMetadata.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/getSingleLimetype.operation.d.ts +11 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/getSingleLimetype.operation.js +37 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/getSingleLimetype.operation.js.map +1 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/index.d.ts +3 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/index.js +40 -0
- package/dist/nodes/lime-crm/resources/metadata/operations/index.js.map +1 -0
- package/dist/nodes/lime-crm/transport/commons.d.ts +14 -0
- package/dist/nodes/lime-crm/transport/commons.js +52 -0
- package/dist/nodes/lime-crm/transport/commons.js.map +1 -0
- package/dist/nodes/lime-crm/transport/files.d.ts +26 -0
- package/dist/nodes/lime-crm/transport/files.js +96 -0
- package/dist/nodes/lime-crm/transport/files.js.map +1 -0
- package/dist/nodes/lime-crm/transport/index.d.ts +7 -0
- package/dist/nodes/lime-crm/transport/index.js +32 -0
- package/dist/nodes/lime-crm/transport/index.js.map +1 -0
- package/dist/nodes/lime-crm/transport/limeQuery.d.ts +10 -0
- package/dist/nodes/lime-crm/transport/limeQuery.js +18 -0
- package/dist/nodes/lime-crm/transport/limeQuery.js.map +1 -0
- package/dist/nodes/lime-crm/transport/limeobjects.d.ts +16 -0
- package/dist/nodes/lime-crm/transport/limeobjects.js +76 -0
- package/dist/nodes/lime-crm/transport/limeobjects.js.map +1 -0
- package/dist/nodes/lime-crm/transport/limetypes.d.ts +33 -0
- package/dist/nodes/lime-crm/transport/limetypes.js +85 -0
- package/dist/nodes/lime-crm/transport/limetypes.js.map +1 -0
- package/dist/nodes/lime-crm/transport/users.d.ts +6 -0
- package/dist/nodes/lime-crm/transport/users.js +159 -0
- package/dist/nodes/lime-crm/transport/users.js.map +1 -0
- package/dist/nodes/lime-crm/transport/webhooks.d.ts +14 -0
- package/dist/nodes/lime-crm/transport/webhooks.js +51 -0
- package/dist/nodes/lime-crm/transport/webhooks.js.map +1 -0
- package/dist/nodes/lime-crm/utils/files.d.ts +8 -0
- package/dist/nodes/lime-crm/utils/files.js +103 -0
- package/dist/nodes/lime-crm/utils/files.js.map +1 -0
- package/dist/nodes/lime-crm/utils/hmac.d.ts +1 -0
- package/dist/nodes/lime-crm/utils/hmac.js +11 -0
- package/dist/nodes/lime-crm/utils/hmac.js.map +1 -0
- package/dist/nodes/lime-crm/utils/index.d.ts +4 -0
- package/dist/nodes/lime-crm/utils/index.js +16 -0
- package/dist/nodes/lime-crm/utils/index.js.map +1 -0
- package/dist/nodes/lime-crm/utils/webhook.d.ts +2 -0
- package/dist/nodes/lime-crm/utils/webhook.js +34 -0
- package/dist/nodes/lime-crm/utils/webhook.js.map +1 -0
- package/dist/nodes/modules.d.ts +12 -0
- package/dist/nodes/modules.js +16 -0
- package/dist/nodes/modules.js.map +1 -0
- package/dist/nodes/response.d.ts +18 -0
- package/dist/nodes/response.js +3 -0
- package/dist/nodes/response.js.map +1 -0
- package/dist/package.json +69 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/nodes/errorHandling.ts +60 -0
- package/nodes/lime-crm/LimeCrmNode.node.ts +8 -0
- package/nodes/lime-crm/LimeCrmTrigger.node.ts +19 -5
- package/nodes/lime-crm/methods/getLimetypeProperties.ts +3 -1
- package/nodes/lime-crm/methods/getLimetypes.ts +2 -1
- package/nodes/lime-crm/methods/index.ts +5 -0
- package/nodes/lime-crm/methods/resourceMapping.ts +141 -0
- package/nodes/lime-crm/models/limetype.ts +18 -0
- package/nodes/lime-crm/resources/admin/index.ts +9 -4
- package/nodes/lime-crm/resources/admin/operations/getManyUsers.operation.ts +10 -2
- package/nodes/lime-crm/resources/admin/operations/getSingleUser.operation.ts +14 -15
- package/nodes/lime-crm/resources/data/index.ts +15 -6
- package/nodes/lime-crm/resources/data/operations/createSingleObject.operation.ts +25 -71
- package/nodes/lime-crm/resources/data/operations/deleteSingleObject.operation.ts +7 -2
- package/nodes/lime-crm/resources/data/operations/getManyObjects.operation.ts +6 -2
- package/nodes/lime-crm/resources/data/operations/getSingleFile.operation.ts +15 -3
- package/nodes/lime-crm/resources/data/operations/getSingleObject.operation.ts +15 -6
- package/nodes/lime-crm/resources/data/operations/updateSingleObject.operation.ts +41 -57
- package/nodes/lime-crm/resources/metadata/index.ts +7 -3
- package/nodes/lime-crm/resources/metadata/operations/getAllLimetypes.operation.ts +6 -2
- package/nodes/lime-crm/resources/metadata/operations/getSingleFileMetadata.operation.ts +18 -15
- package/nodes/lime-crm/resources/metadata/operations/getSingleLimetype.operation.ts +8 -3
- package/nodes/lime-crm/transport/commons.ts +34 -20
- package/nodes/lime-crm/transport/files.ts +72 -47
- package/nodes/lime-crm/transport/limeQuery.ts +2 -2
- package/nodes/lime-crm/transport/limeobjects.ts +22 -10
- package/nodes/lime-crm/transport/limetypes.ts +37 -16
- package/nodes/lime-crm/transport/users.ts +74 -38
- package/nodes/lime-crm/transport/webhooks.ts +5 -4
- package/nodes/lime-crm/utils/files.ts +27 -10
- package/nodes/lime-crm/utils/index.ts +1 -1
- package/nodes/response.ts +41 -3
- package/package.json +4 -2
- package/tests/nodes/lime-crm/methods.spec.ts +91 -0
- package/tests/nodes/lime-crm/utils.spec.ts +60 -25
- package/nodes/lime-crm/utils/propertyAdapters.ts +0 -75
- package/restore_script/README +0 -42
- package/restore_script/api_key_upload.txt +0 -0
- package/restore_script/cli.py +0 -73
- package/restore_script/download.py +0 -73
- package/restore_script/main.py +0 -19
- package/restore_script/poetry.lock +0 -162
- package/restore_script/pyproject.toml +0 -15
- package/restore_script/transfer.py +0 -41
- package/restore_script/upload.py +0 -66
- package/restore_script/utils.py +0 -42
- /package/{restore_script/api_key_download.txt → Dockerfile} +0 -0
|
@@ -2,6 +2,7 @@ import { callLimeApi } from '.';
|
|
|
2
2
|
import { IAllExecuteFunctions } from 'n8n-workflow';
|
|
3
3
|
import { removeKeys } from './commons';
|
|
4
4
|
import { Limetype, LimetypeProperty } from '../models';
|
|
5
|
+
import { APIResponse } from '../../response';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Endpoint path for Lime CRM Limetype API.
|
|
@@ -113,7 +114,7 @@ function deserializeLimetype(limetype: LimetypeCrmApiResponse): Limetype {
|
|
|
113
114
|
*/
|
|
114
115
|
export async function getLimetypesFromApi(
|
|
115
116
|
nodeContext: IAllExecuteFunctions
|
|
116
|
-
): Promise<Limetype[]
|
|
117
|
+
): Promise<APIResponse<Limetype[]>> {
|
|
117
118
|
const response = await callLimeApi<LimetypesCrmApiResponse>(nodeContext, {
|
|
118
119
|
method: 'GET',
|
|
119
120
|
url: LIMETYPE_URL,
|
|
@@ -123,7 +124,16 @@ export async function getLimetypesFromApi(
|
|
|
123
124
|
},
|
|
124
125
|
},
|
|
125
126
|
});
|
|
126
|
-
|
|
127
|
+
if (response.success) {
|
|
128
|
+
return {
|
|
129
|
+
success: true,
|
|
130
|
+
data:
|
|
131
|
+
response.data._embedded?.limetypes.map(deserializeLimetype) ||
|
|
132
|
+
[],
|
|
133
|
+
};
|
|
134
|
+
} else {
|
|
135
|
+
return response;
|
|
136
|
+
}
|
|
127
137
|
}
|
|
128
138
|
|
|
129
139
|
/**
|
|
@@ -139,7 +149,7 @@ export async function getLimetypesFromApi(
|
|
|
139
149
|
export async function getLimetype(
|
|
140
150
|
nodeContext: IAllExecuteFunctions,
|
|
141
151
|
limetype: string
|
|
142
|
-
): Promise<Limetype
|
|
152
|
+
): Promise<APIResponse<Limetype>> {
|
|
143
153
|
const url = `${LIMETYPE_URL}${limetype}/`;
|
|
144
154
|
const response = await callLimeApi<LimetypeCrmApiResponse>(nodeContext, {
|
|
145
155
|
method: 'GET',
|
|
@@ -150,8 +160,14 @@ export async function getLimetype(
|
|
|
150
160
|
},
|
|
151
161
|
},
|
|
152
162
|
});
|
|
153
|
-
|
|
154
|
-
|
|
163
|
+
if (response.success) {
|
|
164
|
+
return {
|
|
165
|
+
success: true,
|
|
166
|
+
data: deserializeLimetype(response.data),
|
|
167
|
+
};
|
|
168
|
+
} else {
|
|
169
|
+
return response;
|
|
170
|
+
}
|
|
155
171
|
}
|
|
156
172
|
|
|
157
173
|
/**
|
|
@@ -167,7 +183,7 @@ export async function getLimetype(
|
|
|
167
183
|
export async function getProperties(
|
|
168
184
|
nodeContext: IAllExecuteFunctions,
|
|
169
185
|
limetype: string
|
|
170
|
-
): Promise<LimetypeProperty[]
|
|
186
|
+
): Promise<APIResponse<LimetypeProperty[]>> {
|
|
171
187
|
const url = `${LIMETYPE_URL}${limetype}/`;
|
|
172
188
|
const response = await callLimeApi<LimetypePropertiesApiResponse>(
|
|
173
189
|
nodeContext,
|
|
@@ -184,14 +200,19 @@ export async function getProperties(
|
|
|
184
200
|
},
|
|
185
201
|
}
|
|
186
202
|
);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
203
|
+
if (response.success) {
|
|
204
|
+
return {
|
|
205
|
+
success: true,
|
|
206
|
+
data:
|
|
207
|
+
response.data._embedded.properties.map(
|
|
208
|
+
(property) =>
|
|
209
|
+
removeKeys(property, [
|
|
210
|
+
'_links',
|
|
211
|
+
'_embedded',
|
|
212
|
+
]) as LimetypeProperty
|
|
213
|
+
) || [],
|
|
214
|
+
};
|
|
215
|
+
} else {
|
|
216
|
+
return response;
|
|
217
|
+
}
|
|
197
218
|
}
|
|
@@ -2,7 +2,7 @@ import { callLimeApi } from './commons';
|
|
|
2
2
|
import {
|
|
3
3
|
IAllExecuteFunctions,
|
|
4
4
|
LoggerProxy as Logger,
|
|
5
|
-
|
|
5
|
+
NodeApiError,
|
|
6
6
|
} from 'n8n-workflow';
|
|
7
7
|
import {
|
|
8
8
|
User,
|
|
@@ -14,7 +14,8 @@ import {
|
|
|
14
14
|
import { getLimetypesFromApi } from './limetypes';
|
|
15
15
|
import { queryLimeobjects, QueryResponse } from './limeQuery';
|
|
16
16
|
import { getLimeobject } from './limeobjects';
|
|
17
|
-
|
|
17
|
+
import { APIResponse } from '../../response';
|
|
18
|
+
import { handleWorkflowError } from '../../errorHandling';
|
|
18
19
|
const USERS_URL = 'api/v1/admin/users/';
|
|
19
20
|
|
|
20
21
|
type UserQueryParameters = {
|
|
@@ -49,21 +50,30 @@ function findCoworkerLimetype(limetypes: Limetype[]): Limetype | undefined {
|
|
|
49
50
|
*
|
|
50
51
|
* @param nodeContext - The n8n execution context
|
|
51
52
|
* @returns The coworker limetype object
|
|
52
|
-
* @throws
|
|
53
|
+
* @throws NodeApiError if no coworker limetype is found
|
|
53
54
|
* @internal
|
|
54
55
|
*/
|
|
55
56
|
async function findCoworker(
|
|
56
57
|
nodeContext: IAllExecuteFunctions
|
|
57
|
-
): Promise<Limetype
|
|
58
|
+
): Promise<APIResponse<Limetype>> {
|
|
58
59
|
const response = await getLimetypesFromApi(nodeContext);
|
|
59
|
-
|
|
60
|
+
if (!response.success) {
|
|
61
|
+
return response;
|
|
62
|
+
}
|
|
63
|
+
const coworker = findCoworkerLimetype(response.data);
|
|
60
64
|
if (!coworker) {
|
|
61
|
-
|
|
62
|
-
nodeContext
|
|
63
|
-
|
|
65
|
+
return handleWorkflowError(
|
|
66
|
+
nodeContext,
|
|
67
|
+
{
|
|
68
|
+
message: `No limetype with 'user' property found to get coworker`,
|
|
69
|
+
},
|
|
70
|
+
true
|
|
64
71
|
);
|
|
65
72
|
}
|
|
66
|
-
return
|
|
73
|
+
return {
|
|
74
|
+
success: true,
|
|
75
|
+
data: coworker,
|
|
76
|
+
};
|
|
67
77
|
}
|
|
68
78
|
|
|
69
79
|
/**
|
|
@@ -73,14 +83,14 @@ async function findCoworker(
|
|
|
73
83
|
* @param coworker - The limetype definition for the coworker
|
|
74
84
|
* @param userId - The ID of the user whose coworker data is to be fetched
|
|
75
85
|
* @returns The coworker data response from the Lime Query API
|
|
76
|
-
* @throws
|
|
86
|
+
* @throws NodeApiError' property is found in the coworker limetype
|
|
77
87
|
* @internal
|
|
78
88
|
*/
|
|
79
89
|
async function getCoworker(
|
|
80
90
|
nodeContext: IAllExecuteFunctions,
|
|
81
91
|
coworker: Limetype,
|
|
82
92
|
userId: string | number
|
|
83
|
-
): Promise<QueryResponse
|
|
93
|
+
): Promise<APIResponse<QueryResponse>> {
|
|
84
94
|
// 'hasmany' properties are not supported in the response format of Lime Query API
|
|
85
95
|
const properties = Object.fromEntries(
|
|
86
96
|
coworker.properties
|
|
@@ -92,10 +102,9 @@ async function getCoworker(
|
|
|
92
102
|
(prop) => prop.type === 'user'
|
|
93
103
|
);
|
|
94
104
|
if (!userProperty) {
|
|
95
|
-
throw new
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
);
|
|
105
|
+
throw new NodeApiError(nodeContext.getNode(), {
|
|
106
|
+
message: `No property of type 'user' found in ${coworker.name} limetype`,
|
|
107
|
+
});
|
|
99
108
|
}
|
|
100
109
|
|
|
101
110
|
const responseFormat = {
|
|
@@ -135,7 +144,7 @@ export async function fetchManyUsers(
|
|
|
135
144
|
userType: UserType | NullOptionType = '',
|
|
136
145
|
limit: number = DEFAULT_API_OBJECT_LIMIT,
|
|
137
146
|
withCoworker: boolean = false
|
|
138
|
-
): Promise<User[]
|
|
147
|
+
): Promise<APIResponse<User[]>> {
|
|
139
148
|
const queryParams: UserQueryParameters = {
|
|
140
149
|
_limit: limit,
|
|
141
150
|
};
|
|
@@ -154,23 +163,31 @@ export async function fetchManyUsers(
|
|
|
154
163
|
},
|
|
155
164
|
});
|
|
156
165
|
|
|
157
|
-
if (!withCoworker) return response;
|
|
158
|
-
|
|
166
|
+
if (!response.success || !withCoworker) return response;
|
|
167
|
+
|
|
168
|
+
const coworkerLimetypeResponse = await findCoworker(nodeContext);
|
|
169
|
+
if (!coworkerLimetypeResponse.success) return coworkerLimetypeResponse;
|
|
170
|
+
|
|
171
|
+
const coworkerLimetype = coworkerLimetypeResponse.data;
|
|
159
172
|
|
|
160
173
|
const usersWithCoworkers: User[] = [];
|
|
161
|
-
for (const user of response) {
|
|
174
|
+
for (const user of response.data) {
|
|
162
175
|
const coworkerResponse = await getCoworker(
|
|
163
176
|
nodeContext,
|
|
164
|
-
|
|
177
|
+
coworkerLimetype,
|
|
165
178
|
user.id
|
|
166
179
|
);
|
|
180
|
+
if (!coworkerResponse.success) return coworkerResponse;
|
|
167
181
|
usersWithCoworkers.push({
|
|
168
182
|
...user,
|
|
169
|
-
[
|
|
183
|
+
[coworkerLimetype.name]: coworkerResponse.data.objects[0] || null,
|
|
170
184
|
});
|
|
171
185
|
}
|
|
172
186
|
|
|
173
|
-
return
|
|
187
|
+
return {
|
|
188
|
+
success: true,
|
|
189
|
+
data: usersWithCoworkers,
|
|
190
|
+
};
|
|
174
191
|
}
|
|
175
192
|
|
|
176
193
|
/**
|
|
@@ -189,7 +206,7 @@ export async function fetchSingleUserById(
|
|
|
189
206
|
nodeContext: IAllExecuteFunctions,
|
|
190
207
|
id: string,
|
|
191
208
|
withCoworker: boolean = false
|
|
192
|
-
): Promise<User
|
|
209
|
+
): Promise<APIResponse<User>> {
|
|
193
210
|
const url = `${USERS_URL}${id}`;
|
|
194
211
|
const userResponse = await callLimeApi<User>(nodeContext, {
|
|
195
212
|
method: 'GET',
|
|
@@ -199,13 +216,21 @@ export async function fetchSingleUserById(
|
|
|
199
216
|
},
|
|
200
217
|
});
|
|
201
218
|
|
|
202
|
-
if (!withCoworker) return userResponse;
|
|
203
|
-
const
|
|
204
|
-
|
|
219
|
+
if (!userResponse.success || !withCoworker) return userResponse;
|
|
220
|
+
const coworkerLimetypeResponse = await findCoworker(nodeContext);
|
|
221
|
+
if (!coworkerLimetypeResponse.success) return coworkerLimetypeResponse;
|
|
222
|
+
|
|
223
|
+
const coworkerResponse = await getCoworker(
|
|
224
|
+
nodeContext,
|
|
225
|
+
coworkerLimetypeResponse.data,
|
|
226
|
+
id
|
|
227
|
+
);
|
|
228
|
+
if (!coworkerResponse.success) return coworkerResponse;
|
|
205
229
|
|
|
206
230
|
return {
|
|
207
231
|
...userResponse,
|
|
208
|
-
[
|
|
232
|
+
[coworkerLimetypeResponse.data.name]:
|
|
233
|
+
coworkerResponse.data.objects[0] || null,
|
|
209
234
|
};
|
|
210
235
|
}
|
|
211
236
|
|
|
@@ -228,25 +253,33 @@ export async function fetchSingleUserByLimeobjectId(
|
|
|
228
253
|
nodeContext: IAllExecuteFunctions,
|
|
229
254
|
id: string,
|
|
230
255
|
withCoworker: boolean = false
|
|
231
|
-
): Promise<User
|
|
232
|
-
const
|
|
256
|
+
): Promise<APIResponse<User>> {
|
|
257
|
+
const coworkerLimetypeResponse = await findCoworker(nodeContext);
|
|
258
|
+
if (!coworkerLimetypeResponse.success) return coworkerLimetypeResponse;
|
|
259
|
+
|
|
260
|
+
const coworkerLimetype = coworkerLimetypeResponse.data;
|
|
261
|
+
|
|
233
262
|
const coworkerResponse = await getLimeobject(
|
|
234
263
|
nodeContext,
|
|
235
|
-
|
|
264
|
+
coworkerLimetype.name,
|
|
236
265
|
id
|
|
237
266
|
);
|
|
267
|
+
if (!coworkerResponse.success) return coworkerResponse;
|
|
238
268
|
|
|
239
|
-
const userProperty =
|
|
269
|
+
const userProperty = coworkerLimetype.properties.find(
|
|
240
270
|
(prop) => prop.type === 'user'
|
|
241
271
|
);
|
|
242
272
|
if (!userProperty) {
|
|
243
|
-
|
|
244
|
-
nodeContext
|
|
245
|
-
|
|
273
|
+
return handleWorkflowError(
|
|
274
|
+
nodeContext,
|
|
275
|
+
{
|
|
276
|
+
message: `No property of type 'user' found in ${coworkerLimetype.name} limetype`,
|
|
277
|
+
},
|
|
278
|
+
true
|
|
246
279
|
);
|
|
247
280
|
}
|
|
248
281
|
|
|
249
|
-
const url = `${USERS_URL}${coworkerResponse[userProperty.name]}`;
|
|
282
|
+
const url = `${USERS_URL}${coworkerResponse.data[userProperty.name]}`;
|
|
250
283
|
const userResponse = await callLimeApi<User>(nodeContext, {
|
|
251
284
|
method: 'GET',
|
|
252
285
|
url: url,
|
|
@@ -255,10 +288,13 @@ export async function fetchSingleUserByLimeobjectId(
|
|
|
255
288
|
},
|
|
256
289
|
});
|
|
257
290
|
|
|
258
|
-
if (!withCoworker) return userResponse;
|
|
291
|
+
if (!userResponse.success || !withCoworker) return userResponse;
|
|
259
292
|
|
|
260
293
|
return {
|
|
261
|
-
|
|
262
|
-
|
|
294
|
+
success: true,
|
|
295
|
+
data: {
|
|
296
|
+
...userResponse.data,
|
|
297
|
+
[coworkerLimetype.name]: coworkerResponse.data || null,
|
|
298
|
+
},
|
|
263
299
|
};
|
|
264
300
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { callLimeApi } from '.';
|
|
2
2
|
import { IAllExecuteFunctions } from 'n8n-workflow';
|
|
3
3
|
import { CreateWebhook, Webhook } from '../models';
|
|
4
|
+
import { APIResponse } from '../../response';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Endpoint path for Lime CRM Subscription API.
|
|
@@ -44,7 +45,7 @@ export interface ApiResponseWebhook {
|
|
|
44
45
|
export async function getSubscription(
|
|
45
46
|
nodeContext: IAllExecuteFunctions,
|
|
46
47
|
webhook: Webhook
|
|
47
|
-
): Promise<ApiResponseWebhook
|
|
48
|
+
): Promise<APIResponse<ApiResponseWebhook>> {
|
|
48
49
|
return await callLimeApi(nodeContext, {
|
|
49
50
|
method: 'GET',
|
|
50
51
|
url: `${SUBSCRIPTION_URL}${webhook.data.webhookId}`,
|
|
@@ -65,7 +66,7 @@ export async function getSubscription(
|
|
|
65
66
|
export async function listSubscriptionsWithExistingData(
|
|
66
67
|
nodeContext: IAllExecuteFunctions,
|
|
67
68
|
webhook: Webhook
|
|
68
|
-
): Promise<ApiResponseWebhook[]
|
|
69
|
+
): Promise<APIResponse<ApiResponseWebhook[]>> {
|
|
69
70
|
return await callLimeApi(nodeContext, {
|
|
70
71
|
method: 'GET',
|
|
71
72
|
url: SUBSCRIPTION_URL,
|
|
@@ -93,7 +94,7 @@ export async function listSubscriptionsWithExistingData(
|
|
|
93
94
|
export async function createSubscription(
|
|
94
95
|
nodeContext: IAllExecuteFunctions,
|
|
95
96
|
webhook: CreateWebhook
|
|
96
|
-
): Promise<ApiResponseWebhook
|
|
97
|
+
): Promise<APIResponse<ApiResponseWebhook>> {
|
|
97
98
|
return await callLimeApi(nodeContext, {
|
|
98
99
|
method: 'POST',
|
|
99
100
|
url: SUBSCRIPTION_URL,
|
|
@@ -122,7 +123,7 @@ export async function createSubscription(
|
|
|
122
123
|
export async function deleteSubscription(
|
|
123
124
|
nodeContext: IAllExecuteFunctions,
|
|
124
125
|
webhook: Webhook
|
|
125
|
-
): Promise<void
|
|
126
|
+
): Promise<APIResponse<void>> {
|
|
126
127
|
return await callLimeApi(nodeContext, {
|
|
127
128
|
method: 'DELETE',
|
|
128
129
|
url: `${SUBSCRIPTION_URL}${webhook.data.webhookId}/`,
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
LoggerProxy as Logger,
|
|
6
6
|
} from 'n8n-workflow';
|
|
7
7
|
import { createFile, getFileContent, getFileMetadata } from '../transport';
|
|
8
|
-
import {
|
|
8
|
+
import { APIResponse, FileAPIResponse } from '../../response';
|
|
9
9
|
import { LimetypeProperty } from '../models';
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -121,7 +121,7 @@ export async function setFileProperties(
|
|
|
121
121
|
i: number,
|
|
122
122
|
fileProperties: Set<string>,
|
|
123
123
|
definedProperties: IDataObject
|
|
124
|
-
): Promise<IDataObject
|
|
124
|
+
): Promise<APIResponse<IDataObject>> {
|
|
125
125
|
for (const fileProperty of fileProperties) {
|
|
126
126
|
if (!(fileProperty in definedProperties)) continue;
|
|
127
127
|
let binaryData: IBinaryData;
|
|
@@ -146,9 +146,14 @@ export async function setFileProperties(
|
|
|
146
146
|
definedProperties[fileProperty] as string
|
|
147
147
|
);
|
|
148
148
|
|
|
149
|
-
|
|
149
|
+
if (response.success) {
|
|
150
|
+
definedProperties[fileProperty] = response.data.id;
|
|
151
|
+
} else return response;
|
|
150
152
|
}
|
|
151
|
-
return
|
|
153
|
+
return {
|
|
154
|
+
success: true,
|
|
155
|
+
data: definedProperties,
|
|
156
|
+
};
|
|
152
157
|
}
|
|
153
158
|
|
|
154
159
|
/**
|
|
@@ -159,7 +164,7 @@ export async function setFileProperties(
|
|
|
159
164
|
* @param data - The record data containing property values to process
|
|
160
165
|
* @param includeFileContent - Whether to include the actual file content in the response. Defaults to `false`
|
|
161
166
|
*
|
|
162
|
-
* @returns A {@link
|
|
167
|
+
* @returns A {@link FileAPIResponse} object containing updated JSON data and, if requested, the associated binary files.
|
|
163
168
|
*
|
|
164
169
|
* @public
|
|
165
170
|
* @group Utils
|
|
@@ -169,7 +174,7 @@ export async function processFileResponse<T extends Record<string, unknown>>(
|
|
|
169
174
|
fileProperties: Set<string>,
|
|
170
175
|
data: T,
|
|
171
176
|
includeFileContent: boolean = false
|
|
172
|
-
): Promise<
|
|
177
|
+
): Promise<FileAPIResponse<T>> {
|
|
173
178
|
let updatedData = { ...data };
|
|
174
179
|
const binaryData: Record<string, IBinaryData> = {};
|
|
175
180
|
for (const fileProperty of fileProperties) {
|
|
@@ -178,21 +183,33 @@ export async function processFileResponse<T extends Record<string, unknown>>(
|
|
|
178
183
|
nodeContext,
|
|
179
184
|
data[fileProperty] as string
|
|
180
185
|
);
|
|
186
|
+
if (!fileMetadataResponse.success)
|
|
187
|
+
return {
|
|
188
|
+
json: fileMetadataResponse,
|
|
189
|
+
};
|
|
181
190
|
|
|
182
191
|
updatedData = {
|
|
183
192
|
...updatedData,
|
|
184
|
-
[fileProperty]: fileMetadataResponse,
|
|
193
|
+
[fileProperty]: fileMetadataResponse.data,
|
|
185
194
|
};
|
|
186
195
|
|
|
187
196
|
if (includeFileContent) {
|
|
188
|
-
|
|
197
|
+
const fileContentResponse = await getFileContent(
|
|
189
198
|
nodeContext,
|
|
190
|
-
fileMetadataResponse.id
|
|
199
|
+
fileMetadataResponse.data.id
|
|
191
200
|
);
|
|
201
|
+
if (fileContentResponse.success) {
|
|
202
|
+
binaryData[fileProperty] = fileContentResponse.data;
|
|
203
|
+
} else {
|
|
204
|
+
return { json: fileContentResponse };
|
|
205
|
+
}
|
|
192
206
|
}
|
|
193
207
|
}
|
|
194
208
|
return {
|
|
195
|
-
json:
|
|
209
|
+
json: {
|
|
210
|
+
success: true,
|
|
211
|
+
data: updatedData,
|
|
212
|
+
},
|
|
196
213
|
binary: binaryData,
|
|
197
214
|
};
|
|
198
215
|
}
|
package/nodes/response.ts
CHANGED
|
@@ -1,16 +1,54 @@
|
|
|
1
1
|
import { IBinaryData } from 'n8n-workflow';
|
|
2
|
+
import { ErrorResponse, WorkflowErrorContext } from './errorHandling';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Wrapper for successful response
|
|
6
|
+
*/
|
|
7
|
+
export type SuccessResponse<T> = {
|
|
8
|
+
success: true;
|
|
9
|
+
data: T;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Generic wrapper used for describing the data we are returning from workflow
|
|
14
|
+
* execution for the user
|
|
15
|
+
*/
|
|
16
|
+
export type WorkflowResponse<T> = T | { error: WorkflowErrorContext };
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Generic wrapper used for describing the data we are getting from the
|
|
20
|
+
* external API layer
|
|
21
|
+
*/
|
|
22
|
+
export type APIResponse<T> = SuccessResponse<T> | ErrorResponse;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Response object that includes both JSON data and optional binary file content.
|
|
26
|
+
* Works in communication layer
|
|
27
|
+
*
|
|
28
|
+
* @typeParam T - The shape of the JSON data returned in the response
|
|
29
|
+
* @property json - The {@link APIResponse} object, containing structured JSON data.
|
|
30
|
+
* @property binary - An optional record of binary file data
|
|
31
|
+
*
|
|
32
|
+
* @public
|
|
33
|
+
* @group Response
|
|
34
|
+
*/
|
|
35
|
+
export type FileAPIResponse<T> = {
|
|
36
|
+
json: APIResponse<T>;
|
|
37
|
+
binary?: Record<string, IBinaryData>;
|
|
38
|
+
};
|
|
2
39
|
|
|
3
40
|
/**
|
|
4
41
|
* Response object that includes both JSON data and optional binary file content.
|
|
42
|
+
* Works in user interface layer
|
|
5
43
|
*
|
|
6
44
|
* @typeParam T - The shape of the JSON data returned in the response
|
|
7
|
-
* @property json - The
|
|
45
|
+
* @property json - The {@link WorflowResponse} object, containing structured JSON data.
|
|
8
46
|
* @property binary - An optional record of binary file data
|
|
9
47
|
*
|
|
10
48
|
* @public
|
|
11
49
|
* @group Response
|
|
12
50
|
*/
|
|
13
|
-
export type
|
|
14
|
-
json: T
|
|
51
|
+
export type WorkflowFileResponse<T> = {
|
|
52
|
+
json: WorkflowResponse<T>;
|
|
15
53
|
binary?: Record<string, IBinaryData>;
|
|
16
54
|
};
|
package/package.json
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@limetech/n8n-nodes-lime",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0-dev.2",
|
|
4
4
|
"description": "n8n node to connect to Lime CRM",
|
|
5
|
-
"license": "MIT",
|
|
6
5
|
"main": "nodes/index.ts",
|
|
7
6
|
"scripts": {
|
|
8
7
|
"build": "tsc && copyfiles \"nodes/**/*.svg\" dist",
|
|
@@ -63,5 +62,8 @@
|
|
|
63
62
|
},
|
|
64
63
|
"peerDependencies": {
|
|
65
64
|
"n8n-workflow": "^1.109.0"
|
|
65
|
+
},
|
|
66
|
+
"publishConfig": {
|
|
67
|
+
"access": "public"
|
|
66
68
|
}
|
|
67
69
|
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getCreateMappingColumns,
|
|
3
|
+
getUpdateMappingColumns,
|
|
4
|
+
LimetypeProperty,
|
|
5
|
+
SuccessResponse,
|
|
6
|
+
} from '../../../nodes';
|
|
7
|
+
import { ILoadOptionsFunctions } from 'n8n-workflow';
|
|
8
|
+
import * as transport from '../../../nodes/lime-crm/transport';
|
|
9
|
+
|
|
10
|
+
const mockILoadOptionFunctions = {
|
|
11
|
+
getNodeParameter: jest.fn().mockReturnValue('company'),
|
|
12
|
+
} as unknown as ILoadOptionsFunctions;
|
|
13
|
+
|
|
14
|
+
const propertiesResponseMock = {
|
|
15
|
+
success: true,
|
|
16
|
+
data: [
|
|
17
|
+
{ name: 'p1', localname: 'Property 1', type: 'yesno', required: true },
|
|
18
|
+
{
|
|
19
|
+
name: 'p2',
|
|
20
|
+
localname: 'Property 2',
|
|
21
|
+
type: 'string',
|
|
22
|
+
required: false,
|
|
23
|
+
length: 2137,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'p3',
|
|
27
|
+
localname: 'Property 3',
|
|
28
|
+
type: 'option',
|
|
29
|
+
required: true,
|
|
30
|
+
options: [
|
|
31
|
+
{ key: 'op1', text: 'Option 1', inactive: false },
|
|
32
|
+
{ key: 'op2', text: 'Option 2', inactive: false },
|
|
33
|
+
{ key: 'op3', text: 'Option 3', inactive: true },
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
} as SuccessResponse<LimetypeProperty[]>;
|
|
38
|
+
|
|
39
|
+
describe('resourceMapping', () => {
|
|
40
|
+
beforeEach(() => {
|
|
41
|
+
jest.spyOn(transport, 'getProperties').mockResolvedValue(
|
|
42
|
+
propertiesResponseMock
|
|
43
|
+
);
|
|
44
|
+
});
|
|
45
|
+
it('gets valid resource mapping for create', async () => {
|
|
46
|
+
const columns = await getCreateMappingColumns.call(
|
|
47
|
+
mockILoadOptionFunctions
|
|
48
|
+
);
|
|
49
|
+
const property1 = columns.fields.find((p) => p.id == 'p1')!;
|
|
50
|
+
|
|
51
|
+
expect(property1.displayName).toBe('Property 1 [yesno]');
|
|
52
|
+
expect(property1.required).toBe(true);
|
|
53
|
+
expect(property1.defaultMatch).toBe(false);
|
|
54
|
+
expect(property1.display).toBe(true);
|
|
55
|
+
expect(property1.type).toBe('boolean');
|
|
56
|
+
expect(property1.options).toBe(undefined);
|
|
57
|
+
|
|
58
|
+
const property2 = columns.fields.find((p) => p.id == 'p2')!;
|
|
59
|
+
expect(property2.displayName).toBe('Property 2 [string(2137)]');
|
|
60
|
+
expect(property2.required).toBe(false);
|
|
61
|
+
expect(property2.defaultMatch).toBe(false);
|
|
62
|
+
expect(property2.display).toBe(true);
|
|
63
|
+
expect(property2.type).toBe('string');
|
|
64
|
+
expect(property2.options).toBe(undefined);
|
|
65
|
+
|
|
66
|
+
const property3 = columns.fields.find((p) => p.id == 'p3')!;
|
|
67
|
+
expect(property3.displayName).toBe('Property 3 [option]');
|
|
68
|
+
expect(property3.required).toBe(true);
|
|
69
|
+
expect(property3.defaultMatch).toBe(false);
|
|
70
|
+
expect(property3.display).toBe(true);
|
|
71
|
+
expect(property3.type).toBe('options');
|
|
72
|
+
|
|
73
|
+
const options = property3.options!;
|
|
74
|
+
expect(options).toContainEqual({
|
|
75
|
+
value: 'op1',
|
|
76
|
+
name: 'Option 1',
|
|
77
|
+
});
|
|
78
|
+
expect(options).toContainEqual({
|
|
79
|
+
value: 'op2',
|
|
80
|
+
name: 'Option 2',
|
|
81
|
+
});
|
|
82
|
+
expect(options.length).toBe(2);
|
|
83
|
+
});
|
|
84
|
+
it('gets proper required values for update', async () => {
|
|
85
|
+
const columns = await getUpdateMappingColumns.call(
|
|
86
|
+
mockILoadOptionFunctions
|
|
87
|
+
);
|
|
88
|
+
const requiredValues = columns.fields.map((p) => p.required);
|
|
89
|
+
expect(requiredValues).toEqual([false, false, false]);
|
|
90
|
+
});
|
|
91
|
+
});
|