@rhizome-it/n8n-nodes-capucine-tools 0.0.0-stage → 0.1.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/README.md CHANGED
@@ -1,3 +1,43 @@
1
- # Temporary Holding Version
1
+ # @rhizome-it/n8n-nodes-capucine-tools
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ n8n community node for [Capucine Tools](https://github.com/RHIZOME-IT/capucine-tools-api).
4
+
5
+ The tool list is read at runtime from the API's OpenAPI document (`<base URL>/docs-json`):
6
+ every route exposed by Capucine Tools shows up in the **Tool** dropdown, with its path, query
7
+ and JSON body fields in **Fields**. A new tool in the API needs no new release of this node.
8
+
9
+ ## Install
10
+
11
+ In n8n: *Settings → Community nodes → Install*, package `@rhizome-it/n8n-nodes-capucine-tools`.
12
+
13
+ ## Credential
14
+
15
+ **Capucine Tools API**: one credential per environment (local, prod…).
16
+
17
+ - **Base URL**: e.g. `https://capucine-tools.coolify.rhizome-it.com` or `http://localhost:3000`
18
+ - **API Key**: the API's `API_KEY`, sent as `Authorization: Bearer <key>`
19
+
20
+ The credential test only checks that the base URL serves the OpenAPI document; a wrong key
21
+ shows up as a 401 on the first call.
22
+
23
+ ## Development
24
+
25
+ ```bash
26
+ npm install --ignore-scripts # isolated-vm (pulled by the CLI) does not build on non-LTS Node
27
+ npm run build
28
+ npm test # smoke test against a fake API
29
+ npm run lint
30
+ npm run dev # local n8n with the node linked (needs Node LTS)
31
+ ```
32
+
33
+ ## Release
34
+
35
+ The CI (`.github/workflows/ci.yaml`) publishes to npm on every bare semver tag, through npm
36
+ trusted publishing (no npm token, with provenance):
37
+
38
+ ```bash
39
+ npm version patch # or minor / major: bumps package.json, commits, tags (e.g. 0.1.1)
40
+ git push --follow-tags
41
+ ```
42
+
43
+ `npm publish` from a workstation is blocked by `prepublishOnly`, except with `RELEASE_MODE=1`.
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class CapucineToolsApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ icon: Icon;
6
+ documentationUrl: string;
7
+ properties: INodeProperties[];
8
+ authenticate: IAuthenticateGeneric;
9
+ test: ICredentialTestRequest;
10
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CapucineToolsApi = void 0;
4
+ class CapucineToolsApi {
5
+ constructor() {
6
+ this.name = 'capucineToolsApi';
7
+ this.displayName = 'Capucine Tools API';
8
+ this.icon = 'file:../nodes/CapucineTools/capucineTools.svg';
9
+ this.documentationUrl = 'https://github.com/RHIZOME-IT/n8n-nodes-capucine-tools';
10
+ this.properties = [
11
+ {
12
+ displayName: 'Base URL',
13
+ name: 'baseUrl',
14
+ type: 'string',
15
+ default: '',
16
+ placeholder: 'https://capucine-tools.coolify.rhizome-it.com',
17
+ required: true,
18
+ },
19
+ {
20
+ displayName: 'API Key',
21
+ name: 'apiKey',
22
+ type: 'string',
23
+ typeOptions: { password: true },
24
+ default: '',
25
+ required: true,
26
+ },
27
+ ];
28
+ this.authenticate = {
29
+ type: 'generic',
30
+ properties: {
31
+ headers: { Authorization: '=Bearer {{$credentials.apiKey}}' },
32
+ },
33
+ };
34
+ this.test = {
35
+ request: {
36
+ baseURL: '={{$credentials.baseUrl.replace(/\\/$/, "")}}',
37
+ url: '/docs-json',
38
+ },
39
+ };
40
+ }
41
+ }
42
+ exports.CapucineToolsApi = CapucineToolsApi;
43
+ //# sourceMappingURL=CapucineToolsApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CapucineToolsApi.credentials.js","sourceRoot":"","sources":["../../credentials/CapucineToolsApi.credentials.ts"],"names":[],"mappings":";;;AASA,MAAa,gBAAgB;IAA7B;QACC,SAAI,GAAG,kBAAkB,CAAC;QAE1B,gBAAW,GAAG,oBAAoB,CAAC;QAEnC,SAAI,GAAS,+CAA+C,CAAC;QAE7D,qBAAgB,GAAG,wDAAwD,CAAC;QAE5E,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,+CAA+C;gBAC5D,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;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE,EAAE,aAAa,EAAE,iCAAiC,EAAE;aAC7D;SACD,CAAC;QAIF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,+CAA+C;gBACxD,GAAG,EAAE,YAAY;aACjB;SACD,CAAC;IACH,CAAC;CAAA;AA3CD,4CA2CC"}
@@ -0,0 +1,13 @@
1
+ import type { IExecuteFunctions, ILoadOptionsFunctions, INodeExecutionData, INodePropertyOptions, INodeType, INodeTypeDescription, ResourceMapperFields } from 'n8n-workflow';
2
+ export declare class CapucineTools implements INodeType {
3
+ description: INodeTypeDescription;
4
+ methods: {
5
+ loadOptions: {
6
+ getOperations(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
7
+ };
8
+ resourceMapping: {
9
+ getFields(this: ILoadOptionsFunctions): Promise<ResourceMapperFields>;
10
+ };
11
+ };
12
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
13
+ }
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CapucineTools = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const CREDENTIAL = 'capucineToolsApi';
6
+ const METHODS = ['get', 'post', 'put', 'patch', 'delete'];
7
+ async function getBaseUrl() {
8
+ const { baseUrl } = await this.getCredentials(CREDENTIAL);
9
+ return String(baseUrl).replace(/\/$/, '');
10
+ }
11
+ async function getSpec() {
12
+ const baseUrl = await getBaseUrl.call(this);
13
+ return (await this.helpers.httpRequest({
14
+ url: `${baseUrl}/docs-json`,
15
+ json: true,
16
+ }));
17
+ }
18
+ function deref(spec, schema) {
19
+ var _a, _b, _c, _d;
20
+ if (!(schema === null || schema === void 0 ? void 0 : schema.$ref))
21
+ return schema !== null && schema !== void 0 ? schema : {};
22
+ return (_d = (_b = (_a = spec.components) === null || _a === void 0 ? void 0 : _a.schemas) === null || _b === void 0 ? void 0 : _b[(_c = schema.$ref.split('/').pop()) !== null && _c !== void 0 ? _c : '']) !== null && _d !== void 0 ? _d : {};
23
+ }
24
+ function findOperation(spec, key) {
25
+ var _a;
26
+ const [method = '', path = ''] = key.split(' ');
27
+ return { method, path, op: (_a = spec.paths[path]) === null || _a === void 0 ? void 0 : _a[method.toLowerCase()] };
28
+ }
29
+ function inputsOf(spec, op) {
30
+ var _a, _b, _c, _d, _e;
31
+ const params = ((_a = op.parameters) !== null && _a !== void 0 ? _a : [])
32
+ .filter((p) => p.in === 'path' || p.in === 'query')
33
+ .map((p) => ({
34
+ name: p.name,
35
+ location: p.in,
36
+ required: p.in === 'path' || !!p.required,
37
+ schema: deref(spec, p.schema),
38
+ }));
39
+ const body = deref(spec, (_d = (_c = (_b = op.requestBody) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c['application/json']) === null || _d === void 0 ? void 0 : _d.schema);
40
+ const bodyInputs = Object.entries((_e = body.properties) !== null && _e !== void 0 ? _e : {}).map(([name, schema]) => {
41
+ var _a, _b;
42
+ return ({
43
+ name,
44
+ location: 'body',
45
+ required: (_b = (_a = body.required) === null || _a === void 0 ? void 0 : _a.includes(name)) !== null && _b !== void 0 ? _b : false,
46
+ schema: deref(spec, schema),
47
+ });
48
+ });
49
+ return [...params, ...bodyInputs];
50
+ }
51
+ function fieldType(schema) {
52
+ if (schema.enum)
53
+ return 'options';
54
+ switch (schema.type) {
55
+ case 'integer':
56
+ case 'number':
57
+ return 'number';
58
+ case 'boolean':
59
+ return 'boolean';
60
+ case 'array':
61
+ return 'array';
62
+ case 'object':
63
+ return 'object';
64
+ default:
65
+ return 'string';
66
+ }
67
+ }
68
+ class CapucineTools {
69
+ constructor() {
70
+ this.description = {
71
+ displayName: 'Capucine Tools',
72
+ name: 'capucineTools',
73
+ icon: 'file:capucineTools.svg',
74
+ group: ['transform'],
75
+ version: 1,
76
+ subtitle: '={{$parameter["operation"]}}',
77
+ description: 'Call a Capucine Tools tool',
78
+ defaults: { name: 'Capucine Tools' },
79
+ usableAsTool: true,
80
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
81
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
82
+ credentials: [{ name: CREDENTIAL, required: true }],
83
+ properties: [
84
+ {
85
+ displayName: 'Tool Name or ID',
86
+ name: 'operation',
87
+ type: 'options',
88
+ noDataExpression: true,
89
+ typeOptions: { loadOptionsMethod: 'getOperations' },
90
+ default: '',
91
+ required: true,
92
+ description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>',
93
+ },
94
+ {
95
+ displayName: 'Fields',
96
+ name: 'fields',
97
+ type: 'resourceMapper',
98
+ noDataExpression: true,
99
+ default: { mappingMode: 'defineBelow', value: null },
100
+ required: true,
101
+ typeOptions: {
102
+ loadOptionsDependsOn: ['operation'],
103
+ resourceMapper: {
104
+ resourceMapperMethod: 'getFields',
105
+ mode: 'add',
106
+ fieldWords: { singular: 'field', plural: 'fields' },
107
+ addAllFields: true,
108
+ multiKeyMatch: false,
109
+ supportAutoMap: false,
110
+ },
111
+ },
112
+ },
113
+ ],
114
+ };
115
+ this.methods = {
116
+ loadOptions: {
117
+ async getOperations() {
118
+ const spec = await getSpec.call(this);
119
+ return Object.entries(spec.paths).flatMap(([path, ops]) => Object.entries(ops)
120
+ .filter(([method]) => METHODS.includes(method))
121
+ .map(([method, op]) => {
122
+ var _a;
123
+ const value = `${method.toUpperCase()} ${path}`;
124
+ return { name: (_a = op.summary) !== null && _a !== void 0 ? _a : value, value, description: value };
125
+ }));
126
+ },
127
+ },
128
+ resourceMapping: {
129
+ async getFields() {
130
+ const spec = await getSpec.call(this);
131
+ const { op } = findOperation(spec, this.getNodeParameter('operation', ''));
132
+ if (!op)
133
+ return { fields: [] };
134
+ return {
135
+ fields: inputsOf(spec, op).map((input) => {
136
+ var _a;
137
+ return ({
138
+ id: input.name,
139
+ displayName: input.name,
140
+ required: input.required,
141
+ defaultMatch: false,
142
+ display: true,
143
+ type: fieldType(input.schema),
144
+ options: (_a = input.schema.enum) === null || _a === void 0 ? void 0 : _a.map((v) => ({
145
+ name: String(v),
146
+ value: v,
147
+ })),
148
+ });
149
+ }),
150
+ };
151
+ },
152
+ },
153
+ };
154
+ }
155
+ async execute() {
156
+ var _a;
157
+ const spec = await getSpec.call(this);
158
+ const baseUrl = await getBaseUrl.call(this);
159
+ const returnData = [];
160
+ for (let i = 0; i < this.getInputData().length; i++) {
161
+ const key = this.getNodeParameter('operation', i);
162
+ const { method, path, op } = findOperation(spec, key);
163
+ if (!op) {
164
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unknown tool "${key}": reload the tool list`, {
165
+ itemIndex: i,
166
+ });
167
+ }
168
+ try {
169
+ const values = ((_a = this.getNodeParameter('fields.value', i, {})) !== null && _a !== void 0 ? _a : {});
170
+ let url = path;
171
+ const qs = {};
172
+ const body = {};
173
+ for (const input of inputsOf(spec, op)) {
174
+ const value = values[input.name];
175
+ if (value === undefined || value === null || value === '')
176
+ continue;
177
+ if (input.location === 'path')
178
+ url = url.replace(`{${input.name}}`, encodeURIComponent(String(value)));
179
+ else if (input.location === 'query')
180
+ qs[input.name] = value;
181
+ else
182
+ body[input.name] = value;
183
+ }
184
+ const response = await this.helpers.httpRequestWithAuthentication.call(this, CREDENTIAL, {
185
+ method: method,
186
+ url: `${baseUrl}${url}`,
187
+ qs,
188
+ body: op.requestBody ? body : undefined,
189
+ json: true,
190
+ });
191
+ const json = response && typeof response === 'object' && !Array.isArray(response)
192
+ ? response
193
+ : { data: response };
194
+ returnData.push({ json, pairedItem: { item: i } });
195
+ }
196
+ catch (error) {
197
+ if (this.continueOnFail()) {
198
+ returnData.push({
199
+ json: { error: error.message },
200
+ pairedItem: { item: i },
201
+ });
202
+ continue;
203
+ }
204
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error, {
205
+ itemIndex: i,
206
+ });
207
+ }
208
+ }
209
+ return [returnData];
210
+ }
211
+ }
212
+ exports.CapucineTools = CapucineTools;
213
+ //# sourceMappingURL=CapucineTools.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CapucineTools.node.js","sourceRoot":"","sources":["../../../nodes/CapucineTools/CapucineTools.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ {
2
+ "node": "n8n-nodes-base.capucineTools",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Development"],
6
+ "resources": {
7
+ "primaryDocumentation": [{ "url": "https://github.com/RHIZOME-IT/n8n-nodes-capucine-tools" }]
8
+ }
9
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#2f6f4e"/><path d="M42 22a14 14 0 1 0 0 20" fill="none" stroke="#fff" stroke-width="7" stroke-linecap="round"/></svg>
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@rhizome-it/n8n-nodes-capucine-tools",
3
+ "version": "0.1.0",
4
+ "description": "n8n node for Capucine Tools (Rhizome IT)",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/RHIZOME-IT/n8n-nodes-capucine-tools",
7
+ "keywords": [
8
+ "n8n-community-node-package"
9
+ ],
10
+ "author": {
11
+ "name": "Raphael De Freitas",
12
+ "email": "raphael@de-freitas.net"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/RHIZOME-IT/n8n-nodes-capucine-tools.git"
17
+ },
18
+ "scripts": {
19
+ "build": "n8n-node build",
20
+ "build:watch": "tsc --watch",
21
+ "dev": "n8n-node dev",
22
+ "lint": "n8n-node lint",
23
+ "lint:fix": "n8n-node lint --fix",
24
+ "prepublishOnly": "n8n-node prerelease",
25
+ "test": "node test/smoke.mjs"
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "!dist/tsconfig.tsbuildinfo"
30
+ ],
31
+ "n8n": {
32
+ "n8nNodesApiVersion": 1,
33
+ "strict": true,
34
+ "credentials": [
35
+ "dist/credentials/CapucineToolsApi.credentials.js"
36
+ ],
37
+ "nodes": [
38
+ "dist/nodes/CapucineTools/CapucineTools.node.js"
39
+ ]
40
+ },
41
+ "devDependencies": {
42
+ "@n8n/node-cli": "^0.56.2",
43
+ "eslint": "^9.32.0",
44
+ "n8n-workflow": "^2.16.0",
45
+ "prettier": "^3.6.2",
46
+ "typescript": "^5.9.2"
47
+ },
48
+ "peerDependencies": {
49
+ "n8n-workflow": "*"
50
+ }
51
+ }
package/package.json CHANGED
@@ -1,6 +1,51 @@
1
1
  {
2
- "name": "@rhizome-it/n8n-nodes-capucine-tools",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
2
+ "name": "@rhizome-it/n8n-nodes-capucine-tools",
3
+ "version": "0.1.0",
4
+ "description": "n8n node for Capucine Tools (Rhizome IT)",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/RHIZOME-IT/n8n-nodes-capucine-tools",
7
+ "keywords": [
8
+ "n8n-community-node-package"
9
+ ],
10
+ "author": {
11
+ "name": "Raphael De Freitas",
12
+ "email": "raphael@de-freitas.net"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/RHIZOME-IT/n8n-nodes-capucine-tools.git"
17
+ },
18
+ "scripts": {
19
+ "build": "n8n-node build",
20
+ "build:watch": "tsc --watch",
21
+ "dev": "n8n-node dev",
22
+ "lint": "n8n-node lint",
23
+ "lint:fix": "n8n-node lint --fix",
24
+ "prepublishOnly": "n8n-node prerelease",
25
+ "test": "node test/smoke.mjs"
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "!dist/tsconfig.tsbuildinfo"
30
+ ],
31
+ "n8n": {
32
+ "n8nNodesApiVersion": 1,
33
+ "strict": true,
34
+ "credentials": [
35
+ "dist/credentials/CapucineToolsApi.credentials.js"
36
+ ],
37
+ "nodes": [
38
+ "dist/nodes/CapucineTools/CapucineTools.node.js"
39
+ ]
40
+ },
41
+ "devDependencies": {
42
+ "@n8n/node-cli": "^0.56.2",
43
+ "eslint": "^9.32.0",
44
+ "n8n-workflow": "^2.16.0",
45
+ "prettier": "^3.6.2",
46
+ "typescript": "^5.9.2"
47
+ },
48
+ "peerDependencies": {
49
+ "n8n-workflow": "*"
50
+ }
51
+ }