const fetch = require('node-fetch'); const {SLACK_WEBHOOK_URL, SLACK_WEBHOOK_TIMEOUT} = require('./config'); const debug = require('debug')('talk:plugin:slack-notifications'); // We don't add the hooks during _test_ as the Slack API is not available. if (process.env.NODE_ENV === 'test') { return null; } module.exports = { RootMutation: { createComment: { async post(_, {input}, context, _info, result) { debug(`Posting notification to Slack webhook: ${SLACK_WEBHOOK_URL}`); const { comment: { body: text, created_at: createdAt } } = result; const username = context.user.username; process.nextTick(async () => { const response = await fetch(SLACK_WEBHOOK_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', }, timeout: SLACK_WEBHOOK_TIMEOUT, body: JSON.stringify({ attachments: [{ text: text, footer: `Comment by ${username}`, ts: Math.floor(Date.parse(createdAt) / 1000), }] }), }); if (!response.ok) { const responseText = await response.text(); console.trace(`Posting to Slack failed with HTTP code ${response.status} and body '${responseText}'`); } }); return result; }, }, }, };