n8n-nodes-artsoft-cloud 0.0.0-stage → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +99 -2
- package/dist/credentials/ArtsoftCloudApi.credentials.d.ts +10 -0
- package/dist/credentials/ArtsoftCloudApi.credentials.js +55 -0
- package/dist/credentials/ArtsoftCloudApi.credentials.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/ArtsoftCloud.node.d.ts +5 -0
- package/dist/nodes/ArtsoftCloud/ArtsoftCloud.node.js +160 -0
- package/dist/nodes/ArtsoftCloud/ArtsoftCloud.node.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/ArtsoftCloud.node.json +14 -0
- package/dist/nodes/ArtsoftCloud/artsoft.png +0 -0
- package/dist/nodes/ArtsoftCloud/artsoft.svg +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/GenericFunctions.d.ts +18 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/GenericFunctions.js +65 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/GenericFunctions.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/curr-account/curr-account.properties.d.ts +8 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/curr-account/curr-account.properties.js +573 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/curr-account/curr-account.properties.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/curr-account/index.d.ts +8 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/curr-account/index.js +223 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/curr-account/index.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/customers/customers.properties.d.ts +8 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/customers/customers.properties.js +355 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/customers/customers.properties.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/customers/index.d.ts +6 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/customers/index.js +186 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/customers/index.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/document-lines/document-lines.properties.d.ts +8 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/document-lines/document-lines.properties.js +169 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/document-lines/document-lines.properties.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/document-lines/index.d.ts +6 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/document-lines/index.js +56 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/document-lines/index.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/documents/documents.properties.d.ts +8 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/documents/documents.properties.js +500 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/documents/documents.properties.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/documents/index.d.ts +9 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/documents/index.js +112 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/documents/index.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/products/index.d.ts +6 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/products/index.js +193 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/products/index.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/products/products.properties.d.ts +8 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/products/products.properties.js +331 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/products/products.properties.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/salespersons/index.d.ts +6 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/salespersons/index.js +146 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/salespersons/index.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/salespersons/salespersons.properties.d.ts +8 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/salespersons/salespersons.properties.js +272 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/salespersons/salespersons.properties.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/suppliers/index.d.ts +6 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/suppliers/index.js +174 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/suppliers/index.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/suppliers/suppliers.properties.d.ts +8 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/suppliers/suppliers.properties.js +324 -0
- package/dist/nodes/ArtsoftCloud/resolver/artsoft-cloud/suppliers/suppliers.properties.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/handler.d.ts +3 -0
- package/dist/nodes/ArtsoftCloud/resolver/handler.js +53 -0
- package/dist/nodes/ArtsoftCloud/resolver/handler.js.map +1 -0
- package/dist/nodes/ArtsoftCloud/resolver/index.d.ts +6 -0
- package/dist/nodes/ArtsoftCloud/resolver/index.js +21 -0
- package/dist/nodes/ArtsoftCloud/resolver/index.js.map +1 -0
- package/dist/package.json +63 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +62 -5
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ARTSOFT Business Software
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,100 @@
|
|
|
1
|
-
#
|
|
1
|
+
# n8n-nodes-artsoft-cloud
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[n8n](https://n8n.io) community node for **ARTSOFT Cloud Invoice** (by ARTSOFT Business Software). It lets workflows list, read, create, update and delete customers, suppliers, products, salespersons, documents, document lines and current account entries through the ARTSOFT Cloud Invoice REST API.
|
|
4
|
+
|
|
5
|
+
- [Installation](#installation)
|
|
6
|
+
- [Prerequisites](#prerequisites)
|
|
7
|
+
- [Credentials](#credentials)
|
|
8
|
+
- [Operations](#operations)
|
|
9
|
+
- [Example workflow](#example-workflow)
|
|
10
|
+
- [Response format](#response-format)
|
|
11
|
+
- [Compatibility and limitations](#compatibility-and-limitations)
|
|
12
|
+
- [Resources](#resources)
|
|
13
|
+
- [Version history](#version-history)
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
Follow the [n8n community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) and install the package `n8n-nodes-artsoft-cloud`.
|
|
18
|
+
|
|
19
|
+
For a self-hosted instance you can also install it from the command line in your n8n user folder:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install n8n-nodes-artsoft-cloud
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Prerequisites
|
|
26
|
+
|
|
27
|
+
- An ARTSOFT Cloud Invoice subscription. Your tax ID (NIF) identifies your instance (`https://{nif}.artsoft.cloud`).
|
|
28
|
+
- An ARTSOFT Cloud Invoice API key.
|
|
29
|
+
|
|
30
|
+
## Credentials
|
|
31
|
+
|
|
32
|
+
Create an **ARTSOFT Cloud Invoice API** credential with:
|
|
33
|
+
|
|
34
|
+
| Field | Description |
|
|
35
|
+
|---|---|
|
|
36
|
+
| NIF | Tax ID of your ARTSOFT Cloud Invoice instance, used to build the URL, e.g. `123456789` |
|
|
37
|
+
| API Key | API key, sent in the `x-api-key` header |
|
|
38
|
+
| Development | Use the development environment instead of production. Leave off unless you work against a local ARTSOFT Cloud Invoice |
|
|
39
|
+
|
|
40
|
+
Generated base URLs:
|
|
41
|
+
|
|
42
|
+
| Environment | URL |
|
|
43
|
+
|---|---|
|
|
44
|
+
| Production | `https://{nif}.artsoft.cloud/api` |
|
|
45
|
+
| Development | `http://{nif}.local.artsoft.cloud:3000/api` (plain HTTP, local use only) |
|
|
46
|
+
|
|
47
|
+
The credential test calls `GET /customers/?$size=1`, so it also requires read access to customers.
|
|
48
|
+
|
|
49
|
+
## Operations
|
|
50
|
+
|
|
51
|
+
| Resource | Operations |
|
|
52
|
+
|---|---|
|
|
53
|
+
| **Customer** | List, Get, Create, Update, Delete |
|
|
54
|
+
| **Supplier** | List, Get, Create, Update, Delete |
|
|
55
|
+
| **Product** | List, Get, Create, Update, Delete |
|
|
56
|
+
| **Salesperson** | List, Get, Create, Update, Delete |
|
|
57
|
+
| **Document** | List Invoices, List Invoices by SAFT Type, List Purchases, List Purchases by SAFT Type, Get, Create Header, Update, Delete |
|
|
58
|
+
| **Document Line** | List, Get, Create, Update, Delete |
|
|
59
|
+
| **Current Account** | List Customers, List Suppliers, Get, Create Debit, Create Credit, Update, Delete |
|
|
60
|
+
|
|
61
|
+
*List* operations accept the API paging and filtering parameters: `$search`, `$filter`, `$sort`, `$direction`, `$size`, `$cursor` and `$navigate`.
|
|
62
|
+
|
|
63
|
+
Detailed field reference per module (currently in Portuguese): [`docs/modules/`](docs/modules/).
|
|
64
|
+
|
|
65
|
+
## Example workflow
|
|
66
|
+
|
|
67
|
+
Create a customer and then a document header for it:
|
|
68
|
+
|
|
69
|
+
1. **ARTSOFT** node: *Customer → Create*, with the customer data. The response contains the new customer.
|
|
70
|
+
2. **ARTSOFT** node: *Document → Create Header*, using an expression to pass the customer ID from step 1.
|
|
71
|
+
3. **ARTSOFT** node: *Document Line → Create*, to add lines to the document.
|
|
72
|
+
|
|
73
|
+
Enable **Continue On Fail** on any step if you want the workflow to keep going when the API rejects an item.
|
|
74
|
+
|
|
75
|
+
## Response format
|
|
76
|
+
|
|
77
|
+
The node returns the JSON answer of the ARTSOFT Cloud Invoice API as the item `json`. It sends one request per input item.
|
|
78
|
+
|
|
79
|
+
When the API answers with an error, the item fails with a `NodeApiError` that includes the API error code and message (or it is returned as an error item when *Continue On Fail* is on).
|
|
80
|
+
|
|
81
|
+
## Compatibility and limitations
|
|
82
|
+
|
|
83
|
+
- Requires an n8n version that supports community nodes with `n8nNodesApiVersion` 1.
|
|
84
|
+
- The node is usable as an AI agent tool (`usableAsTool`).
|
|
85
|
+
- The UI labels are in English. Some field descriptions mirror ARTSOFT terminology (for example *Third Party*, *SAFT*, *MB References*).
|
|
86
|
+
- Parameter names and option values are kept stable between versions, so saved workflows keep working. Labels may change.
|
|
87
|
+
|
|
88
|
+
## Resources
|
|
89
|
+
|
|
90
|
+
- [Source code and issues](https://github.com/ARTSOFT-TI/n8n-node-artsoft-cloud)
|
|
91
|
+
- [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
|
|
92
|
+
- [ARTSOFT Cloud Invoice manual](https://artsoft-cloud.eniston.com/)
|
|
93
|
+
|
|
94
|
+
## Version history
|
|
95
|
+
|
|
96
|
+
See [CHANGELOG.md](CHANGELOG.md).
|
|
97
|
+
|
|
98
|
+
## License
|
|
99
|
+
|
|
100
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class ArtsoftCloudApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
icon: "file:../nodes/ArtsoftCloud/artsoft.svg";
|
|
6
|
+
documentationUrl: string;
|
|
7
|
+
properties: INodeProperties[];
|
|
8
|
+
authenticate: IAuthenticateGeneric;
|
|
9
|
+
test: ICredentialTestRequest;
|
|
10
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ArtsoftCloudApi = void 0;
|
|
4
|
+
const BASE_URL_EXPRESSION = "={{$credentials.development ? 'http://' + $credentials.nif + '.local.artsoft.cloud:3000/api' : 'https://' + $credentials.nif + '.artsoft.cloud/api'}}";
|
|
5
|
+
class ArtsoftCloudApi {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.name = 'artsoftCloudApi';
|
|
8
|
+
this.displayName = 'ARTSOFT Cloud Invoice API';
|
|
9
|
+
this.icon = 'file:../nodes/ArtsoftCloud/artsoft.svg';
|
|
10
|
+
this.documentationUrl = 'https://artsoft-cloud.eniston.com/';
|
|
11
|
+
this.properties = [
|
|
12
|
+
{
|
|
13
|
+
displayName: 'NIF',
|
|
14
|
+
name: 'nif',
|
|
15
|
+
type: 'string',
|
|
16
|
+
default: '',
|
|
17
|
+
placeholder: '123456789',
|
|
18
|
+
required: true,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
displayName: 'API Key',
|
|
22
|
+
name: 'apiKey',
|
|
23
|
+
type: 'string',
|
|
24
|
+
typeOptions: { password: true },
|
|
25
|
+
default: '',
|
|
26
|
+
required: true,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
displayName: 'Development',
|
|
30
|
+
name: 'development',
|
|
31
|
+
type: 'boolean',
|
|
32
|
+
default: false,
|
|
33
|
+
description: 'Whether to use the development environment instead of production',
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
this.authenticate = {
|
|
37
|
+
type: 'generic',
|
|
38
|
+
properties: {
|
|
39
|
+
headers: {
|
|
40
|
+
'x-api-key': '={{$credentials.apiKey}}',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
this.test = {
|
|
45
|
+
request: {
|
|
46
|
+
baseURL: BASE_URL_EXPRESSION,
|
|
47
|
+
url: '/customers/',
|
|
48
|
+
method: 'GET',
|
|
49
|
+
qs: { $size: 1 },
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.ArtsoftCloudApi = ArtsoftCloudApi;
|
|
55
|
+
//# sourceMappingURL=ArtsoftCloudApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArtsoftCloudApi.credentials.js","sourceRoot":"","sources":["../../credentials/ArtsoftCloudApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAM,mBAAmB,GACxB,uJAAuJ,CAAC;AAEzJ,MAAa,eAAe;IAA5B;QACC,SAAI,GAAG,iBAAiB,CAAC;QACzB,gBAAW,GAAG,2BAA2B,CAAC;QAC1C,SAAI,GAAG,wCAAiD,CAAC;QACzD,qBAAgB,GAAG,oCAAoC,CAAC;QACxD,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,KAAK;gBAClB,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,WAAW;gBACxB,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,aAAa;gBAC1B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,kEAAkE;aAC/E;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,WAAW,EAAE,0BAA0B;iBACvC;aACD;SACD,CAAC;QAIF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,mBAAmB;gBAC5B,GAAG,EAAE,aAAa;gBAClB,MAAM,EAAE,KAAK;gBACb,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;aAChB;SACD,CAAC;IACH,CAAC;CAAA;AAlDD,0CAkDC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ArtsoftCloud = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const products_properties_1 = require("./resolver/artsoft-cloud/products/products.properties");
|
|
6
|
+
const customers_properties_1 = require("./resolver/artsoft-cloud/customers/customers.properties");
|
|
7
|
+
const suppliers_properties_1 = require("./resolver/artsoft-cloud/suppliers/suppliers.properties");
|
|
8
|
+
const salespersons_properties_1 = require("./resolver/artsoft-cloud/salespersons/salespersons.properties");
|
|
9
|
+
const documents_properties_1 = require("./resolver/artsoft-cloud/documents/documents.properties");
|
|
10
|
+
const document_lines_properties_1 = require("./resolver/artsoft-cloud/document-lines/document-lines.properties");
|
|
11
|
+
const curr_account_properties_1 = require("./resolver/artsoft-cloud/curr-account/curr-account.properties");
|
|
12
|
+
const resolver_1 = require("./resolver");
|
|
13
|
+
class ArtsoftCloud {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.description = {
|
|
16
|
+
displayName: 'ARTSOFT',
|
|
17
|
+
name: 'artsoftCloud',
|
|
18
|
+
icon: { light: 'file:artsoft.svg', dark: 'file:artsoft.svg' },
|
|
19
|
+
group: ['transform'],
|
|
20
|
+
version: 1,
|
|
21
|
+
usableAsTool: true,
|
|
22
|
+
subtitle: '={{$parameter["resource"] + ": " + $parameter["operation"]}}',
|
|
23
|
+
description: 'Interact with the ARTSOFT Cloud Invoice API',
|
|
24
|
+
defaults: {
|
|
25
|
+
name: 'ARTSOFT',
|
|
26
|
+
},
|
|
27
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
28
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
29
|
+
credentials: [
|
|
30
|
+
{
|
|
31
|
+
name: 'artsoftCloudApi',
|
|
32
|
+
required: true,
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
properties: [
|
|
36
|
+
{
|
|
37
|
+
displayName: 'Resource',
|
|
38
|
+
name: 'resource',
|
|
39
|
+
type: 'options',
|
|
40
|
+
noDataExpression: true,
|
|
41
|
+
options: [
|
|
42
|
+
{ name: 'Cloud — Current Account', value: 'cloudCurrAccount' },
|
|
43
|
+
{ name: 'Cloud — Customer', value: 'cloudCustomers' },
|
|
44
|
+
{ name: 'Cloud — Document', value: 'cloudDocuments' },
|
|
45
|
+
{ name: 'Cloud — Document Line', value: 'cloudDocumentLines' },
|
|
46
|
+
{ name: 'Cloud — Product', value: 'cloudProducts' },
|
|
47
|
+
{ name: 'Cloud — Salesperson', value: 'cloudSalespersons' },
|
|
48
|
+
{ name: 'Cloud — Supplier', value: 'cloudSuppliers' },
|
|
49
|
+
],
|
|
50
|
+
default: 'cloudCustomers',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
displayName: 'Operation',
|
|
54
|
+
name: 'operation',
|
|
55
|
+
type: 'options',
|
|
56
|
+
noDataExpression: true,
|
|
57
|
+
displayOptions: { show: { resource: ['cloudCustomers'] } },
|
|
58
|
+
options: customers_properties_1.cloudCustomerOperations,
|
|
59
|
+
default: 'cloudListCustomers',
|
|
60
|
+
},
|
|
61
|
+
...customers_properties_1.cloudCustomerProperties,
|
|
62
|
+
{
|
|
63
|
+
displayName: 'Operation',
|
|
64
|
+
name: 'operation',
|
|
65
|
+
type: 'options',
|
|
66
|
+
noDataExpression: true,
|
|
67
|
+
displayOptions: { show: { resource: ['cloudSuppliers'] } },
|
|
68
|
+
options: suppliers_properties_1.cloudSupplierOperations,
|
|
69
|
+
default: 'cloudListSuppliers',
|
|
70
|
+
},
|
|
71
|
+
...suppliers_properties_1.cloudSupplierProperties,
|
|
72
|
+
{
|
|
73
|
+
displayName: 'Operation',
|
|
74
|
+
name: 'operation',
|
|
75
|
+
type: 'options',
|
|
76
|
+
noDataExpression: true,
|
|
77
|
+
displayOptions: { show: { resource: ['cloudProducts'] } },
|
|
78
|
+
options: products_properties_1.cloudProductOperations,
|
|
79
|
+
default: 'cloudListProducts',
|
|
80
|
+
},
|
|
81
|
+
...products_properties_1.cloudProductProperties,
|
|
82
|
+
{
|
|
83
|
+
displayName: 'Operation',
|
|
84
|
+
name: 'operation',
|
|
85
|
+
type: 'options',
|
|
86
|
+
noDataExpression: true,
|
|
87
|
+
displayOptions: { show: { resource: ['cloudDocuments'] } },
|
|
88
|
+
options: documents_properties_1.cloudDocumentOperations,
|
|
89
|
+
default: 'cloudListBillings',
|
|
90
|
+
},
|
|
91
|
+
...documents_properties_1.cloudDocumentProperties,
|
|
92
|
+
{
|
|
93
|
+
displayName: 'Operation',
|
|
94
|
+
name: 'operation',
|
|
95
|
+
type: 'options',
|
|
96
|
+
noDataExpression: true,
|
|
97
|
+
displayOptions: { show: { resource: ['cloudDocumentLines'] } },
|
|
98
|
+
options: document_lines_properties_1.cloudDocumentLineOperations,
|
|
99
|
+
default: 'cloudListDocumentLines',
|
|
100
|
+
},
|
|
101
|
+
...document_lines_properties_1.cloudDocumentLineProperties,
|
|
102
|
+
{
|
|
103
|
+
displayName: 'Operation',
|
|
104
|
+
name: 'operation',
|
|
105
|
+
type: 'options',
|
|
106
|
+
noDataExpression: true,
|
|
107
|
+
displayOptions: { show: { resource: ['cloudSalespersons'] } },
|
|
108
|
+
options: salespersons_properties_1.cloudSalespersonOperations,
|
|
109
|
+
default: 'cloudListSalespersons',
|
|
110
|
+
},
|
|
111
|
+
...salespersons_properties_1.cloudSalespersonProperties,
|
|
112
|
+
{
|
|
113
|
+
displayName: 'Operation',
|
|
114
|
+
name: 'operation',
|
|
115
|
+
type: 'options',
|
|
116
|
+
noDataExpression: true,
|
|
117
|
+
displayOptions: { show: { resource: ['cloudCurrAccount'] } },
|
|
118
|
+
options: curr_account_properties_1.cloudCurrAccountOperations,
|
|
119
|
+
default: 'cloudListCustomerAccounts',
|
|
120
|
+
},
|
|
121
|
+
...curr_account_properties_1.cloudCurrAccountProperties,
|
|
122
|
+
],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
async execute() {
|
|
126
|
+
const items = this.getInputData();
|
|
127
|
+
const returnData = [];
|
|
128
|
+
const artResolver = new resolver_1.ArtResolver(this);
|
|
129
|
+
for (let i = 0; i < items.length; i++) {
|
|
130
|
+
try {
|
|
131
|
+
const operation = this.getNodeParameter('operation', i);
|
|
132
|
+
const parsed = await artResolver.resolve(operation, i);
|
|
133
|
+
const root = parsed['message'] ||
|
|
134
|
+
parsed['document'] ||
|
|
135
|
+
parsed['Entity'] ||
|
|
136
|
+
{};
|
|
137
|
+
const err = root['@_err'];
|
|
138
|
+
if (err !== undefined && err !== null && err !== '') {
|
|
139
|
+
throw new n8n_workflow_1.NodeApiError(this.getNode(), { message: `ARTSOFT error: ${err}` }, { itemIndex: i });
|
|
140
|
+
}
|
|
141
|
+
returnData.push({ json: parsed, pairedItem: i });
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (this.continueOnFail()) {
|
|
145
|
+
returnData.push({
|
|
146
|
+
json: { error: error.message },
|
|
147
|
+
pairedItem: i,
|
|
148
|
+
});
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
throw error instanceof n8n_workflow_1.NodeApiError
|
|
152
|
+
? error
|
|
153
|
+
: new n8n_workflow_1.NodeApiError(this.getNode(), error, { itemIndex: i });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return [returnData];
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.ArtsoftCloud = ArtsoftCloud;
|
|
160
|
+
//# sourceMappingURL=ArtsoftCloud.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArtsoftCloud.node.js","sourceRoot":"","sources":["../../../nodes/ArtsoftCloud/ArtsoftCloud.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "n8n-nodes-artsoft-cloud.artsoftCloud",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": ["Miscellaneous"],
|
|
6
|
+
"resources": {
|
|
7
|
+
"credentialDocumentation": [
|
|
8
|
+
{ "url": "https://artsoft-cloud.eniston.com/" }
|
|
9
|
+
],
|
|
10
|
+
"primaryDocumentation": [
|
|
11
|
+
{ "url": "https://github.com/ARTSOFT-TI/n8n-node-artsoft-cloud#readme" }
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="359" height="432" viewBox="0 0 359 432"><image width="359" height="432" xlink:href="data:image/png;base64,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"/></svg>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IDataObject, IExecuteFunctions } from 'n8n-workflow';
|
|
2
|
+
export interface CloudCredentials {
|
|
3
|
+
nif: string;
|
|
4
|
+
apiKey: string;
|
|
5
|
+
development: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function getBaseUrl(credentials: CloudCredentials): string;
|
|
8
|
+
export interface PaginationParams {
|
|
9
|
+
$search?: string;
|
|
10
|
+
$direction?: string;
|
|
11
|
+
$size?: number;
|
|
12
|
+
$sort?: string;
|
|
13
|
+
$filter?: string;
|
|
14
|
+
$navigate?: string;
|
|
15
|
+
$cursor?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function buildPaginationParams(context: IExecuteFunctions, i: number): IDataObject;
|
|
18
|
+
export declare function cloudApiRequest(this: IExecuteFunctions, method: 'GET' | 'POST' | 'PUT' | 'DELETE', path: string, body?: IDataObject, qs?: IDataObject): Promise<Record<string, unknown>>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getBaseUrl = getBaseUrl;
|
|
4
|
+
exports.buildPaginationParams = buildPaginationParams;
|
|
5
|
+
exports.cloudApiRequest = cloudApiRequest;
|
|
6
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
7
|
+
const PRODUCTION_BASE_URL = 'https://%s.artsoft.cloud/api';
|
|
8
|
+
const DEVELOPMENT_BASE_URL = 'http://%s.local.artsoft.cloud:3000/api';
|
|
9
|
+
function getBaseUrl(credentials) {
|
|
10
|
+
const template = credentials.development ? DEVELOPMENT_BASE_URL : PRODUCTION_BASE_URL;
|
|
11
|
+
return template.replace('%s', credentials.nif);
|
|
12
|
+
}
|
|
13
|
+
function buildPaginationParams(context, i) {
|
|
14
|
+
const params = {};
|
|
15
|
+
const search = context.getNodeParameter('$search', i, '');
|
|
16
|
+
const direction = context.getNodeParameter('$direction', i, '');
|
|
17
|
+
const size = context.getNodeParameter('$size', i, 0);
|
|
18
|
+
const sort = context.getNodeParameter('$sort', i, '');
|
|
19
|
+
const filter = context.getNodeParameter('$filter', i, '');
|
|
20
|
+
const navigate = context.getNodeParameter('$navigate', i, '');
|
|
21
|
+
const cursor = context.getNodeParameter('$cursor', i, '');
|
|
22
|
+
if (search)
|
|
23
|
+
params.$search = search;
|
|
24
|
+
if (direction)
|
|
25
|
+
params.$direction = direction;
|
|
26
|
+
if (size)
|
|
27
|
+
params.$size = size;
|
|
28
|
+
if (sort)
|
|
29
|
+
params.$sort = sort;
|
|
30
|
+
if (filter)
|
|
31
|
+
params.$filter = filter;
|
|
32
|
+
if (navigate)
|
|
33
|
+
params.$navigate = navigate;
|
|
34
|
+
if (cursor)
|
|
35
|
+
params.$cursor = cursor;
|
|
36
|
+
return params;
|
|
37
|
+
}
|
|
38
|
+
async function cloudApiRequest(method, path, body, qs) {
|
|
39
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
40
|
+
const credentials = (await this.getCredentials('artsoftCloudApi'));
|
|
41
|
+
const baseUrl = getBaseUrl(credentials);
|
|
42
|
+
try {
|
|
43
|
+
const response = await this.helpers.httpRequestWithAuthentication.call(this, 'artsoftCloudApi', {
|
|
44
|
+
method,
|
|
45
|
+
url: `${baseUrl}${path}`,
|
|
46
|
+
headers: {
|
|
47
|
+
'Content-Type': 'application/json',
|
|
48
|
+
Accept: 'application/json',
|
|
49
|
+
},
|
|
50
|
+
body,
|
|
51
|
+
qs,
|
|
52
|
+
returnFullResponse: false,
|
|
53
|
+
});
|
|
54
|
+
return (_a = response) !== null && _a !== void 0 ? _a : {};
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
const err = error;
|
|
58
|
+
const responseData = (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.data;
|
|
59
|
+
const apiMessage = (_e = (_d = (_c = responseData === null || responseData === void 0 ? void 0 : responseData.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : responseData === null || responseData === void 0 ? void 0 : responseData.message) !== null && _e !== void 0 ? _e : '';
|
|
60
|
+
const apiCode = (_g = (_f = responseData === null || responseData === void 0 ? void 0 : responseData.error) === null || _f === void 0 ? void 0 : _f.code) !== null && _g !== void 0 ? _g : '';
|
|
61
|
+
const detail = apiMessage ? `${apiCode}: ${apiMessage}` : (_h = err.message) !== null && _h !== void 0 ? _h : String(error);
|
|
62
|
+
throw new n8n_workflow_1.NodeApiError(this.getNode(), { message: detail, description: JSON.stringify((_j = responseData !== null && responseData !== void 0 ? responseData : err.message) !== null && _j !== void 0 ? _j : '') }, { message: `ARTSOFT Cloud Invoice API request to ${path} failed: ${detail}` });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=GenericFunctions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../../../nodes/ArtsoftCloud/resolver/artsoft-cloud/GenericFunctions.ts"],"names":[],"mappings":"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"}
|