n8n-nodes-krova 0.1.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 +85 -0
- package/dist/credentials/KrovaApi.credentials.d.ts +9 -0
- package/dist/credentials/KrovaApi.credentials.js +45 -0
- package/dist/credentials/KrovaApi.credentials.js.map +1 -0
- package/dist/nodes/Krova/Krova.node.d.ts +12 -0
- package/dist/nodes/Krova/Krova.node.js +414 -0
- package/dist/nodes/Krova/Krova.node.js.map +1 -0
- package/dist/nodes/Krova/krova.svg +12 -0
- package/package.json +66 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Krova Inc.
|
|
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,85 @@
|
|
|
1
|
+
# n8n-nodes-krova
|
|
2
|
+
|
|
3
|
+
This is an [n8n](https://n8n.io) community node. It lets you use **Krova Cloud** in your n8n workflows.
|
|
4
|
+
|
|
5
|
+
[Krova Cloud](https://krova.cloud) is a self-service cloud platform for running lightweight Cubes (Firecracker microVMs) on dedicated bare-metal servers. This node lets you provision and manage Cubes and read the platform catalog directly from an n8n workflow via the Krova Cloud REST API.
|
|
6
|
+
|
|
7
|
+
[Installation](#installation) · [Credentials](#credentials) · [Operations](#operations) · [Usage examples](#usage-examples) · [Resources](#resources)
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
Follow the [community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n docs.
|
|
12
|
+
|
|
13
|
+
In your n8n instance:
|
|
14
|
+
|
|
15
|
+
1. Go to **Settings → Community Nodes**.
|
|
16
|
+
2. Select **Install**.
|
|
17
|
+
3. Enter the package name `n8n-nodes-krova`.
|
|
18
|
+
4. Agree to the risks of using community nodes and select **Install**.
|
|
19
|
+
|
|
20
|
+
After installation the **Krova Cloud** node is available in the node panel.
|
|
21
|
+
|
|
22
|
+
## Credentials
|
|
23
|
+
|
|
24
|
+
You need a Krova Cloud API key. API keys are created per Space in the Krova Cloud dashboard and inherit the permissions of the membership that created them.
|
|
25
|
+
|
|
26
|
+
1. In n8n, create new **Krova Cloud API** credentials.
|
|
27
|
+
2. Paste your API key into the **API Key** field. It is sent to the API in the `X-API-KEY` header.
|
|
28
|
+
3. Leave **Base URL** at its default (`https://krova.cloud/api/v1`) unless you are pointing at a different endpoint.
|
|
29
|
+
4. Use **Test** to verify the key — n8n calls `GET /regions` to confirm connectivity.
|
|
30
|
+
|
|
31
|
+
## Operations
|
|
32
|
+
|
|
33
|
+
### Cube
|
|
34
|
+
|
|
35
|
+
Cubes are scoped to a **Space**, so every Cube operation requires a **Space ID**.
|
|
36
|
+
|
|
37
|
+
| Operation | Description | API endpoint |
|
|
38
|
+
| --- | --- | --- |
|
|
39
|
+
| **List** | List all Cubes in a Space | `GET /spaces/{spaceId}/cubes` |
|
|
40
|
+
| **Get** | Retrieve a single Cube by ID | `GET /spaces/{spaceId}/cubes/{cubeId}` |
|
|
41
|
+
| **Create** | Create a new Cube (`name`, `image`, `region`, `vcpu`, `ramGb`, `diskGb`, `sshPublicKey`, optional `userData`) | `POST /spaces/{spaceId}/cubes` |
|
|
42
|
+
| **Sleep** | Sleep a running Cube (preserves data, stops compute billing) | `POST /spaces/{spaceId}/cubes/{cubeId}/sleep` |
|
|
43
|
+
| **Wake** | Wake a sleeping Cube | `POST /spaces/{spaceId}/cubes/{cubeId}/wake` |
|
|
44
|
+
| **Delete** | Delete a Cube (asynchronous) | `DELETE /spaces/{spaceId}/cubes/{cubeId}` |
|
|
45
|
+
|
|
46
|
+
### Catalog
|
|
47
|
+
|
|
48
|
+
Public, unauthenticated read endpoints (the API key is still sent but not required).
|
|
49
|
+
|
|
50
|
+
| Operation | Description | API endpoint |
|
|
51
|
+
| --- | --- | --- |
|
|
52
|
+
| **Get Regions** | List regions with available capacity | `GET /regions` |
|
|
53
|
+
| **Get Images** | List available OS images | `GET /images` |
|
|
54
|
+
| **Get Pricing** | Per-resource hourly rates and volume pricing tiers | `GET /pricing` |
|
|
55
|
+
|
|
56
|
+
## Usage examples
|
|
57
|
+
|
|
58
|
+
**Provision a Cube on a schedule**
|
|
59
|
+
|
|
60
|
+
1. **Schedule Trigger** → **Krova Cloud** (Resource: *Cube*, Operation: *Create*).
|
|
61
|
+
2. Set the Space ID, a name, an image slug (from *Catalog → Get Images*), `vcpu`/`ramGb`/`diskGb`, and your SSH public key.
|
|
62
|
+
|
|
63
|
+
**Sleep idle Cubes to save credit**
|
|
64
|
+
|
|
65
|
+
1. **Krova Cloud** (Resource: *Cube*, Operation: *List*) → filter for idle Cubes.
|
|
66
|
+
2. **Krova Cloud** (Resource: *Cube*, Operation: *Sleep*) for each matching Cube ID.
|
|
67
|
+
|
|
68
|
+
**Pick the cheapest region before creating a Cube**
|
|
69
|
+
|
|
70
|
+
1. **Krova Cloud** (Resource: *Catalog*, Operation: *Get Regions*) and *Get Pricing*.
|
|
71
|
+
2. Feed the chosen region slug into a *Cube → Create* step.
|
|
72
|
+
|
|
73
|
+
## Compatibility
|
|
74
|
+
|
|
75
|
+
- Requires n8n with the community-nodes feature enabled.
|
|
76
|
+
- Built and tested against `n8n-workflow` 2.x and Node.js 20.15+.
|
|
77
|
+
|
|
78
|
+
## Resources
|
|
79
|
+
|
|
80
|
+
- [Krova Cloud](https://krova.cloud)
|
|
81
|
+
- [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
|
|
82
|
+
|
|
83
|
+
## License
|
|
84
|
+
|
|
85
|
+
[MIT](./LICENSE)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class KrovaApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
properties: INodeProperties[];
|
|
7
|
+
authenticate: IAuthenticateGeneric;
|
|
8
|
+
test: ICredentialTestRequest;
|
|
9
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KrovaApi = void 0;
|
|
4
|
+
class KrovaApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'krovaApi';
|
|
7
|
+
this.displayName = 'Krova Cloud API';
|
|
8
|
+
this.documentationUrl = 'https://krova.cloud';
|
|
9
|
+
this.properties = [
|
|
10
|
+
{
|
|
11
|
+
displayName: 'API Key',
|
|
12
|
+
name: 'apiKey',
|
|
13
|
+
type: 'string',
|
|
14
|
+
typeOptions: { password: true },
|
|
15
|
+
default: '',
|
|
16
|
+
required: true,
|
|
17
|
+
description: 'Your Krova Cloud API key. Keys are scoped per Space and sent in the X-API-KEY header.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
displayName: 'Base URL',
|
|
21
|
+
name: 'baseUrl',
|
|
22
|
+
type: 'string',
|
|
23
|
+
default: 'https://krova.cloud/api/v1',
|
|
24
|
+
description: 'The Krova Cloud API base URL. Override only for self-hosted or test endpoints.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
this.authenticate = {
|
|
28
|
+
type: 'generic',
|
|
29
|
+
properties: {
|
|
30
|
+
headers: {
|
|
31
|
+
'X-API-KEY': '={{ $credentials.apiKey }}',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
this.test = {
|
|
36
|
+
request: {
|
|
37
|
+
baseURL: '={{ $credentials.baseUrl }}',
|
|
38
|
+
url: '/regions',
|
|
39
|
+
method: 'GET',
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.KrovaApi = KrovaApi;
|
|
45
|
+
//# sourceMappingURL=KrovaApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KrovaApi.credentials.js","sourceRoot":"","sources":["../../credentials/KrovaApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,QAAQ;IAArB;QACC,SAAI,GAAG,UAAU,CAAC;QAElB,gBAAW,GAAG,iBAAiB,CAAC;QAEhC,qBAAgB,GAAG,qBAAqB,CAAC;QAEzC,eAAU,GAAsB;YAC/B;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;gBACd,WAAW,EACV,uFAAuF;aACxF;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,4BAA4B;gBACrC,WAAW,EAAE,gFAAgF;aAC7F;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,WAAW,EAAE,4BAA4B;iBACzC;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,6BAA6B;gBACtC,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AA3CD,4BA2CC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
/**
|
|
3
|
+
* Krova Cloud node (declarative style).
|
|
4
|
+
*
|
|
5
|
+
* Talks to the Krova Cloud REST API (https://krova.cloud/api/v1) via n8n's
|
|
6
|
+
* declarative routing — every operation maps to a real endpoint from the
|
|
7
|
+
* published OpenAPI spec. Authentication is the X-API-KEY header, injected by
|
|
8
|
+
* the KrovaApi credential.
|
|
9
|
+
*/
|
|
10
|
+
export declare class Krova implements INodeType {
|
|
11
|
+
description: INodeTypeDescription;
|
|
12
|
+
}
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Krova = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Krova Cloud node (declarative style).
|
|
6
|
+
*
|
|
7
|
+
* Talks to the Krova Cloud REST API (https://krova.cloud/api/v1) via n8n's
|
|
8
|
+
* declarative routing — every operation maps to a real endpoint from the
|
|
9
|
+
* published OpenAPI spec. Authentication is the X-API-KEY header, injected by
|
|
10
|
+
* the KrovaApi credential.
|
|
11
|
+
*/
|
|
12
|
+
class Krova {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.description = {
|
|
15
|
+
displayName: 'Krova Cloud',
|
|
16
|
+
name: 'krova',
|
|
17
|
+
icon: 'file:krova.svg',
|
|
18
|
+
group: ['transform'],
|
|
19
|
+
version: 1,
|
|
20
|
+
subtitle: '={{ $parameter["operation"] + ": " + $parameter["resource"] }}',
|
|
21
|
+
description: 'Provision and manage Krova Cloud Cubes and read the platform catalog',
|
|
22
|
+
defaults: {
|
|
23
|
+
name: 'Krova Cloud',
|
|
24
|
+
},
|
|
25
|
+
inputs: ['main'],
|
|
26
|
+
outputs: ['main'],
|
|
27
|
+
credentials: [
|
|
28
|
+
{
|
|
29
|
+
name: 'krovaApi',
|
|
30
|
+
required: true,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
requestDefaults: {
|
|
34
|
+
baseURL: '={{ $credentials.baseUrl }}',
|
|
35
|
+
headers: {
|
|
36
|
+
Accept: 'application/json',
|
|
37
|
+
'Content-Type': 'application/json',
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
properties: [
|
|
41
|
+
// ------------------------------------------------------------------
|
|
42
|
+
// Resource
|
|
43
|
+
// ------------------------------------------------------------------
|
|
44
|
+
{
|
|
45
|
+
displayName: 'Resource',
|
|
46
|
+
name: 'resource',
|
|
47
|
+
type: 'options',
|
|
48
|
+
noDataExpression: true,
|
|
49
|
+
options: [
|
|
50
|
+
{
|
|
51
|
+
name: 'Cube',
|
|
52
|
+
value: 'cube',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'Catalog',
|
|
56
|
+
value: 'catalog',
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
default: 'cube',
|
|
60
|
+
},
|
|
61
|
+
// ------------------------------------------------------------------
|
|
62
|
+
// Cube: Operations
|
|
63
|
+
// ------------------------------------------------------------------
|
|
64
|
+
{
|
|
65
|
+
displayName: 'Operation',
|
|
66
|
+
name: 'operation',
|
|
67
|
+
type: 'options',
|
|
68
|
+
noDataExpression: true,
|
|
69
|
+
displayOptions: {
|
|
70
|
+
show: {
|
|
71
|
+
resource: ['cube'],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
options: [
|
|
75
|
+
{
|
|
76
|
+
name: 'Create',
|
|
77
|
+
value: 'create',
|
|
78
|
+
action: 'Create a cube',
|
|
79
|
+
description: 'Create a new Cube in a Space',
|
|
80
|
+
routing: {
|
|
81
|
+
request: {
|
|
82
|
+
method: 'POST',
|
|
83
|
+
url: '=/spaces/{{ $parameter["spaceId"] }}/cubes',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'Delete',
|
|
89
|
+
value: 'delete',
|
|
90
|
+
action: 'Delete a cube',
|
|
91
|
+
description: 'Delete a Cube (asynchronous)',
|
|
92
|
+
routing: {
|
|
93
|
+
request: {
|
|
94
|
+
method: 'DELETE',
|
|
95
|
+
url: '=/spaces/{{ $parameter["spaceId"] }}/cubes/{{ $parameter["cubeId"] }}',
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'Get',
|
|
101
|
+
value: 'get',
|
|
102
|
+
action: 'Get a cube',
|
|
103
|
+
description: 'Retrieve a single Cube by ID',
|
|
104
|
+
routing: {
|
|
105
|
+
request: {
|
|
106
|
+
method: 'GET',
|
|
107
|
+
url: '=/spaces/{{ $parameter["spaceId"] }}/cubes/{{ $parameter["cubeId"] }}',
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'List',
|
|
113
|
+
value: 'list',
|
|
114
|
+
action: 'List cubes',
|
|
115
|
+
description: 'List all Cubes in a Space',
|
|
116
|
+
routing: {
|
|
117
|
+
request: {
|
|
118
|
+
method: 'GET',
|
|
119
|
+
url: '=/spaces/{{ $parameter["spaceId"] }}/cubes',
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: 'Sleep',
|
|
125
|
+
value: 'sleep',
|
|
126
|
+
action: 'Sleep a cube',
|
|
127
|
+
description: 'Sleep a running Cube (preserves data, stops compute billing)',
|
|
128
|
+
routing: {
|
|
129
|
+
request: {
|
|
130
|
+
method: 'POST',
|
|
131
|
+
url: '=/spaces/{{ $parameter["spaceId"] }}/cubes/{{ $parameter["cubeId"] }}/sleep',
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'Wake',
|
|
137
|
+
value: 'wake',
|
|
138
|
+
action: 'Wake a cube',
|
|
139
|
+
description: 'Wake a sleeping Cube',
|
|
140
|
+
routing: {
|
|
141
|
+
request: {
|
|
142
|
+
method: 'POST',
|
|
143
|
+
url: '=/spaces/{{ $parameter["spaceId"] }}/cubes/{{ $parameter["cubeId"] }}/wake',
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
default: 'list',
|
|
149
|
+
},
|
|
150
|
+
// ------------------------------------------------------------------
|
|
151
|
+
// Cube: Shared fields
|
|
152
|
+
// ------------------------------------------------------------------
|
|
153
|
+
{
|
|
154
|
+
displayName: 'Space ID',
|
|
155
|
+
name: 'spaceId',
|
|
156
|
+
type: 'string',
|
|
157
|
+
required: true,
|
|
158
|
+
default: '',
|
|
159
|
+
description: 'The ID of the Space that owns the Cube',
|
|
160
|
+
displayOptions: {
|
|
161
|
+
show: {
|
|
162
|
+
resource: ['cube'],
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
displayName: 'Cube ID',
|
|
168
|
+
name: 'cubeId',
|
|
169
|
+
type: 'string',
|
|
170
|
+
required: true,
|
|
171
|
+
default: '',
|
|
172
|
+
description: 'The ID of the Cube to act on',
|
|
173
|
+
displayOptions: {
|
|
174
|
+
show: {
|
|
175
|
+
resource: ['cube'],
|
|
176
|
+
operation: ['get', 'delete', 'sleep', 'wake'],
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
// ------------------------------------------------------------------
|
|
181
|
+
// Cube: Create fields
|
|
182
|
+
// ------------------------------------------------------------------
|
|
183
|
+
{
|
|
184
|
+
displayName: 'Name',
|
|
185
|
+
name: 'name',
|
|
186
|
+
type: 'string',
|
|
187
|
+
required: true,
|
|
188
|
+
default: '',
|
|
189
|
+
description: 'A human-readable name for the Cube',
|
|
190
|
+
displayOptions: {
|
|
191
|
+
show: {
|
|
192
|
+
resource: ['cube'],
|
|
193
|
+
operation: ['create'],
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
routing: {
|
|
197
|
+
send: {
|
|
198
|
+
type: 'body',
|
|
199
|
+
property: 'name',
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
displayName: 'Image',
|
|
205
|
+
name: 'image',
|
|
206
|
+
type: 'string',
|
|
207
|
+
required: true,
|
|
208
|
+
default: '',
|
|
209
|
+
description: 'The OS image slug or ID to boot (see the Catalog → Get Images operation for available values)',
|
|
210
|
+
displayOptions: {
|
|
211
|
+
show: {
|
|
212
|
+
resource: ['cube'],
|
|
213
|
+
operation: ['create'],
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
routing: {
|
|
217
|
+
send: {
|
|
218
|
+
type: 'body',
|
|
219
|
+
property: 'image',
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
displayName: 'SSH Public Key',
|
|
225
|
+
name: 'sshPublicKey',
|
|
226
|
+
type: 'string',
|
|
227
|
+
required: true,
|
|
228
|
+
default: '',
|
|
229
|
+
description: 'SSH public key written to /root/.ssh/authorized_keys at boot. Must start with ssh-ed25519, ssh-rsa, ecdsa-sha2-*, ssh-dss, or sk-*@openssh.com.',
|
|
230
|
+
displayOptions: {
|
|
231
|
+
show: {
|
|
232
|
+
resource: ['cube'],
|
|
233
|
+
operation: ['create'],
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
routing: {
|
|
237
|
+
send: {
|
|
238
|
+
type: 'body',
|
|
239
|
+
property: 'sshPublicKey',
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
displayName: 'vCPU',
|
|
245
|
+
name: 'vcpu',
|
|
246
|
+
type: 'number',
|
|
247
|
+
required: true,
|
|
248
|
+
default: 1,
|
|
249
|
+
typeOptions: {
|
|
250
|
+
minValue: 1,
|
|
251
|
+
},
|
|
252
|
+
description: 'Number of virtual CPUs',
|
|
253
|
+
displayOptions: {
|
|
254
|
+
show: {
|
|
255
|
+
resource: ['cube'],
|
|
256
|
+
operation: ['create'],
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
routing: {
|
|
260
|
+
send: {
|
|
261
|
+
type: 'body',
|
|
262
|
+
property: 'resources.vcpu',
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
displayName: 'RAM (GB)',
|
|
268
|
+
name: 'ramGb',
|
|
269
|
+
type: 'number',
|
|
270
|
+
required: true,
|
|
271
|
+
default: 1,
|
|
272
|
+
typeOptions: {
|
|
273
|
+
minValue: 1,
|
|
274
|
+
},
|
|
275
|
+
description: 'Amount of RAM in gibibytes',
|
|
276
|
+
displayOptions: {
|
|
277
|
+
show: {
|
|
278
|
+
resource: ['cube'],
|
|
279
|
+
operation: ['create'],
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
routing: {
|
|
283
|
+
send: {
|
|
284
|
+
type: 'body',
|
|
285
|
+
property: 'resources.ramGb',
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
displayName: 'Disk (GB)',
|
|
291
|
+
name: 'diskGb',
|
|
292
|
+
type: 'number',
|
|
293
|
+
required: true,
|
|
294
|
+
default: 10,
|
|
295
|
+
typeOptions: {
|
|
296
|
+
minValue: 1,
|
|
297
|
+
},
|
|
298
|
+
description: 'Disk size in gibibytes',
|
|
299
|
+
displayOptions: {
|
|
300
|
+
show: {
|
|
301
|
+
resource: ['cube'],
|
|
302
|
+
operation: ['create'],
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
routing: {
|
|
306
|
+
send: {
|
|
307
|
+
type: 'body',
|
|
308
|
+
property: 'resources.diskGb',
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
displayName: 'Additional Fields',
|
|
314
|
+
name: 'additionalFields',
|
|
315
|
+
type: 'collection',
|
|
316
|
+
placeholder: 'Add Field',
|
|
317
|
+
default: {},
|
|
318
|
+
displayOptions: {
|
|
319
|
+
show: {
|
|
320
|
+
resource: ['cube'],
|
|
321
|
+
operation: ['create'],
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
options: [
|
|
325
|
+
{
|
|
326
|
+
displayName: 'Region',
|
|
327
|
+
name: 'region',
|
|
328
|
+
type: 'string',
|
|
329
|
+
default: '',
|
|
330
|
+
description: 'Region slug from the Catalog → Get Regions operation. Leave empty to auto-select.',
|
|
331
|
+
routing: {
|
|
332
|
+
send: {
|
|
333
|
+
type: 'body',
|
|
334
|
+
property: 'region',
|
|
335
|
+
},
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
displayName: 'User Data',
|
|
340
|
+
name: 'userData',
|
|
341
|
+
type: 'string',
|
|
342
|
+
typeOptions: {
|
|
343
|
+
rows: 4,
|
|
344
|
+
},
|
|
345
|
+
default: '',
|
|
346
|
+
description: 'Cloud-init script run at first boot (max 16 KB)',
|
|
347
|
+
routing: {
|
|
348
|
+
send: {
|
|
349
|
+
type: 'body',
|
|
350
|
+
property: 'userData',
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
},
|
|
354
|
+
],
|
|
355
|
+
},
|
|
356
|
+
// ------------------------------------------------------------------
|
|
357
|
+
// Catalog: Operations
|
|
358
|
+
// ------------------------------------------------------------------
|
|
359
|
+
{
|
|
360
|
+
displayName: 'Operation',
|
|
361
|
+
name: 'operation',
|
|
362
|
+
type: 'options',
|
|
363
|
+
noDataExpression: true,
|
|
364
|
+
displayOptions: {
|
|
365
|
+
show: {
|
|
366
|
+
resource: ['catalog'],
|
|
367
|
+
},
|
|
368
|
+
},
|
|
369
|
+
options: [
|
|
370
|
+
{
|
|
371
|
+
name: 'Get Regions',
|
|
372
|
+
value: 'getRegions',
|
|
373
|
+
action: 'Get regions',
|
|
374
|
+
description: 'List regions with available capacity',
|
|
375
|
+
routing: {
|
|
376
|
+
request: {
|
|
377
|
+
method: 'GET',
|
|
378
|
+
url: '/regions',
|
|
379
|
+
},
|
|
380
|
+
},
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
name: 'Get Images',
|
|
384
|
+
value: 'getImages',
|
|
385
|
+
action: 'Get images',
|
|
386
|
+
description: 'List available OS images',
|
|
387
|
+
routing: {
|
|
388
|
+
request: {
|
|
389
|
+
method: 'GET',
|
|
390
|
+
url: '/images',
|
|
391
|
+
},
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
name: 'Get Pricing',
|
|
396
|
+
value: 'getPricing',
|
|
397
|
+
action: 'Get pricing',
|
|
398
|
+
description: 'Get per-resource hourly rates and volume pricing tiers',
|
|
399
|
+
routing: {
|
|
400
|
+
request: {
|
|
401
|
+
method: 'GET',
|
|
402
|
+
url: '/pricing',
|
|
403
|
+
},
|
|
404
|
+
},
|
|
405
|
+
},
|
|
406
|
+
],
|
|
407
|
+
default: 'getRegions',
|
|
408
|
+
},
|
|
409
|
+
],
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
exports.Krova = Krova;
|
|
414
|
+
//# sourceMappingURL=Krova.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Krova.node.js","sourceRoot":"","sources":["../../../nodes/Krova/Krova.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" fill="none">
|
|
2
|
+
<title>Krova Cloud</title>
|
|
3
|
+
<!-- Isometric cube: three visible faces -->
|
|
4
|
+
<!-- top face -->
|
|
5
|
+
<path d="M32 6 L56 18 L32 30 L8 18 Z" fill="#2DD4BF"/>
|
|
6
|
+
<!-- left face -->
|
|
7
|
+
<path d="M8 18 L32 30 L32 58 L8 46 Z" fill="#0F766E"/>
|
|
8
|
+
<!-- right face -->
|
|
9
|
+
<path d="M56 18 L32 30 L32 58 L56 46 Z" fill="#14B8A6"/>
|
|
10
|
+
<!-- edge highlights -->
|
|
11
|
+
<path d="M32 6 L56 18 L32 30 L8 18 Z M32 30 L32 58" stroke="#F0FDFA" stroke-width="1.5" stroke-linejoin="round" fill="none" opacity="0.6"/>
|
|
12
|
+
</svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-krova",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "n8n community node for Krova Cloud — provision and manage Cubes (Firecracker microVMs) and read the platform catalog via the Krova Cloud API.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"n8n-community-node-package",
|
|
7
|
+
"n8n",
|
|
8
|
+
"krova",
|
|
9
|
+
"krova-cloud",
|
|
10
|
+
"cube",
|
|
11
|
+
"firecracker",
|
|
12
|
+
"cloud",
|
|
13
|
+
"infrastructure"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"homepage": "https://krova.cloud",
|
|
17
|
+
"author": {
|
|
18
|
+
"name": "Krova Inc.",
|
|
19
|
+
"email": "support@krova.cloud"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/krovacloud/n8n-nodes-krova.git"
|
|
24
|
+
},
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/krovacloud/n8n-nodes-krova/issues"
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=20.15"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsc && node scripts/copy-icons.mjs",
|
|
33
|
+
"dev": "tsc --watch",
|
|
34
|
+
"format": "prettier nodes credentials --write",
|
|
35
|
+
"lint": "eslint nodes credentials package.json",
|
|
36
|
+
"lint:fix": "eslint nodes credentials package.json --fix",
|
|
37
|
+
"test": "node --test",
|
|
38
|
+
"prepublishOnly": "pnpm build && pnpm lint"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist"
|
|
42
|
+
],
|
|
43
|
+
"n8n": {
|
|
44
|
+
"n8nNodesApiVersion": 1,
|
|
45
|
+
"credentials": [
|
|
46
|
+
"dist/credentials/KrovaApi.credentials.js"
|
|
47
|
+
],
|
|
48
|
+
"nodes": [
|
|
49
|
+
"dist/nodes/Krova/Krova.node.js"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@typescript-eslint/parser": "8.62.1",
|
|
54
|
+
"@typescript-eslint/utils": "8.62.1",
|
|
55
|
+
"eslint": "8.57.1",
|
|
56
|
+
"eslint-plugin-n8n-nodes-base": "1.16.7",
|
|
57
|
+
"jsonc-eslint-parser": "3.1.0",
|
|
58
|
+
"n8n-core": "2.16.1",
|
|
59
|
+
"n8n-workflow": "2.16.0",
|
|
60
|
+
"prettier": "3.9.4",
|
|
61
|
+
"typescript": "5.9.3"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"n8n-workflow": "*"
|
|
65
|
+
}
|
|
66
|
+
}
|