n8n-nodes-do 1.0.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,19 @@
1
+ Copyright 2022 n8n
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,350 @@
1
+ # n8n-nodes-do
2
+
3
+ <div align="center">
4
+
5
+ **Official n8n community node for [DigitalOcean](https://www.digitalocean.com/)**
6
+
7
+ Manage your DigitalOcean Droplets, Volumes, Databases, Kubernetes clusters, and more — all from your n8n workflows.
8
+
9
+ [![npm version](https://img.shields.io/npm/v/n8n-nodes-do.svg)](https://www.npmjs.com/package/n8n-nodes-do)
10
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
11
+ [![n8n community node](https://img.shields.io/badge/n8n-community%20node-orange)](https://docs.n8n.io/integrations/community-nodes/)
12
+
13
+ </div>
14
+
15
+ ---
16
+
17
+ ## Features
18
+
19
+ - **13 Resources** — Droplets, Volumes, Databases, Domains, Images, Kubernetes, Load Balancers, Projects, Reserved IPs, Snapshots, SSH Keys, VPCs, Account
20
+ - **50+ Operations** — Complete CRUD coverage for all resources
21
+ - **Auto-authentication** — Uses Personal Access Token (Bearer token) authentication
22
+ - **Pagination** — Automatically handles paginated responses for list operations
23
+ - **Expression Support** — All ID fields support n8n expressions (`{{ $json.dropletId }}`)
24
+ - **Dynamic Dropdowns** — Resources load dynamically from your DigitalOcean account
25
+ - **AI Tool Ready** — Node is marked `usableAsTool: true` for use in AI agent workflows
26
+
27
+ ---
28
+
29
+ ## Installation
30
+
31
+ ### In n8n Cloud or Self-hosted n8n
32
+
33
+ 1. Go to **Settings → Community Nodes**
34
+ 2. Click **Install**
35
+ 3. Enter: `n8n-nodes-do`
36
+ 4. Click **Install**
37
+ 5. Restart n8n if prompted
38
+
39
+ ### Via npm (self-hosted)
40
+
41
+ ```bash
42
+ npm install n8n-nodes-do
43
+ ```
44
+
45
+ ---
46
+
47
+ ## Authentication
48
+
49
+ This node uses DigitalOcean Personal Access Token authentication. You'll need:
50
+
51
+ | Field | Description |
52
+ |-------|-------------|
53
+ | **Personal Access Token** | Your DigitalOcean API token |
54
+
55
+ ### How to get your credentials:
56
+
57
+ 1. Log in to [cloud.digitalocean.com](https://cloud.digitalocean.com/)
58
+ 2. Navigate to **API → Tokens/Keys**
59
+ 3. Click **Generate New Token**
60
+ 4. Give it a name and select **Read** and **Write** scopes
61
+ 5. Copy the token (you won't be able to see it again!)
62
+
63
+ > **Note:** Keep your token secure! It provides full access to your DigitalOcean account.
64
+
65
+ ---
66
+
67
+ ## Resources & Operations
68
+
69
+ ### Account
70
+
71
+ | Operation | Description |
72
+ |-----------|-------------|
73
+ | **Get** | Get account information |
74
+
75
+ ---
76
+
77
+ ### Droplet
78
+
79
+ Manage your DigitalOcean virtual machines.
80
+
81
+ | Operation | Description |
82
+ |-----------|-------------|
83
+ | **Get Many** | List all Droplets |
84
+ | **Get** | Get a specific Droplet by ID |
85
+ | **Create** | Create a new Droplet |
86
+ | **Delete** | Delete a Droplet |
87
+ | **Reboot** | Reboot a Droplet |
88
+ | **Shutdown** | Shutdown a Droplet |
89
+ | **Power On** | Power on a Droplet |
90
+ | **Power Off** | Power off a Droplet |
91
+
92
+ **Parameters for Create:**
93
+ - Name (hostname)
94
+ - Region (e.g., nyc1, sfo3, ams3)
95
+ - Size (e.g., s-1vcpu-1gb, s-2vcpu-4gb)
96
+ - Image (OS distribution or custom image)
97
+
98
+ ---
99
+
100
+ ### Volume
101
+
102
+ Manage block storage volumes.
103
+
104
+ | Operation | Description |
105
+ |-----------|-------------|
106
+ | **Get Many** | List all volumes |
107
+ | **Get** | Get a specific volume by ID |
108
+ | **Create** | Create a new volume |
109
+ | **Delete** | Delete a volume |
110
+
111
+ ---
112
+
113
+ ### Database
114
+
115
+ Manage managed database clusters.
116
+
117
+ | Operation | Description |
118
+ |-----------|-------------|
119
+ | **Get Many** | List all database clusters |
120
+ | **Get** | Get a specific database cluster |
121
+ | **Create** | Create a new database cluster |
122
+ | **Delete** | Delete a database cluster |
123
+
124
+ **Supported Engines:** PostgreSQL, MySQL, MongoDB, Kafka, Valkey, OpenSearch
125
+
126
+ ---
127
+
128
+ ### Domain
129
+
130
+ Manage domains and DNS records.
131
+
132
+ | Operation | Description |
133
+ |-----------|-------------|
134
+ | **Get Many** | List all domains |
135
+ | **Get** | Get a specific domain |
136
+ | **Create** | Create a new domain |
137
+ | **Delete** | Delete a domain |
138
+ | **Get Records** | List DNS records for a domain |
139
+
140
+ ---
141
+
142
+ ### Image
143
+
144
+ Manage images (distributions and snapshots).
145
+
146
+ | Operation | Description |
147
+ |-----------|-------------|
148
+ | **Get Many** | List all images |
149
+ | **Get** | Get a specific image |
150
+ | **Delete** | Delete an image |
151
+
152
+ ---
153
+
154
+ ### Kubernetes (DOKS)
155
+
156
+ Manage DigitalOcean Kubernetes clusters.
157
+
158
+ | Operation | Description |
159
+ |-----------|-------------|
160
+ | **Get Many Clusters** | List all Kubernetes clusters |
161
+ | **Get Cluster** | Get a specific cluster |
162
+ | **Create Cluster** | Create a new cluster |
163
+ | **Delete Cluster** | Delete a cluster |
164
+ | **Get Kubeconfig** | Get kubeconfig for a cluster |
165
+
166
+ ---
167
+
168
+ ### Load Balancer
169
+
170
+ Manage load balancers.
171
+
172
+ | Operation | Description |
173
+ |-----------|-------------|
174
+ | **Get Many** | List all load balancers |
175
+ | **Get** | Get a specific load balancer |
176
+ | **Create** | Create a load balancer |
177
+ | **Delete** | Delete a load balancer |
178
+
179
+ ---
180
+
181
+ ### Project
182
+
183
+ Organize resources into projects.
184
+
185
+ | Operation | Description |
186
+ |-----------|-------------|
187
+ | **Get Many** | List all projects |
188
+ | **Get** | Get a specific project |
189
+ | **Create** | Create a new project |
190
+ | **Delete** | Delete a project |
191
+
192
+ ---
193
+
194
+ ### Reserved IP
195
+
196
+ Manage reserved (static) IP addresses.
197
+
198
+ | Operation | Description |
199
+ |-----------|-------------|
200
+ | **Get Many** | List all reserved IPs |
201
+ | **Get** | Get a specific reserved IP |
202
+ | **Create** | Create a reserved IP |
203
+ | **Delete** | Delete a reserved IP |
204
+
205
+ ---
206
+
207
+ ### Snapshot
208
+
209
+ Manage snapshots of Droplets and volumes.
210
+
211
+ | Operation | Description |
212
+ |-----------|-------------|
213
+ | **Get Many** | List all snapshots |
214
+ | **Get** | Get a specific snapshot |
215
+ | **Delete** | Delete a snapshot |
216
+
217
+ ---
218
+
219
+ ### SSH Key
220
+
221
+ Manage SSH keys for Droplet access.
222
+
223
+ | Operation | Description |
224
+ |-----------|-------------|
225
+ | **Get Many** | List all SSH keys |
226
+ | **Get** | Get a specific SSH key |
227
+ | **Create** | Add a new SSH key |
228
+ | **Delete** | Delete an SSH key |
229
+
230
+ ---
231
+
232
+ ### VPC
233
+
234
+ Manage Virtual Private Clouds.
235
+
236
+ | Operation | Description |
237
+ |-----------|-------------|
238
+ | **Get Many** | List all VPCs |
239
+ | **Get** | Get a specific VPC |
240
+ | **Create** | Create a new VPC |
241
+ | **Delete** | Delete a VPC |
242
+
243
+ ---
244
+
245
+ ## Usage Examples
246
+
247
+ ### Example 1: Create a Droplet
248
+
249
+ ```
250
+ [DigitalOcean - Create Droplet]
251
+ Name: "my-server"
252
+ Region: "nyc1"
253
+ Size: "s-1vcpu-1gb"
254
+ Image: "ubuntu-22-04-x64"
255
+ ```
256
+
257
+ ### Example 2: List All Droplets and Shutdown Running Ones
258
+
259
+ ```
260
+ [DigitalOcean - Get Many Droplets]
261
+
262
+ [If: status = "running"]
263
+
264
+ [DigitalOcean - Shutdown]
265
+ Droplet ID: {{ $json.id }}
266
+ ```
267
+
268
+ ### Example 3: Create Daily Database Backups
269
+
270
+ ```
271
+ [Schedule Trigger - Daily at 2 AM]
272
+
273
+ [DigitalOcean - Get Many Databases]
274
+
275
+ [DigitalOcean - Create Snapshot]
276
+ (for each database)
277
+ ```
278
+
279
+ ---
280
+
281
+ ## Expression Reference
282
+
283
+ When chaining nodes, use these expressions:
284
+
285
+ | Field | Expression |
286
+ |-------|-----------|
287
+ | Droplet ID | `{{ $json.id }}` |
288
+ | Droplet Name | `{{ $json.name }}` |
289
+ | Droplet Status | `{{ $json.status }}` |
290
+ | Region | `{{ $json.region.slug }}` |
291
+ | IP Address | `{{ $json.networks.v4[0].ip_address }}` |
292
+
293
+ ---
294
+
295
+ ## Regions
296
+
297
+ DigitalOcean supports the following regions:
298
+
299
+ | Code | Location |
300
+ |------|----------|
301
+ | nyc1, nyc2, nyc3 | New York, USA |
302
+ | sfo2, sfo3 | San Francisco, USA |
303
+ | tor1 | Toronto, Canada |
304
+ | lon1 | London, UK |
305
+ | fra1 | Frankfurt, Germany |
306
+ | ams2, ams3 | Amsterdam, Netherlands |
307
+ | sgp1 | Singapore |
308
+ | blr1 | Bangalore, India |
309
+ | syd1 | Sydney, Australia |
310
+
311
+ ---
312
+
313
+ ## Troubleshooting
314
+
315
+ ### Authentication fails
316
+
317
+ - Double-check your Personal Access Token
318
+ - Make sure the token has **Read** and **Write** scopes
319
+ - Verify the token hasn't expired or been revoked
320
+
321
+ ### Droplet ID field not visible
322
+
323
+ - Confirm **Resource** = `Droplet` and the **Operation** requires an ID
324
+ - The ID field appears for operations like Get, Delete, Reboot, etc.
325
+
326
+ ### Node not found after installation
327
+
328
+ 1. Make sure you installed `n8n-nodes-do`
329
+ 2. Restart n8n after installation
330
+ 3. Check **Settings → Community Nodes** to confirm it's listed
331
+
332
+ ### Rate Limits
333
+
334
+ DigitalOcean API has rate limits. If you encounter rate limit errors:
335
+ - Reduce the frequency of API calls
336
+ - Use the `limit` parameter to fetch smaller batches
337
+ - Consider using wait nodes between operations
338
+
339
+ ---
340
+
341
+ ## License
342
+
343
+ [MIT](LICENSE.md)
344
+
345
+ ---
346
+
347
+ ## Credits
348
+
349
+ Built with the [n8n Node Starter](https://github.com/n8n-io/n8n-nodes-starter).
350
+ Uses the [DigitalOcean API v2](https://docs.digitalocean.com/reference/api/).
@@ -0,0 +1,10 @@
1
+ import { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class DigitalOceanApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ icon: any;
7
+ properties: INodeProperties[];
8
+ authenticate: IAuthenticateGeneric;
9
+ test: ICredentialTestRequest;
10
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DigitalOceanApi = void 0;
4
+ class DigitalOceanApi {
5
+ constructor() {
6
+ this.name = 'digitalOceanApi';
7
+ this.displayName = 'DigitalOcean API';
8
+ this.documentationUrl = 'https://docs.digitalocean.com/reference/api/';
9
+ this.icon = 'file:digitalocean.svg';
10
+ this.properties = [
11
+ {
12
+ displayName: 'Personal Access Token',
13
+ name: 'accessToken',
14
+ type: 'string',
15
+ typeOptions: {
16
+ password: true,
17
+ },
18
+ default: '',
19
+ required: true,
20
+ description: 'Your DigitalOcean Personal Access Token. Generate one at https://cloud.digitalocean.com/account/api/tokens',
21
+ },
22
+ ];
23
+ this.authenticate = {
24
+ type: 'generic',
25
+ properties: {
26
+ headers: {
27
+ Authorization: '=Bearer {{$credentials.accessToken}}',
28
+ },
29
+ },
30
+ };
31
+ this.test = {
32
+ request: {
33
+ baseURL: 'https://api.digitalocean.com/v2',
34
+ url: '/account',
35
+ method: 'GET',
36
+ },
37
+ };
38
+ }
39
+ }
40
+ exports.DigitalOceanApi = DigitalOceanApi;
41
+ //# sourceMappingURL=DigitalOceanApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DigitalOceanApi.credentials.js","sourceRoot":"","sources":["../../credentials/DigitalOceanApi.credentials.ts"],"names":[],"mappings":";;;AASA,MAAa,eAAe;IAA5B;QACC,SAAI,GAAG,iBAAiB,CAAC;QACzB,gBAAW,GAAG,kBAAkB,CAAC;QACjC,qBAAgB,GAAG,8CAA8C,CAAC;QAClE,SAAI,GAAG,uBAA8B,CAAC;QACtC,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,uBAAuB;gBACpC,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,4GAA4G;aACzH;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,sCAAsC;iBACrD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,iCAAiC;gBAC1C,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AAnCD,0CAmCC"}
@@ -0,0 +1,3 @@
1
+ <svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M20.0165 0C8.94791 0 0 9.01388 0 20.1653C0 29.0792 5.73324 36.6246 13.6868 39.2952C14.6812 39.496 15.0454 38.8613 15.0454 38.3274C15.0454 37.8599 15.0126 36.2575 15.0126 34.5879C9.4445 35.79 8.28498 32.1841 8.28498 32.1841C7.39015 29.847 6.06429 29.2463 6.06429 29.2463C4.24185 28.011 6.19704 28.011 6.19704 28.011C8.21861 28.1446 9.27938 30.081 9.27938 30.081C11.0686 33.1522 13.9518 32.2844 15.1118 31.7502C15.2773 30.4481 15.8079 29.5467 16.3713 29.046C11.9303 28.5785 7.25781 26.8425 7.25781 19.0967C7.25781 16.8932 8.05267 15.0905 9.31216 13.6884C9.11344 13.1877 8.41732 11.1174 9.51128 8.34644C9.51128 8.34644 11.2014 7.81217 15.0122 10.4164C16.6438 9.97495 18.3263 9.7504 20.0165 9.74851C21.7067 9.74851 23.4295 9.98246 25.0205 10.4164C28.8317 7.81217 30.5218 8.34644 30.5218 8.34644C31.6158 11.1174 30.9192 13.1877 30.7205 13.6884C32.0132 15.0905 32.7753 16.8932 32.7753 19.0967C32.7753 26.8425 28.1028 28.5449 23.6287 29.046C24.358 29.6802 24.9873 30.882 24.9873 32.7851C24.9873 35.4893 24.9545 37.6596 24.9545 38.327C24.9545 38.8613 25.3192 39.496 26.3132 39.2956C34.2667 36.6242 39.9999 29.0792 39.9999 20.1653C40.0327 9.01388 31.052 0 20.0165 0Z" fill="white"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M20.0165 0C8.94791 0 0 9.01388 0 20.1653C0 29.0792 5.73324 36.6246 13.6868 39.2952C14.6812 39.496 15.0454 38.8613 15.0454 38.3274C15.0454 37.8599 15.0126 36.2575 15.0126 34.5879C9.4445 35.79 8.28498 32.1841 8.28498 32.1841C7.39015 29.847 6.06429 29.2463 6.06429 29.2463C4.24185 28.011 6.19704 28.011 6.19704 28.011C8.21861 28.1446 9.27938 30.081 9.27938 30.081C11.0686 33.1522 13.9518 32.2844 15.1118 31.7502C15.2773 30.4481 15.8079 29.5467 16.3713 29.046C11.9303 28.5785 7.25781 26.8425 7.25781 19.0967C7.25781 16.8932 8.05267 15.0905 9.31216 13.6884C9.11344 13.1877 8.41732 11.1174 9.51128 8.34644C9.51128 8.34644 11.2014 7.81217 15.0122 10.4164C16.6438 9.97495 18.3263 9.7504 20.0165 9.74851C21.7067 9.74851 23.4295 9.98246 25.0205 10.4164C28.8317 7.81217 30.5218 8.34644 30.5218 8.34644C31.6158 11.1174 30.9192 13.1877 30.7205 13.6884C32.0132 15.0905 32.7753 16.8932 32.7753 19.0967C32.7753 26.8425 28.1028 28.5449 23.6287 29.046C24.358 29.6802 24.9873 30.882 24.9873 32.7851C24.9873 35.4893 24.9545 37.6596 24.9545 38.327C24.9545 38.8613 25.3192 39.496 26.3132 39.2956C34.2667 36.6242 39.9999 29.0792 39.9999 20.1653C40.0327 9.01388 31.052 0 20.0165 0Z" fill="#24292F"/>
3
+ </svg>
@@ -0,0 +1,22 @@
1
+ import { IExecuteFunctions, ILoadOptionsFunctions, INodeExecutionData, INodePropertyOptions, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class DigitalOcean implements INodeType {
3
+ description: INodeTypeDescription;
4
+ methods: {
5
+ loadOptions: {
6
+ getDroplets(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
7
+ getVolumes(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
8
+ getDatabases(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
9
+ getDomains(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
10
+ getImages(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
11
+ getClusters(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
12
+ getLoadBalancers(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
13
+ getProjects(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
14
+ getReservedIps(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
15
+ getSnapshots(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
16
+ getSshKeys(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
17
+ getVpcs(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
18
+ getFirewalls(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
19
+ };
20
+ };
21
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
22
+ }