n8n-nodes-ancoremate 1.2.0

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.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) ancoreSoft
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 ADDED
@@ -0,0 +1,34 @@
1
+ # n8n-nodes-ancoremate
2
+
3
+ n8n nodes by ancoreSoft for automating Qlik Cloud®.
4
+
5
+ Qlik®, Qlik Cloud® and Qlik Sense® are trademarks of QlikTech International AB. ancoreMate is not affiliated with or endorsed by Qlik.
6
+
7
+ ## Installation
8
+
9
+ In n8n, open **Settings > Community nodes**, select **Install** and enter `n8n-nodes-ancoremate`.
10
+
11
+ ## Credentials
12
+
13
+ 1. Create a credential of type **ancoreMate account** and select **Connect my account**.
14
+ 2. Sign in with your ancoreCloud account. The sign-in window shows the address of your n8n; continue only if it is yours.
15
+ 3. The first time, enter your Qlik Cloud tenant, for example `company.eu.qlikcloud.com`, sign in at Qlik Cloud and approve the access for ancoreMate. Later sign-ins offer to continue with the connected tenant.
16
+
17
+ No client ID, client secret or API key has to be entered, neither in n8n nor in Qlik Cloud.
18
+
19
+ ## Nodes
20
+
21
+ ### ancoreMate Apps
22
+
23
+ ancoreMate Apps connects your workflows to the apps of your Qlik Cloud® tenant. List the Qlik Sense® apps and read their data model to build data-driven automations.
24
+
25
+ - **Field: List fields** – Lists the fields of the data model of a Qlik Sense app with their number of distinct values and tags.
26
+ - **App: List apps** – Lists the Qlik Sense apps of the tenant that the connected Qlik Cloud user has access to, sorted by name.
27
+ - **Connection: Disconnect Qlik** – Removes the connection between ancoreMate and your Qlik Cloud user and revokes its access at Qlik Cloud.
28
+ - **Connection: Get Qlik connection** – Returns whether ancoreMate is connected to a Qlik Cloud tenant, and to which tenant and Qlik user.
29
+
30
+ ## Requirements
31
+
32
+ - An ancoreCloud account with an ancoreMate subscription. See https://ancorecloud.com/ for details.
33
+ - A Qlik Cloud user with access to the content you want to automate.
34
+ - n8n reachable over HTTPS (or on localhost), because the sign-in returns to n8n's OAuth callback.
@@ -0,0 +1,10 @@
1
+ import type { ICredentialTestRequest, ICredentialType, Icon, INodeProperties } from 'n8n-workflow';
2
+ export declare class AncoreMateOAuth2Api implements ICredentialType {
3
+ name: string;
4
+ extends: string[];
5
+ displayName: string;
6
+ icon: Icon;
7
+ documentationUrl: string;
8
+ properties: INodeProperties[];
9
+ test: ICredentialTestRequest;
10
+ }
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AncoreMateOAuth2Api = void 0;
4
+ class AncoreMateOAuth2Api {
5
+ constructor() {
6
+ this.name = 'ancoreMateOAuth2Api';
7
+ this.extends = ['oAuth2Api'];
8
+ this.displayName = 'ancoreMate account';
9
+ this.icon = 'file:ancoremate.svg';
10
+ this.documentationUrl = 'https://ancorecloud.com/';
11
+ this.properties = [
12
+ {
13
+ "displayName": "Grant Type",
14
+ "name": "grantType",
15
+ "type": "hidden",
16
+ "default": "pkce"
17
+ },
18
+ {
19
+ "displayName": "Authorization URL",
20
+ "name": "authUrl",
21
+ "type": "hidden",
22
+ "default": "https://ancorecloud.com/ancoremate/oauth/authorize"
23
+ },
24
+ {
25
+ "displayName": "Access Token URL",
26
+ "name": "accessTokenUrl",
27
+ "type": "hidden",
28
+ "default": "https://ancorecloud.com/ancoremate/oauth/token"
29
+ },
30
+ {
31
+ "displayName": "Client ID",
32
+ "name": "clientId",
33
+ "type": "hidden",
34
+ "default": "ancoremate-n8n"
35
+ },
36
+ {
37
+ "displayName": "Client Secret",
38
+ "name": "clientSecret",
39
+ "type": "hidden",
40
+ "default": ""
41
+ },
42
+ {
43
+ "displayName": "Scope",
44
+ "name": "scope",
45
+ "type": "hidden",
46
+ "default": "api://cad3a96e-727c-4bea-9854-85a0b8d24a8b/access_as_user offline_access openid"
47
+ },
48
+ {
49
+ "displayName": "Auth URI Query Parameters",
50
+ "name": "authQueryParameters",
51
+ "type": "hidden",
52
+ "default": ""
53
+ },
54
+ {
55
+ "displayName": "Authentication",
56
+ "name": "authentication",
57
+ "type": "hidden",
58
+ "default": "body"
59
+ }
60
+ ];
61
+ this.test = {
62
+ "request": {
63
+ "baseURL": "https://ancorecloud.com/ancoremate",
64
+ "url": "/v1/connection",
65
+ "headers": {
66
+ "X-AncoreMate-Client": "n8n/1.2.0"
67
+ }
68
+ }
69
+ };
70
+ }
71
+ }
72
+ exports.AncoreMateOAuth2Api = AncoreMateOAuth2Api;
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" aria-label="ancoreMate">
2
+ <g fill="#2972ff">
3
+ <polygon points="216.5,99.1 216.5,184.2 302.3,184.2 388.1,99.1 388.1,13.9 302.3,13.9"/>
4
+ <polygon points="98.4,184.3 184.2,184.3 184.2,99.2 98.4,14 12.7,14 12.7,99.1"/>
5
+ <polygon points="302.3,385.8 388.1,385.8 388.1,300.7 302.3,215.6 216.5,215.6 216.5,300.7"/>
6
+ </g>
7
+ </svg>
@@ -0,0 +1,4 @@
1
+ import type { INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class AncoreMateApps implements INodeType {
3
+ description: INodeTypeDescription;
4
+ }
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AncoreMateApps = void 0;
4
+ class AncoreMateApps {
5
+ constructor() {
6
+ this.description = {
7
+ "displayName": "ancoreMate Apps",
8
+ "name": "ancoreMateApps",
9
+ "icon": "file:ancoremate.svg",
10
+ "group": [
11
+ "transform"
12
+ ],
13
+ "version": 1,
14
+ "subtitle": "={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}",
15
+ "description": "ancoreMate Apps connects your workflows to the apps of your Qlik Cloud® tenant. List the Qlik Sense® apps and read their data model to build data-driven automations.",
16
+ "defaults": {
17
+ "name": "ancoreMate Apps"
18
+ },
19
+ "usableAsTool": true,
20
+ "inputs": [
21
+ "main"
22
+ ],
23
+ "outputs": [
24
+ "main"
25
+ ],
26
+ "credentials": [
27
+ {
28
+ "name": "ancoreMateOAuth2Api",
29
+ "required": true
30
+ }
31
+ ],
32
+ "requestDefaults": {
33
+ "baseURL": "https://ancorecloud.com/ancoremate",
34
+ "headers": {
35
+ "Accept": "application/json",
36
+ "X-AncoreMate-Client": "n8n/1.2.0"
37
+ }
38
+ },
39
+ "properties": [
40
+ {
41
+ "displayName": "Resource",
42
+ "name": "resource",
43
+ "type": "options",
44
+ "noDataExpression": true,
45
+ "options": [
46
+ {
47
+ "name": "App",
48
+ "value": "app"
49
+ },
50
+ {
51
+ "name": "Field",
52
+ "value": "field"
53
+ },
54
+ {
55
+ "name": "Connection",
56
+ "value": "connection"
57
+ }
58
+ ],
59
+ "default": "app"
60
+ },
61
+ {
62
+ "displayName": "Operation",
63
+ "name": "operation",
64
+ "type": "options",
65
+ "noDataExpression": true,
66
+ "displayOptions": {
67
+ "show": {
68
+ "resource": [
69
+ "app"
70
+ ]
71
+ }
72
+ },
73
+ "options": [
74
+ {
75
+ "name": "List apps",
76
+ "value": "getApps",
77
+ "action": "List apps",
78
+ "description": "Lists the Qlik Sense apps of the tenant that the connected Qlik Cloud user has access to, sorted by name.",
79
+ "routing": {
80
+ "request": {
81
+ "method": "GET",
82
+ "url": "/v1/apps"
83
+ },
84
+ "output": {
85
+ "postReceive": [
86
+ {
87
+ "type": "rootProperty",
88
+ "properties": {
89
+ "property": "value"
90
+ }
91
+ }
92
+ ]
93
+ }
94
+ }
95
+ }
96
+ ],
97
+ "default": "getApps"
98
+ },
99
+ {
100
+ "displayName": "Operation",
101
+ "name": "operation",
102
+ "type": "options",
103
+ "noDataExpression": true,
104
+ "displayOptions": {
105
+ "show": {
106
+ "resource": [
107
+ "field"
108
+ ]
109
+ }
110
+ },
111
+ "options": [
112
+ {
113
+ "name": "List fields",
114
+ "value": "getAppFields",
115
+ "action": "List fields",
116
+ "description": "Lists the fields of the data model of a Qlik Sense app with their number of distinct values and tags.",
117
+ "routing": {
118
+ "request": {
119
+ "method": "GET",
120
+ "url": "=/v1/apps/{{encodeURIComponent($parameter[\"appId\"])}}/fields"
121
+ },
122
+ "output": {
123
+ "postReceive": [
124
+ {
125
+ "type": "rootProperty",
126
+ "properties": {
127
+ "property": "value"
128
+ }
129
+ }
130
+ ]
131
+ }
132
+ }
133
+ }
134
+ ],
135
+ "default": "getAppFields"
136
+ },
137
+ {
138
+ "displayName": "Operation",
139
+ "name": "operation",
140
+ "type": "options",
141
+ "noDataExpression": true,
142
+ "displayOptions": {
143
+ "show": {
144
+ "resource": [
145
+ "connection"
146
+ ]
147
+ }
148
+ },
149
+ "options": [
150
+ {
151
+ "name": "Disconnect Qlik",
152
+ "value": "disconnectQlik",
153
+ "action": "Disconnect Qlik",
154
+ "description": "Removes the connection between ancoreMate and your Qlik Cloud user and revokes its access at Qlik Cloud.",
155
+ "routing": {
156
+ "request": {
157
+ "method": "DELETE",
158
+ "url": "/v1/connection"
159
+ },
160
+ "output": {
161
+ "postReceive": [
162
+ {
163
+ "type": "set",
164
+ "properties": {
165
+ "value": "={{ { \"success\": true } }}"
166
+ }
167
+ }
168
+ ]
169
+ }
170
+ }
171
+ },
172
+ {
173
+ "name": "Get Qlik connection",
174
+ "value": "getQlikConnection",
175
+ "action": "Get Qlik connection",
176
+ "description": "Returns whether ancoreMate is connected to a Qlik Cloud tenant, and to which tenant and Qlik user.",
177
+ "routing": {
178
+ "request": {
179
+ "method": "GET",
180
+ "url": "/v1/connection"
181
+ }
182
+ }
183
+ }
184
+ ],
185
+ "default": "disconnectQlik"
186
+ },
187
+ {
188
+ "displayName": "App",
189
+ "name": "appId",
190
+ "type": "options",
191
+ "typeOptions": {
192
+ "loadOptions": {
193
+ "routing": {
194
+ "request": {
195
+ "method": "GET",
196
+ "url": "/v1/apps",
197
+ "qs": {
198
+ "limit": 1000
199
+ }
200
+ },
201
+ "output": {
202
+ "postReceive": [
203
+ {
204
+ "type": "rootProperty",
205
+ "properties": {
206
+ "property": "value"
207
+ }
208
+ },
209
+ {
210
+ "type": "setKeyValue",
211
+ "properties": {
212
+ "name": "={{$responseItem.name}}",
213
+ "value": "={{$responseItem.id}}"
214
+ }
215
+ },
216
+ {
217
+ "type": "sort",
218
+ "properties": {
219
+ "key": "name"
220
+ }
221
+ }
222
+ ]
223
+ }
224
+ }
225
+ }
226
+ },
227
+ "default": "",
228
+ "required": true,
229
+ "displayOptions": {
230
+ "show": {
231
+ "resource": [
232
+ "field"
233
+ ],
234
+ "operation": [
235
+ "getAppFields"
236
+ ]
237
+ }
238
+ },
239
+ "description": "The app whose fields are listed."
240
+ },
241
+ {
242
+ "displayName": "Options",
243
+ "name": "options",
244
+ "type": "collection",
245
+ "placeholder": "Add Option",
246
+ "default": {},
247
+ "displayOptions": {
248
+ "show": {
249
+ "resource": [
250
+ "app"
251
+ ],
252
+ "operation": [
253
+ "getApps"
254
+ ]
255
+ }
256
+ },
257
+ "options": [
258
+ {
259
+ "displayName": "Search",
260
+ "name": "search",
261
+ "type": "string",
262
+ "default": "",
263
+ "description": "Returns only apps whose name contains this text.",
264
+ "routing": {
265
+ "send": {
266
+ "type": "query",
267
+ "property": "search",
268
+ "value": "={{ $value }}"
269
+ }
270
+ }
271
+ },
272
+ {
273
+ "displayName": "Limit",
274
+ "name": "limit",
275
+ "type": "number",
276
+ "typeOptions": {
277
+ "minValue": 1,
278
+ "maxValue": 1000,
279
+ "numberPrecision": 0
280
+ },
281
+ "default": 100,
282
+ "description": "The maximum number of apps to return, between 1 and 1000.",
283
+ "routing": {
284
+ "send": {
285
+ "type": "query",
286
+ "property": "limit",
287
+ "value": "={{ $value }}"
288
+ }
289
+ }
290
+ }
291
+ ]
292
+ }
293
+ ]
294
+ };
295
+ }
296
+ }
297
+ exports.AncoreMateApps = AncoreMateApps;
@@ -0,0 +1,21 @@
1
+ {
2
+ "node": "n8n-nodes-ancoremate.ancoreMateApps",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": [
6
+ "Analytics",
7
+ "Data & Storage"
8
+ ],
9
+ "resources": {
10
+ "credentialDocumentation": [
11
+ {
12
+ "url": "https://ancorecloud.com/"
13
+ }
14
+ ],
15
+ "primaryDocumentation": [
16
+ {
17
+ "url": "https://ancorecloud.com/"
18
+ }
19
+ ]
20
+ }
21
+ }
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" aria-label="ancoreMate">
2
+ <g fill="#2972ff">
3
+ <polygon points="216.5,99.1 216.5,184.2 302.3,184.2 388.1,99.1 388.1,13.9 302.3,13.9"/>
4
+ <polygon points="98.4,184.3 184.2,184.3 184.2,99.2 98.4,14 12.7,14 12.7,99.1"/>
5
+ <polygon points="302.3,385.8 388.1,385.8 388.1,300.7 302.3,215.6 216.5,215.6 216.5,300.7"/>
6
+ </g>
7
+ </svg>
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "n8n-nodes-ancoremate",
3
+ "version": "1.2.0",
4
+ "description": "n8n nodes for Qlik Cloud® automation by ancoreSoft. Qlik®, Qlik Cloud® and Qlik Sense® are trademarks of QlikTech International AB. ancoreMate is not affiliated with or endorsed by Qlik.",
5
+ "keywords": [
6
+ "n8n-community-node-package",
7
+ "ancoremate",
8
+ "qlik",
9
+ "qlik-cloud"
10
+ ],
11
+ "license": "MIT",
12
+ "homepage": "https://ancorecloud.com/",
13
+ "author": {
14
+ "name": "ancoreSoft"
15
+ },
16
+ "engines": {
17
+ "node": ">=20.15"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc && node build-assets.mjs",
24
+ "prepublishOnly": "npm run build"
25
+ },
26
+ "n8n": {
27
+ "n8nNodesApiVersion": 1,
28
+ "credentials": [
29
+ "dist/credentials/AncoreMateOAuth2Api.credentials.js"
30
+ ],
31
+ "nodes": [
32
+ "dist/nodes/AncoreMateApps/AncoreMateApps.node.js"
33
+ ]
34
+ },
35
+ "devDependencies": {
36
+ "n8n-workflow": "2.16.0",
37
+ "typescript": "5.9.3"
38
+ },
39
+ "peerDependencies": {
40
+ "n8n-workflow": "*"
41
+ }
42
+ }