Socket
Socket
Sign inDemoInstall

hubot-jira-issue-fetcher

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hubot-jira-issue-fetcher - npm Package Compare versions

Comparing version 1.4.1 to 1.4.2

lib/slackUtils.js

0

Gruntfile.js

@@ -0,0 +0,0 @@ module.exports = function(grunt) {

@@ -1,1 +0,86 @@

module.exports = require('./hubot').default
const jira = require('./lib/jira');
const messageParser = require('./lib/messageParser');
const messageFormatter = require('./lib/messageFormatter');
const slackUtils = require('./lib/slackUtils');
const configuration = {
jiraHost: process.env.JIRA_HOST,
projectsKeys: process.env.JIRA_PROJECTS_KEYS.split(','),
jiraUser: process.env.JIRA_USER,
jiraPwd: process.env.JIRA_PWD,
},
jiraApi = jira(configuration),
parser = messageParser(configuration),
formatter = messageFormatter(configuration),
JIRA_KEY_MATCHER = /[A-Z0-9]*-\d+/i;
let bot;
module.exports = (robot) => {
bot = robot;
bot.hear(JIRA_KEY_MATCHER, (res) => {
if (slackUtils.isBotMessage(res.message)) {
return;
}
let message = {
room: res.message.user.room,
text: res.message.text,
needDetailedInfo: slackUtils.isDirectMessage(res.message.text, robot.name),
thread_ts: res.message.thread_ts,
};
getIssues(parser.extractIssueKeys(message))
.then(computeInfoLevel)
.then(buildResponseMessage)
.then(sendResponseMessage)
.catch((err) => handleError(err, message));
});
};
function getIssues(message) {
message.issues = [];
if (message.issueKeys.length) {
return jiraApi.getIssuesByKeys(message.issueKeys).then((issues) => {
message.issues = issues;
return message;
});
}
return Promise.resolve(message);
}
function computeInfoLevel(message) {
const messageChunks = message.text ? message.text.split(' ') : [];
message.needDetailedInfo |= messageChunks.length === message.issueKeys.length;
return message;
}
function buildResponseMessage(message) {
if (message.needDetailedInfo) {
message.response = formatter.buildDetailedMessages(message.issues);
} else {
message.response = formatter.buildMessages(message.issues);
}
return message;
}
function sendResponseMessage(message) {
if (message.response) {
postMessage(message.room, null, {
as_user: true,
attachments: message.response,
thread_ts: message.thread_ts,
});
}
}
function handleError(err, message) {
bot.logger.error('hubot-jira-issue-fetcher:', err.stack);
postMessage(message.room, formatter.buildErrorMessage(err.response.body), { as_user: true });
}
function postMessage(room, text, options) {
bot.adapter.client.web.chat.postMessage(room, text, options);
}

26

lib/jira.js

@@ -1,9 +0,5 @@

'use strict';
const JiraApi = require('jira-client');
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (config) {
var jira = new _jiraClient2.default({
module.exports = function(config) {
const jira = new JiraApi({
protocol: 'https',

@@ -17,19 +13,9 @@ host: config.jiraHost,

function _getIssuesByKeys(keys) {
return jira.searchJira('key in (' + keys.join(',') + ')').then(function (res) {
return res.issues;
});
function getIssuesByKeys(keys) {
return jira.searchJira(`key in (${keys.join(',')})`).then(res => res.issues);
}
return {
getIssuesByKeys: function getIssuesByKeys(keys) {
return _getIssuesByKeys(keys);
}
getIssuesByKeys: keys => getIssuesByKeys(keys)
};
};
var _jiraClient = require('jira-client');
var _jiraClient2 = _interopRequireDefault(_jiraClient);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -1,28 +0,12 @@

'use strict';
const _ = require('lodash');
Object.defineProperty(exports, "__esModule", {
value: true
});
let config;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var config = void 0;
exports.default = function (configuration) {
module.exports = configuration => {
config = configuration;
return {
buildDetailedMessages: function buildDetailedMessages(issues) {
return _lodash2.default.map(issues, buildDetailedMessage);
},
buildMessages: function buildMessages(issues) {
return _lodash2.default.map(issues, buildMessage);
},
buildErrorMessage: function buildErrorMessage(error) {
return _buildErrorMessage(error);
}
buildDetailedMessages: issues => _.map(issues, buildDetailedMessage),
buildMessages: issues => _.map(issues, buildMessage),
buildErrorMessage: error => buildErrorMessage(error)
};

@@ -37,9 +21,11 @@ };

author_icon: issue.fields.assignee ? issue.fields.assignee.avatarUrls['16x16'] : null,
title: issue.key + ': ' + issue.fields.summary,
title_link: 'https://' + config.jiraHost + '/browse/' + issue.key,
title: `${issue.key}: ${issue.fields.summary}`,
title_link: `https://${config.jiraHost}/browse/${issue.key}`,
text: issue.fields.description,
fields: [{
title: 'Status',
value: issue.fields.status.name
}]
fields: [
{
title: 'Status',
value: issue.fields.status.name
}
]
};

@@ -54,3 +40,5 @@ }

author_icon: issue.fields.assignee ? issue.fields.assignee.avatarUrls['16x16'] : null,
text: '<https://' + config.jiraHost + '/browse/' + issue.key + '|' + issue.key + '> `' + issue.fields.status.name + '` ' + issue.fields.summary,
text: `<https://${config.jiraHost}/browse/${issue.key}|${issue.key}> \`${issue.fields.status.name}\` ${
issue.fields.summary
}`,
mrkdwn_in: ['text']

@@ -83,12 +71,12 @@ };

function _buildErrorMessage(error) {
var message = 'Hmmm... something went wrong :thinking_face:',
errorMessage = _lodash2.default.get(error, 'errorMessages[0]');
function buildErrorMessage(error) {
let message = 'Hmmm... something went wrong :thinking_face:',
errorMessage = _.get(error, 'errorMessages[0]');
if (isUnknownKeyError(errorMessage)) {
var chunks = errorMessage.split('\'');
message = ':exclamation: `' + chunks[1] + '` cannot be found';
const chunks = errorMessage.split("'");
message = `:exclamation: \`${chunks[1]}\` cannot be found`;
}
return message;
}
}

@@ -1,27 +0,15 @@

'use strict';
const _ = require('lodash');
Object.defineProperty(exports, "__esModule", {
value: true
});
const ALL_JIRA_KEY_MATCHER = /[A-Z0-9]*-\d+/g;
var _lodash = require('lodash');
module.exports = configuration => {
return {
extractIssueKeys: message => {
let keys = message.text.toUpperCase().match(ALL_JIRA_KEY_MATCHER);
keys = _.filter(keys, issueKey => _.includes(configuration.projectsKeys, issueKey.split('-')[0]));
message.issueKeys = keys;
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var ALL_JIRA_KEY_MATCHER = /[A-Z0-9]*-\d+/g;
exports.default = function (configuration) {
return {
extractIssueKeys: function extractIssueKeys(message) {
var keys = message.text.toUpperCase().match(ALL_JIRA_KEY_MATCHER);
keys = _lodash2.default.filter(keys, function (issueKey) {
return _lodash2.default.includes(configuration.projectsKeys, issueKey.split('-')[0]);
});
message.issueKeys = keys;
return message;
}
};
};
return message;
}
};
};
{
"name": "hubot-jira-issue-fetcher",
"version": "1.4.1",
"version": "1.4.2",
"description": "Bot fetching JIRA issue details",

@@ -10,5 +10,3 @@ "main": "index.js",

"start": "node index.js",
"build": "babel src -d .",
"prepublish": "npm run build",
"test": "npm run build && ava"
"test": "ava"
},

@@ -21,6 +19,3 @@ "dependencies": {

"devDependencies": {
"ava": "^0.17.0",
"babel-cli": "^6.18.0",
"babel-polyfill": "^6.20.0",
"babel-preset-latest": "^6.16.0",
"ava": "^1.4.1",
"eslint": "^3.14.0",

@@ -27,0 +22,0 @@ "grunt": "^1.0.1",

@@ -1,17 +0,17 @@

hubot-jira-issue-fetcher
========================
# hubot-jira-issue-fetcher
> Hubot script that detects JIRA issue keys in messages, fetch corresponding details and display them
[![Build Status](https://travis-ci.org/AirVantage/hubot-jira-issue-fetcher.svg?branch=master)](https://travis-ci.org/AirVantage/hubot-jira-issue-fetcher)
## Usage
Requires the following environment variables to be set:
- `JIRA_HOST`
+ e.g: `issues.sierrawireless.com`
- `JIRA_PROJECTS_KEYS`
+ e.g: `PLTFRS,OPE`
- `JIRA_USER`
- `JIRA_PWD`
- `JIRA_HOST`
- e.g: `issues.sierrawireless.com`
- `JIRA_PROJECTS_KEYS`
- e.g: `PLTFRS,OPE`
- `JIRA_USER`
- `JIRA_PWD`

@@ -24,5 +24,5 @@ ## Features

- Key (link)
- Status
- Summary
- Key (link)
- Status
- Summary

@@ -33,9 +33,9 @@ ### Detailed display

- Assignee (name + avatar)
- Key + Summary (link)
- Description
- Status
- Assignee (name + avatar)
- Key + Summary (link)
- Description
- Status
## Development
Written in ES7 it uses babeljs and requires to be built using `npm run build` before getting started.
See https://github.com/AirVantage/ccbot#development-setup

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc