n8n-nodes-basecamp-sender
Version:
Basecamp Sender
164 lines • 6.69 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BasecampSender = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const axios_1 = __importDefault(require("axios"));
class BasecampSender {
constructor() {
this.description = {
displayName: 'Basecamp Sender',
name: 'basecampSender',
icon: 'file:BasecampLogo.svg',
group: ['output'],
version: 1,
triggerPanel: false,
subtitle: 'Send message',
description: 'Send message to message board',
defaults: {
name: 'Basecamp Sender',
},
inputs: ["main"],
outputs: ["main"],
credentials: [
{
name: 'oAuth2Api',
displayName: 'Basecamp credentials',
required: true,
},
],
properties: [
{
displayName: 'Account ID',
name: 'account_id',
type: 'string',
required: true,
default: '',
},
{
displayName: 'Project ID',
name: 'project_id',
type: 'string',
required: true,
default: '',
},
{
displayName: 'MessageBoard ID',
name: 'message_board_id',
type: 'string',
required: true,
default: '',
},
{
displayName: 'Subject',
name: 'subject',
type: 'string',
default: '',
},
{
displayName: 'Content',
name: 'content',
type: 'string',
default: '',
typeOptions: {
rows: 5,
},
},
{
displayName: 'Options',
name: 'options',
type: 'collection',
placeholder: 'Add option',
default: {},
options: [
{
displayName: 'Status',
name: 'status',
type: 'string',
default: 'active',
},
{
displayName: 'Basecamp URL',
name: 'basecamp_url',
type: 'string',
default: 'https://3.basecampapi.com',
description: 'Basecamp base URL',
},
{
displayName: 'Token URL',
name: 'token_url',
type: 'string',
default: 'https://launchpad.37signals.com',
description: 'Basecamp token URL',
},
{
displayName: 'Put Response in Field',
name: 'response_field',
type: 'string',
default: 'response',
description: 'The name of the output field to put the response in',
},
],
},
],
};
}
async execute() {
var _a;
const items = this.getInputData();
let item;
const returnItems = [];
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
item = { ...items[itemIndex] };
const newItem = {
json: item.json,
pairedItem: {
item: itemIndex,
},
};
const account_id = this.getNodeParameter('account_id', itemIndex);
const project_id = this.getNodeParameter('project_id', itemIndex);
const message_board_id = this.getNodeParameter('message_board_id', itemIndex);
const subject = this.getNodeParameter('subject', itemIndex);
const content = this.getNodeParameter('content', itemIndex);
const options = this.getNodeParameter('options', itemIndex);
const status = options.status ? options.status : 'active';
const basecamp_url = options.basecamp_url
? options.basecamp_url
: 'https://3.basecampapi.com';
const token_url = options.token_url
? options.token_url
: 'https://launchpad.37signals.com';
const response_field = options.response_field
? options.response_field
: 'response';
const oAuthCredentials = (await this.getCredentials('oAuth2Api'));
const refreshToken = (_a = oAuthCredentials.oauthTokenData) === null || _a === void 0 ? void 0 : _a.refresh_token;
if (!refreshToken) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No refresh token available in credentials.');
}
const { clientId, clientSecret } = oAuthCredentials;
const url = `${token_url}/authorization/token?type=refresh&refresh_token=${refreshToken}&client_id=${clientId}&client_secret=${clientSecret}`;
const refreshCall = await axios_1.default.post(url);
const newAccessToken = refreshCall.data.access_token;
let messagePayload = {
subject: subject,
content: content,
status: status,
};
const messageCall = await axios_1.default.post(`${basecamp_url}/${account_id}/buckets/${project_id}/message_boards/${message_board_id}/messages.json`, messagePayload, {
headers: {
Authorization: `Bearer ${newAccessToken}`,
'Content-Type': 'application/json',
},
});
newItem.json[response_field] = messageCall.data;
returnItems.push(newItem);
}
return [returnItems];
}
}
exports.BasecampSender = BasecampSender;
//# sourceMappingURL=BasecampSender.node.js.map