UNPKG

n8n-nodes-basecamp-sender

Version:
164 lines 6.69 kB
"use strict"; 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