n8n-nodes-digital-ocean
Version:
n8n community node to work with the Digital Ocean API
425 lines • 21.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DigitalOcean = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const GenericFunctions_1 = require("./GenericFunctions");
const Descriptions_1 = require("./Descriptions");
class DigitalOcean {
constructor() {
this.description = {
displayName: 'Digital Ocean',
name: 'digitalOcean',
group: ['transform'],
icon: 'file:digitalocean.svg',
version: 1,
description: 'Digital Ocean',
usableAsTool: true,
defaults: {
name: 'Digital Ocean',
},
inputs: ["main"],
outputs: ["main"],
credentials: [
{
name: 'digitalOceanApi',
required: true,
displayOptions: {
show: {
authentication: ['accessToken'],
},
},
},
{
name: 'digitalOceanOAuth2Api',
required: true,
displayOptions: {
show: {
authentication: ['oAuth2'],
},
},
},
],
properties: [
{
displayName: 'Authentication',
name: 'authentication',
type: 'options',
options: [
{
name: 'Access Token',
value: 'accessToken',
},
{
name: 'OAuth2',
value: 'oAuth2',
},
],
default: 'accessToken',
},
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'Account',
value: 'account',
},
{
name: 'Domain',
value: 'domain',
},
{
name: 'Droplet',
value: 'droplet',
},
{
name: 'Event',
value: 'event',
},
],
default: 'account',
},
...Descriptions_1.accountDescription,
...Descriptions_1.eventDescription,
...Descriptions_1.eventFields,
...Descriptions_1.domainDescription,
...Descriptions_1.domainFields,
...Descriptions_1.dropletDescription,
...Descriptions_1.dropletFields,
],
};
this.methods = {
loadOptions: {
async getSizes() {
const returnData = [];
const dropletSizes = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'sizes', 'GET', 'sizes');
for (const dropletSize of dropletSizes) {
const dropletSizeName = dropletSize.slug;
const dropletSizeId = dropletSize.slug;
returnData.push({
name: dropletSizeName,
value: dropletSizeId,
});
}
return returnData;
},
async getDistributionImages() {
const returnData = [];
const dropletImages = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'images', 'GET', 'images?type=distribution');
for (const dropletImage of dropletImages) {
const dropletImageName = dropletImage.name;
const dropletImageId = dropletImage.id;
returnData.push({
name: dropletImageName,
value: dropletImageId,
});
}
return returnData;
},
async getAppImages() {
const returnData = [];
const dropletImages = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'images', 'GET', 'images?type=application');
for (const dropletImage of dropletImages) {
const dropletImageName = dropletImage.name;
const dropletImageId = dropletImage.id;
returnData.push({
name: dropletImageName,
value: dropletImageId,
});
}
return returnData;
},
async getRegions() {
const returnData = [];
const regions = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'regions', 'GET', 'regions');
for (const region of regions) {
const regionName = region.name;
const regionId = region.slug;
returnData.push({
name: regionName,
value: regionId,
});
}
return returnData;
},
async getSSHKeys() {
const returnData = [];
const sshKeys = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'ssh_keys', 'GET', 'account/keys');
for (const sshKey of sshKeys) {
const sshKeyName = sshKey.name;
const sshKeyId = sshKey.id;
returnData.push({
name: sshKeyName,
value: sshKeyId,
});
}
return returnData;
},
async getTags() {
const returnData = [];
const tags = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'tags', 'GET', 'tags');
for (const tag of tags) {
const tagName = tag.name;
const tagId = tag.name;
returnData.push({
name: tagName,
value: tagId,
});
}
return returnData;
},
async getDroplets() {
const returnData = [];
const droplets = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'droplets', 'GET', 'droplets');
for (const droplet of droplets) {
const dropletName = droplet.name;
const dropletId = droplet.id;
returnData.push({
name: dropletName,
value: dropletId,
});
}
return returnData;
},
},
};
}
async execute() {
const items = this.getInputData();
const returnData = [];
let responseData;
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
try {
const resource = this.getNodeParameter('resource', 0);
const operation = this.getNodeParameter('operation', 0);
if (resource === 'account') {
if (operation === 'get') {
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'GET', 'account');
responseData = responseData.account;
}
}
if (resource === 'event') {
if (operation === 'get') {
const actionId = this.getNodeParameter('eventId', itemIndex);
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'GET', `actions/${actionId}`);
responseData = responseData.action;
}
if (operation === 'getMany') {
const returnAll = this.getNodeParameter('returnAll', itemIndex);
const qs = {};
if (returnAll) {
responseData = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'actions', 'GET', 'actions', {}, qs);
}
else {
const limit = this.getNodeParameter('limit', itemIndex);
qs.limit = limit;
if (limit >= 200) {
responseData = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'actions', 'GET', 'actions', {}, qs);
}
else {
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'GET', 'actions', {}, qs);
responseData = responseData.actions;
}
}
}
}
if (resource === 'domain') {
if (operation === 'get') {
const domainName = this.getNodeParameter('domainName', itemIndex);
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'GET', `domains/${domainName}`);
responseData = responseData.domain;
}
if (operation === 'getMany') {
const returnAll = this.getNodeParameter('returnAll', itemIndex);
const qs = {};
if (returnAll) {
responseData = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'domains', 'GET', 'domains', {}, qs);
}
else {
const limit = this.getNodeParameter('limit', itemIndex);
qs.limit = limit;
if (limit >= 200) {
responseData = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'domains', 'GET', 'domains', {}, qs);
}
else {
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'GET', 'domains', {}, qs);
responseData = responseData.domains;
}
}
}
if (operation === 'delete') {
const domainName = this.getNodeParameter('domainName', itemIndex);
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'DELETE', `domains/${domainName}`);
responseData = { success: true };
}
if (operation === 'create') {
const domainName = this.getNodeParameter('domainName', itemIndex);
const ipAddress = this.getNodeParameter('ipAddress', itemIndex);
const body = {
name: domainName,
ip_address: ipAddress,
};
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'POST', `domains`, body);
responseData = responseData.domain;
}
}
if (resource === 'droplet') {
if (operation === 'action') {
const dropletId = this.getNodeParameter('dropletId', itemIndex);
const action = this.getNodeParameter('action', itemIndex);
const body = {
type: action,
};
if (action === 'snapshot') {
const snapshotName = this.getNodeParameter('snapshotName', itemIndex);
body.name = snapshotName;
}
if (action === 'rename') {
const name = this.getNodeParameter('dropletName', itemIndex);
body.name = name;
}
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'POST', `droplets/${dropletId}/actions`, body);
responseData = responseData.action;
}
if (operation === 'get') {
const dropletId = this.getNodeParameter('dropletId', itemIndex);
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'GET', 'droplets', {}, { droplet_id: dropletId });
responseData = responseData.droplets;
}
if (operation === 'getMany') {
const returnAll = this.getNodeParameter('returnAll', itemIndex);
const additionalFields = this.getNodeParameter('additionalFields', itemIndex);
const qs = {};
if (additionalFields.tagName) {
qs.tag_name = additionalFields.tagName;
}
if (additionalFields.name) {
qs.name = additionalFields.name;
}
if (qs.name && qs.tag_name) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'The Digital Ocean API does not allow both Tag Name and Name to be used, Please remove one of the options and try again.', {
itemIndex,
});
}
if (returnAll) {
responseData = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'droplets', 'GET', 'droplets', {}, qs);
}
else {
const limit = this.getNodeParameter('limit', itemIndex);
qs.limit = limit;
if (limit >= 200) {
responseData = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'droplets', 'GET', 'droplets', {}, qs);
}
else {
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'GET', 'droplets', {}, qs);
responseData = responseData.droplets;
}
}
}
if (operation === 'getBackups') {
const returnAll = this.getNodeParameter('returnAll', itemIndex);
const dropletId = this.getNodeParameter('dropletId', itemIndex);
const qs = {};
if (returnAll) {
responseData = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'backups', 'GET', `droplets/${dropletId}/backups`, {}, qs);
}
else {
const limit = this.getNodeParameter('limit', itemIndex);
qs.limit = limit;
if (limit >= 200) {
responseData = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'backups', 'GET', `droplets/${dropletId}/backups`, {}, qs);
}
else {
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'GET', `droplets/${dropletId}/backups`, {}, qs);
responseData = responseData.backups;
}
}
}
if (operation === 'getSnapshots') {
const returnAll = this.getNodeParameter('returnAll', itemIndex);
const dropletId = this.getNodeParameter('dropletId', itemIndex);
const qs = {};
if (returnAll) {
responseData = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'snapshots', 'GET', `droplets/${dropletId}/snapshots`, {}, qs);
}
else {
const limit = this.getNodeParameter('limit', itemIndex);
qs.limit = limit;
if (limit >= 200) {
responseData = await GenericFunctions_1.digitalOceanApiRequestAllItems.call(this, 'snapshots', 'GET', `droplets/${dropletId}/snapshots`, {}, qs);
}
else {
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'GET', `droplets/${dropletId}/snapshots`, {}, qs);
responseData = responseData.snapshots;
}
}
}
if (operation === 'delete') {
const dropletId = this.getNodeParameter('dropletId', itemIndex);
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'DELETE', `droplets/${dropletId}`);
responseData = { success: true };
}
if (operation === 'create') {
const name = this.getNodeParameter('name', itemIndex);
const size = this.getNodeParameter('size', itemIndex);
const useApplicationImage = this.getNodeParameter('useApplicationImage', itemIndex);
const additionalFields = this.getNodeParameter('additionalFields', itemIndex);
let image = '';
if (useApplicationImage) {
image = this.getNodeParameter('applicationImage', itemIndex);
}
else {
image = this.getNodeParameter('image', itemIndex);
}
const body = {
name,
size,
image,
};
if (additionalFields.region) {
body.region = additionalFields.region;
}
if (additionalFields.sshKeys) {
body.ssh_keys = additionalFields.sshKeys;
}
if (additionalFields.backups) {
body.backups = additionalFields.backups;
}
if (additionalFields.ipv6) {
body.ipv6 = additionalFields.ipv6;
}
if (additionalFields.monitoring) {
body.monitoring = additionalFields.monitoring;
}
if (additionalFields.tags) {
body.tags = additionalFields.tags;
}
responseData = await GenericFunctions_1.digitalOceanApiRequest.call(this, 'POST', 'droplets', body);
responseData = responseData.droplet;
}
}
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: itemIndex } });
returnData.push(...executionData);
}
catch (error) {
if (this.continueOnFail()) {
items.push({ json: this.getInputData(itemIndex)[0].json, error, pairedItem: itemIndex });
}
else {
if (error.context) {
error.context.itemIndex = itemIndex;
throw error;
}
throw new n8n_workflow_1.NodeOperationError(this.getNode(), error, {
itemIndex,
});
}
}
}
return this.prepareOutputData(returnData);
}
}
exports.DigitalOcean = DigitalOcean;
//# sourceMappingURL=DigitalOcean.node.js.map