n8n-nodes-krova 0.1.1 → 0.1.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.
Files changed (2) hide show
  1. package/README.md +67 -45
  2. package/package.json +11 -3
package/README.md CHANGED
@@ -1,85 +1,107 @@
1
1
  # n8n-nodes-krova
2
2
 
3
- This is an [n8n](https://n8n.io) community node. It lets you use **Krova Cloud** in your n8n workflows.
3
+ [![npm version](https://img.shields.io/npm/v/n8n-nodes-krova)](https://www.npmjs.com/package/n8n-nodes-krova)
4
+ [![npm downloads](https://img.shields.io/npm/dm/n8n-nodes-krova)](https://www.npmjs.com/package/n8n-nodes-krova)
5
+ [![license](https://img.shields.io/npm/l/n8n-nodes-krova)](./LICENSE)
4
6
 
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.
7
+ Provision and manage **Krova Cloud** Cubes — and read the platform catalog — straight from your [n8n](https://n8n.io) workflows.
6
8
 
7
- [Installation](#installation) · [Credentials](#credentials) · [Operations](#operations) · [Usage examples](#usage-examples) · [Resources](#resources)
9
+ [Krova Cloud](https://krova.cloud) is a self-service cloud platform for running lightweight **Cubes** (Firecracker microVMs) on dedicated bare-metal servers. This community node wraps the Krova Cloud REST API so you can create, sleep, wake, list, and delete Cubes and query regions, images, and pricing — no glue code, no HTTP Request nodes.
8
10
 
9
- ## Installation
11
+ [Installation](#installation) · [Credential setup](#credential-setup) · [Operations](#operations) · [Example workflow](#example-workflow) · [Compatibility](#compatibility) · [Related packages](#related-packages) · [Resources](#resources)
10
12
 
11
- Follow the [community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n docs.
13
+ ## Installation
12
14
 
13
- In your n8n instance:
15
+ Install this node from within n8n — no CLI, no server restart:
14
16
 
15
- 1. Go to **Settings → Community Nodes**.
17
+ 1. Open **Settings → Community Nodes**.
16
18
  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
+ 3. Enter the package name **`n8n-nodes-krova`** (or the scoped alias **`@krovacloud/n8n-nodes-krova`** — identical contents).
20
+ 4. Acknowledge the community-node risk prompt and select **Install**.
19
21
 
20
- After installation the **Krova Cloud** node is available in the node panel.
22
+ The **Krova Cloud** node appears in the node panel immediately after install. For self-hosted / manual setups, see the official [community-nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/).
21
23
 
22
- ## Credentials
24
+ ## Credential setup
23
25
 
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.
26
+ Every operation authenticates with a **Krova Cloud API** credential.
25
27
 
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.
28
+ 1. Get an API key: sign in at **[krova.cloud](https://krova.cloud)**, open your Space, and create an API key. Keys are scoped per Space and inherit the permissions of the membership that created them. They look like `kro_...`.
29
+ 2. In n8n, add a new **Krova Cloud API** credential.
30
+ 3. Paste the key into **API Key** — it is sent to the API in the `X-API-KEY` header and stored encrypted by n8n.
31
+ 4. Leave **Base URL** at its default `https://krova.cloud/api/v1` (override only for self-hosted or test endpoints).
32
+ 5. Click **Test**. n8n calls `GET /regions` to confirm the key and endpoint are reachable.
33
+
34
+ | Field | Required | Default | Notes |
35
+ | --- | --- | --- | --- |
36
+ | **API Key** | Yes | — | A `kro_...` key from your Space. Sent as the `X-API-KEY` header. |
37
+ | **Base URL** | No | `https://krova.cloud/api/v1` | Change only for self-hosted or test endpoints. |
30
38
 
31
39
  ## Operations
32
40
 
33
41
  ### Cube
34
42
 
35
- Cubes are scoped to a **Space**, so every Cube operation requires a **Space ID**.
43
+ Cubes are scoped to a **Space**, so every Cube operation takes a **Space ID**.
36
44
 
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
+ | Operation | Fields | Description | Endpoint |
46
+ | --- | --- | --- | --- |
47
+ | **List** | Space ID | List all Cubes in a Space | `GET /spaces/{spaceId}/cubes` |
48
+ | **Get** | Space ID, Cube ID | Retrieve a single Cube by ID | `GET /spaces/{spaceId}/cubes/{cubeId}` |
49
+ | **Create** | Space ID, Name, Image, SSH Public Key, vCPU, RAM (GB), Disk (GB); optional Region, User Data | Create a new Cube in a Space | `POST /spaces/{spaceId}/cubes` |
50
+ | **Sleep** | Space ID, Cube ID | Sleep a running Cube — preserves data, stops compute billing | `POST /spaces/{spaceId}/cubes/{cubeId}/sleep` |
51
+ | **Wake** | Space ID, Cube ID | Wake a sleeping Cube | `POST /spaces/{spaceId}/cubes/{cubeId}/wake` |
52
+ | **Delete** | Space ID, Cube ID | Delete a Cube (asynchronous) | `DELETE /spaces/{spaceId}/cubes/{cubeId}` |
45
53
 
46
- ### Catalog
54
+ #### Create field notes
47
55
 
48
- Public, unauthenticated read endpoints (the API key is still sent but not required).
56
+ - **Image** — an OS image slug or ID. Fetch valid values from **Catalog → Get Images**.
57
+ - **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`.
58
+ - **vCPU / RAM (GB) / Disk (GB)** — sent as nested `resources.{vcpu,ramGb,diskGb}`. Actual ceilings depend on your Space tier and host capacity.
59
+ - **Region** (optional) — a region slug from **Catalog → Get Regions**. Leave empty to auto-select.
60
+ - **User Data** (optional) — a cloud-init script run at first boot (max 16 KB).
49
61
 
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` |
62
+ ### Catalog
55
63
 
56
- ## Usage examples
64
+ Public read endpoints. The API key is still sent but is not required for these.
57
65
 
58
- **Provision a Cube on a schedule**
66
+ | Operation | Fields | Description | Endpoint |
67
+ | --- | --- | --- | --- |
68
+ | **Get Regions** | — | List regions with available capacity | `GET /regions` |
69
+ | **Get Images** | — | List available OS images | `GET /images` |
70
+ | **Get Pricing** | — | Per-resource hourly rates and volume pricing tiers | `GET /pricing` |
59
71
 
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.
72
+ Each operation returns the raw Krova Cloud API response, ready to reference downstream with n8n expressions.
62
73
 
63
- **Sleep idle Cubes to save credit**
74
+ ## Example workflow
64
75
 
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.
76
+ **Provision a Cube every morning, sleep it every night — pay only for the hours you use.**
67
77
 
68
- **Pick the cheapest region before creating a Cube**
78
+ 1. **Schedule Trigger** (`0 8 * * *`) → **Krova Cloud** — Resource *Catalog*, Operation *Get Images* — to resolve the image slug you want to boot.
79
+ 2. **Krova Cloud** — Resource *Cube*, Operation *Create*. Set the Space ID, a Name, the Image slug from step 1, your SSH Public Key, and `vCPU` / `RAM (GB)` / `Disk (GB)`. The response contains the new Cube's ID.
80
+ 3. A second **Schedule Trigger** (`0 20 * * *`) → **Krova Cloud** — Resource *Cube*, Operation *List* → **Filter** for the Cubes you want idle → **Krova Cloud** — Operation *Sleep* on each Cube ID.
69
81
 
70
- 1. **Krova Cloud** (Resource: *Catalog*, Operation: *Get Regions*) and *Get Pricing*.
71
- 2. Feed the chosen region slug into a *Cube → Create* step.
82
+ Because a sleeping Cube keeps its disk but stops compute billing, this pattern gives you an ephemeral-by-day, zero-compute-by-night box driven entirely from n8n. Swap *Sleep* for *Delete* if you want it torn down instead of parked.
72
83
 
73
84
  ## Compatibility
74
85
 
75
- - Requires n8n with the community-nodes feature enabled.
76
- - Built and tested against `n8n-workflow` 2.x and Node.js 20.15+.
86
+ - Requires an n8n instance with the community-nodes feature enabled.
87
+ - Built and tested against `n8n-workflow` 2.x and Node.js **20.15+**.
88
+
89
+ ## Related packages
90
+
91
+ Krova Cloud ships first-party tooling across the ecosystem:
92
+
93
+ - **[@krovacloud/sdk](https://www.npmjs.com/package/@krovacloud/sdk)** — official TypeScript/JavaScript SDK.
94
+ - **[@krovacloud/mcp](https://www.npmjs.com/package/@krovacloud/mcp)** — Model Context Protocol server for AI agents.
95
+ - **[@krovacloud/webhook](https://www.npmjs.com/package/@krovacloud/webhook)** — HMAC signature verification for Krova webhooks.
96
+ - **[@krovacloud/n8n-nodes-krova](https://www.npmjs.com/package/@krovacloud/n8n-nodes-krova)** — the scoped alias of this exact package.
77
97
 
78
98
  ## Resources
79
99
 
80
100
  - [Krova Cloud](https://krova.cloud)
81
101
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
102
+ - [Report an issue](https://github.com/krovacloud/n8n-nodes-krova/issues)
103
+ - [Changelog](./CHANGELOG.md)
82
104
 
83
105
  ## License
84
106
 
85
- [MIT](./LICENSE)
107
+ [MIT](./LICENSE) © Krova Inc.
package/package.json CHANGED
@@ -1,16 +1,24 @@
1
1
  {
2
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.",
3
+ "version": "0.1.2",
4
+ "description": "n8n community node for Krova Cloud — create, sleep, wake, list, and delete Cubes (Firecracker microVMs) and read regions, images, and pricing via the Krova Cloud API.",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",
7
7
  "n8n",
8
+ "n8n-node",
8
9
  "krova",
9
10
  "krova-cloud",
10
11
  "cube",
12
+ "cubes",
11
13
  "firecracker",
14
+ "microvm",
12
15
  "cloud",
13
- "infrastructure"
16
+ "infrastructure",
17
+ "iaas",
18
+ "vm",
19
+ "server",
20
+ "provisioning",
21
+ "automation"
14
22
  ],
15
23
  "license": "MIT",
16
24
  "homepage": "https://krova.cloud",